From 8ca13545802cf4db7ae81d7a3844624a8a135b4b Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 24 Sep 2024 04:46:08 +0000 Subject: [PATCH] rebase from vscode f35c3823 --- .dependencygraph/setting.json | 13 - .devcontainer/devcontainer.json | 2 +- ...code-ensure-no-disposables-leak-in-test.ts | 7 +- .eslintplugin/code-import-patterns.ts | 49 +- .eslintplugin/code-no-look-behind-regex.ts | 50 - .eslintrc.json | 158 +- .git-blame-ignore-revs | 3 + .npmrc | 4 +- .nvmrc | 2 +- .../.vscode/launch.json | 16 + .../.vscode/settings.json | 7 + .../package-lock.json | 31 + .../vscode-selfhost-import-aid/package.json | 29 + .../src/extension.ts | 234 + .../vscode-selfhost-import-aid/tsconfig.json | 14 + .../package-lock.json | 38 +- .../src/sourceUtils.ts | 54 +- .../src/vscodeTestRunner.ts | 9 +- .vscode/notebooks/api.github-issues | 2 +- .vscode/notebooks/endgame.github-issues | 2 +- .vscode/notebooks/my-endgame.github-issues | 2 +- .vscode/notebooks/my-work.github-issues | 2 +- .vscode/settings.json | 7 +- cglicenses.json => .yarnrc | 27 - CONTRIBUTING.md | 27 +- ThirdPartyNotices.txt | 578 +- build/.moduleignore | 2 +- build/.webignore | 2 +- .../alpine/product-build-alpine.yml | 2 +- build/azure-pipelines/cli/cli-darwin-sign.yml | 2 +- build/azure-pipelines/cli/cli-win32-sign.yml | 2 +- .../cli/install-rust-posix.yml | 2 +- .../cli/install-rust-win32.yml | 2 +- .../darwin/product-build-darwin-cli-sign.yml | 4 +- .../darwin/product-build-darwin-sign.yml | 2 +- .../darwin/product-build-darwin-test.yml | 434 +- .../darwin/product-build-darwin-universal.yml | 2 +- .../darwin/product-build-darwin.yml | 272 +- .../distro/download-distro.yml | 2 +- build/azure-pipelines/linux/apt-retry.sh | 42 + .../azure-pipelines/linux/cli-build-linux.yml | 164 +- .../product-build-linux-legacy-server.yml | 74 +- .../linux/product-build-linux-test.yml | 485 +- .../linux/product-build-linux.yml | 492 +- build/azure-pipelines/linux/setup-env.sh | 7 +- .../linux/snap-build-linux.yml | 6 +- build/azure-pipelines/product-build-pr.yml | 239 +- build/azure-pipelines/product-build.yml | 69 +- build/azure-pipelines/product-compile.yml | 194 +- build/azure-pipelines/product-publish.yml | 4 +- build/azure-pipelines/upload-sourcemaps.js | 4 + build/azure-pipelines/upload-sourcemaps.ts | 4 + .../azure-pipelines/web/product-build-web.yml | 2 +- .../win32/product-build-win32-test.yml | 422 +- .../win32/product-build-win32.yml | 6 +- .../azure-pipelines/win32/sdl-scan-win32.yml | 2 +- build/buildfile.js | 10 +- build/checksums/electron.txt | 150 +- build/checksums/nodejs.txt | 14 +- build/darwin/create-universal-app.js | 6 +- build/darwin/create-universal-app.ts | 7 +- build/gulpfile.compile.js | 8 +- build/gulpfile.editor.js | 42 +- build/gulpfile.extensions.js | 6 +- build/gulpfile.js | 6 +- build/gulpfile.reh.js | 31 +- build/gulpfile.vscode.js | 53 +- build/gulpfile.vscode.linux.js | 2 + build/gulpfile.vscode.web.js | 31 +- build/gulpfile.vscode.win32.js | 3 +- build/hygiene.js | 1 - build/lib/{esm.js => amd.js} | 24 +- build/lib/{esm.ts => amd.ts} | 18 +- build/lib/asar.js | 26 +- build/lib/asar.ts | 27 +- build/lib/builtInExtensions.js | 3 +- build/lib/builtInExtensions.ts | 4 +- build/lib/layersChecker.js | 17 + build/lib/layersChecker.ts | 19 + build/lib/mangle/index.js | 4 +- build/lib/mangle/index.ts | 6 +- build/lib/nls.js | 10 +- build/lib/nls.ts | 10 +- build/lib/optimize.js | 22 +- build/lib/optimize.ts | 23 +- build/lib/standalone.js | 65 +- build/lib/standalone.ts | 69 +- .../lib/stylelint/vscode-known-variables.json | 33 +- build/lib/treeshaking.js | 8 +- build/lib/treeshaking.ts | 10 +- build/lib/tsb/builder.js | 5 +- build/lib/tsb/builder.ts | 5 +- build/linux/dependencies-generator.js | 4 +- build/linux/dependencies-generator.ts | 4 +- build/loader.min | 10 + build/npm/dirs.js | 1 + build/npm/gyp/package-lock.json | 1321 +++ build/package-lock.json | 428 +- build/package.json | 2 - cgmanifest.json | 8 +- cli/Cargo.toml | 1 + cli/ThirdPartyNotices.txt | 168 +- cli/src/auth.rs | 2 +- cli/src/commands/args.rs | 13 +- cli/src/commands/serve_web.rs | 73 +- cli/src/commands/tunnels.rs | 6 +- cli/src/download_cache.rs | 8 +- cli/src/tunnels/code_server.rs | 2 +- .../configuration-editing/.vscodeignore | 1 - .../css-language-features/.vscodeignore | 2 - extensions/dart/cgmanifest.json | 2 +- extensions/dart/syntaxes/dart.tmLanguage.json | 4 +- extensions/debug-auto-launch/.vscodeignore | 1 - extensions/debug-server-ready/.vscodeignore | 1 - extensions/emmet/.vscodeignore | 1 - extensions/extension-editing/.vscodeignore | 1 - extensions/fsharp/cgmanifest.json | 2 +- .../fsharp/syntaxes/fsharp.tmLanguage.json | 6 +- extensions/git/.vscodeignore | 1 - extensions/git/package.json | 174 +- extensions/git/package.nls.json | 4 +- extensions/git/src/api/api1.ts | 4 +- extensions/git/src/api/git.d.ts | 2 +- extensions/git/src/commands.ts | 46 +- extensions/git/src/decorationProvider.ts | 52 +- extensions/git/src/git.ts | 48 +- extensions/git/src/historyProvider.ts | 405 +- extensions/git/src/repository.ts | 49 +- extensions/git/src/terminal.ts | 2 +- extensions/git/src/test/smoke.test.ts | 27 +- extensions/git/src/util.ts | 57 +- .../github-authentication/.vscodeignore | 1 - .../github-authentication/src/github.ts | 51 +- .../github-authentication/src/githubServer.ts | 4 +- extensions/github/.vscodeignore | 1 - extensions/github/package.nls.json | 4 +- extensions/go/cgmanifest.json | 4 +- extensions/go/syntaxes/go.tmLanguage.json | 29 +- extensions/grunt/.vscodeignore | 1 - extensions/gulp/.vscodeignore | 1 - .../html-language-features/.vscodeignore | 2 - .../client/src/autoInsertion.ts | 16 +- extensions/ipynb/.vscodeignore | 1 - .../ipynb/extension-browser.webpack.config.js | 4 +- extensions/ipynb/extension.webpack.config.js | 12 +- extensions/ipynb/package.json | 10 +- extensions/ipynb/package.nls.json | 1 + extensions/ipynb/src/common.ts | 4 - extensions/ipynb/src/constants.ts | 18 +- extensions/ipynb/src/deserializers.ts | 72 +- extensions/ipynb/src/helper.ts | 118 + extensions/ipynb/src/ipynbMain.browser.ts | 16 + extensions/ipynb/src/ipynbMain.node.ts | 16 + extensions/ipynb/src/ipynbMain.ts | 64 +- .../ipynb/src/notebookModelStoreSync.ts | 75 +- .../ipynb/src/notebookSerializer.node.ts | 91 + extensions/ipynb/src/notebookSerializer.ts | 54 +- .../ipynb/src/notebookSerializer.web.ts | 6 +- .../ipynb/src/notebookSerializerWorker.ts | 19 + extensions/ipynb/src/serializers.ts | 86 +- .../src/test/notebookModelStoreSync.test.ts | 1118 ++- extensions/ipynb/src/test/serializers.test.ts | 1199 ++- extensions/jake/.vscodeignore | 1 - .../json-language-features/.vscodeignore | 2 - .../json-language-features/server/.npmignore | 1 - extensions/less/cgmanifest.json | 2 +- extensions/less/syntaxes/less.tmLanguage.json | 609 +- .../markdown-language-features/.vscodeignore | 1 - .../package-lock.json | 8 +- .../markdown-language-features/package.json | 2 +- .../preview-src/index.ts | 4 +- extensions/markdown-math/.vscodeignore | 1 - extensions/media-preview/.vscodeignore | 1 - .../media-preview/src/imagePreview/index.ts | 6 +- extensions/merge-conflict/.vscodeignore | 1 - .../microsoft-authentication/.vscodeignore | 1 - .../extension-browser.webpack.config.js | 1 + .../package-lock.json | 16 +- .../microsoft-authentication/package.json | 2 +- .../microsoft-authentication/src/AADHelper.ts | 6 +- .../src/browser/fetch.ts | 6 + .../src/common/event.ts | 107 + .../src/common/loopbackClientAndOpener.ts | 9 +- .../src/common/publicClientCache.ts | 3 + .../src/common/scopeData.ts | 33 +- .../test/loopbackClientAndOpener.test.ts | 4 +- .../src/common/test/scopeData.test.ts | 17 +- .../src/node/authProvider.ts | 225 +- .../src/node/cachedPublicClientApplication.ts | 198 + .../src/node/fetch.ts | 12 + .../src/node/publicClientCache.ts | 313 +- extensions/npm/.vscodeignore | 1 - extensions/npm/package-lock.json | 20 +- extensions/package-lock.json | 433 +- extensions/package.json | 2 +- .../php-language-features/.vscodeignore | 1 - extensions/references-view/.vscodeignore | 1 - extensions/rust/cgmanifest.json | 2 +- extensions/rust/syntaxes/rust.tmLanguage.json | 11 +- extensions/search-result/.vscodeignore | 1 - extensions/shared.webpack.config.js | 16 +- extensions/simple-browser/.vscodeignore | 1 - extensions/tunnel-forwarding/.vscodeignore | 1 - .../.vscodeignore | 1 - .../typescript-language-features/package.json | 21 +- .../package.nls.json | 30 +- .../src/configuration/configuration.ts | 14 +- .../src/configuration/fileSchemes.ts | 23 +- .../src/extension.browser.ts | 2 +- .../src/languageFeatures/completions.ts | 6 +- .../src/languageFeatures/diagnostics.ts | 13 +- .../fileConfigurationManager.ts | 3 +- .../src/languageFeatures/workspaceSymbols.ts | 2 +- .../src/tsServer/bufferSyncSupport.ts | 4 +- .../src/tsServer/server.ts | 1 - .../src/tsServer/spawner.ts | 12 +- .../src/typeConverters.ts | 3 +- .../src/typescriptServiceClient.ts | 42 +- .../tsconfig.json | 1 - .../test/colorize-fixtures/issue-224862.yaml | 9 + .../colorize-results/issue-224862_yaml.json | 310 + extensions/yaml/cgmanifest.json | 4 +- .../yaml/syntaxes/yaml-1.0.tmLanguage.json | 26 +- .../yaml/syntaxes/yaml-1.2.tmLanguage.json | 26 +- package-lock.json | 7354 +++++++---------- package.json | 46 +- product.json | 4 +- product_original.js | 84 - remote/.npmrc | 4 +- remote/package-lock.json | 105 +- remote/package.json | 18 +- remote/web/.npmrc | 2 + remote/web/package-lock.json | 76 +- remote/web/package.json | 16 +- resources/linux/rpm/code.spec.template | 1 + .../bin/helpers/check-requirements-linux.sh | 3 + scripts/code-web.js | 2 +- scripts/{test-esm.bat => test-amd.bat} | 2 +- scripts/{test-esm.sh => test-amd.sh} | 4 +- ...ation-esm.bat => test-integration-amd.bat} | 2 +- ...gration-esm.sh => test-integration-amd.sh} | 2 +- src/bootstrap-amd.js | 191 +- src/bootstrap-fork.js | 12 +- src/bootstrap-meta.js | 14 +- src/bootstrap-node.js | 117 +- src/bootstrap-window.js | 232 +- src/cli.js | 38 +- src/main.js | 60 +- src/package.json | 3 + src/server-cli.js | 32 +- src/server-main.js | 58 +- src/tsconfig.base.json | 7 +- src/tsconfig.json | 5 +- src/tsconfig.monaco.json | 2 + src/typings/editContext.d.ts | 124 + src/typings/vscode-globals-modules.d.ts | 32 - src/vs/amdX.ts | 53 +- src/vs/base/browser/broadcast.ts | 8 +- src/vs/base/browser/browser.ts | 10 +- src/vs/base/browser/canIUse.ts | 6 +- src/vs/base/browser/contextmenu.ts | 14 +- src/vs/base/browser/defaultWorkerFactory.ts | 43 +- src/vs/base/browser/dnd.ts | 6 +- src/vs/base/browser/dom.ts | 42 +- src/vs/base/browser/domObservable.ts | 6 +- src/vs/base/browser/dompurify/dompurify.js | 24 +- src/vs/base/browser/event.ts | 6 +- src/vs/base/browser/fonts.ts | 2 +- src/vs/base/browser/formattedTextRenderer.ts | 8 +- .../base/browser/globalPointerMoveMonitor.ts | 4 +- src/vs/base/browser/hash.ts | 4 +- src/vs/base/browser/history.ts | 2 +- src/vs/base/browser/indexedDB.ts | 6 +- src/vs/base/browser/keyboardEvent.ts | 8 +- src/vs/base/browser/markdownRenderer.ts | 61 +- src/vs/base/browser/mouseEvent.ts | 6 +- src/vs/base/browser/pixelRatio.ts | 6 +- src/vs/base/browser/touch.ts | 14 +- src/vs/base/browser/trustedTypes.ts | 2 +- .../browser/ui/actionbar/actionViewItems.ts | 36 +- src/vs/base/browser/ui/actionbar/actionbar.ts | 22 +- src/vs/base/browser/ui/aria/aria.ts | 4 +- .../ui/breadcrumbs/breadcrumbsWidget.ts | 22 +- src/vs/base/browser/ui/button/button.ts | 44 +- .../browser/ui/centered/centeredViewLayout.ts | 14 +- .../browser/ui/codicons/codicon/codicon.ttf | Bin 80340 -> 80408 bytes .../base/browser/ui/codicons/codiconStyles.ts | 4 +- .../browser/ui/contextview/contextview.ts | 16 +- .../base/browser/ui/countBadge/countBadge.ts | 6 +- src/vs/base/browser/ui/dialog/dialog.ts | 30 +- src/vs/base/browser/ui/dropdown/dropdown.ts | 28 +- .../ui/dropdown/dropdownActionViewItem.ts | 36 +- src/vs/base/browser/ui/findinput/findInput.ts | 28 +- .../browser/ui/findinput/findInputToggles.ts | 10 +- .../base/browser/ui/findinput/replaceInput.ts | 28 +- src/vs/base/browser/ui/grid/grid.ts | 16 +- src/vs/base/browser/ui/grid/gridview.ts | 26 +- .../ui/highlightedlabel/highlightedLabel.ts | 16 +- src/vs/base/browser/ui/hover/hover.ts | 10 +- src/vs/base/browser/ui/hover/hoverDelegate.ts | 8 +- .../base/browser/ui/hover/hoverDelegate2.ts | 2 +- .../browser/ui/hover/hoverDelegateFactory.ts | 4 +- src/vs/base/browser/ui/hover/hoverWidget.ts | 14 +- src/vs/base/browser/ui/iconLabel/iconLabel.ts | 28 +- .../base/browser/ui/iconLabel/iconLabels.ts | 4 +- .../browser/ui/iconLabel/simpleIconLabel.ts | 12 +- src/vs/base/browser/ui/icons/iconSelectBox.ts | 24 +- src/vs/base/browser/ui/inputbox/inputBox.css | 1 - src/vs/base/browser/ui/inputbox/inputBox.ts | 40 +- .../ui/keybindingLabel/keybindingLabel.ts | 22 +- src/vs/base/browser/ui/list/list.ts | 12 +- src/vs/base/browser/ui/list/listPaging.ts | 20 +- src/vs/base/browser/ui/list/listView.ts | 44 +- src/vs/base/browser/ui/list/listWidget.ts | 72 +- src/vs/base/browser/ui/list/rangeMap.ts | 2 +- src/vs/base/browser/ui/list/rowCache.ts | 6 +- src/vs/base/browser/ui/list/splice.ts | 2 +- src/vs/base/browser/ui/menu/menu.ts | 44 +- src/vs/base/browser/ui/menu/menubar.ts | 40 +- .../browser/ui/mouseCursor/mouseCursor.ts | 2 +- .../progressAccessibilitySignal.ts | 2 +- .../browser/ui/progressbar/progressbar.ts | 12 +- src/vs/base/browser/ui/radio/radio.ts | 20 +- src/vs/base/browser/ui/resizable/resizable.ts | 8 +- src/vs/base/browser/ui/sash/sash.ts | 18 +- .../browser/ui/scrollbar/abstractScrollbar.ts | 20 +- .../ui/scrollbar/horizontalScrollbar.ts | 14 +- .../browser/ui/scrollbar/scrollableElement.ts | 30 +- .../ui/scrollbar/scrollableElementOptions.ts | 2 +- .../browser/ui/scrollbar/scrollbarArrow.ts | 10 +- .../scrollbarVisibilityController.ts | 8 +- .../browser/ui/scrollbar/verticalScrollbar.ts | 14 +- src/vs/base/browser/ui/selectBox/selectBox.ts | 20 +- .../browser/ui/selectBox/selectBoxCustom.ts | 40 +- .../browser/ui/selectBox/selectBoxNative.ts | 16 +- src/vs/base/browser/ui/splitview/paneview.ts | 30 +- src/vs/base/browser/ui/splitview/splitview.ts | 26 +- src/vs/base/browser/ui/table/table.ts | 4 +- src/vs/base/browser/ui/table/tableWidget.ts | 24 +- src/vs/base/browser/ui/toggle/toggle.ts | 28 +- src/vs/base/browser/ui/toolbar/toolbar.ts | 28 +- src/vs/base/browser/ui/tree/abstractTree.ts | 652 +- src/vs/base/browser/ui/tree/asyncDataTree.ts | 543 +- .../ui/tree/compressedObjectTreeModel.ts | 67 +- src/vs/base/browser/ui/tree/dataTree.ts | 15 +- src/vs/base/browser/ui/tree/indexTree.ts | 29 +- src/vs/base/browser/ui/tree/indexTreeModel.ts | 50 +- src/vs/base/browser/ui/tree/objectTree.ts | 32 +- .../base/browser/ui/tree/objectTreeModel.ts | 25 +- src/vs/base/browser/ui/tree/tree.ts | 19 +- src/vs/base/browser/ui/tree/treeDefaults.ts | 8 +- src/vs/base/browser/ui/widget.ts | 10 +- src/vs/base/common/actions.ts | 6 +- src/vs/base/common/amd.ts | 8 +- src/vs/base/common/arrays.ts | 24 +- src/vs/base/common/arraysFind.ts | 2 +- src/vs/base/common/assert.ts | 2 +- src/vs/base/common/async.ts | 18 +- src/vs/base/common/buffer.ts | 4 +- src/vs/base/common/cache.ts | 4 +- src/vs/base/common/cancellation.ts | 4 +- src/vs/base/common/codicons.ts | 6 +- src/vs/base/common/codiconsLibrary.ts | 2 +- src/vs/base/common/codiconsUtil.ts | 4 +- src/vs/base/common/collections.ts | 4 +- src/vs/base/common/color.ts | 87 +- src/vs/base/common/comparers.ts | 4 +- src/vs/base/common/console.ts | 2 +- src/vs/base/common/controlFlow.ts | 2 +- src/vs/base/common/dataTransfer.ts | 8 +- src/vs/base/common/date.ts | 2 +- src/vs/base/common/desktopEnvironmentInfo.ts | 2 +- src/vs/base/common/diff/diff.ts | 6 +- src/vs/base/common/equals.ts | 2 +- src/vs/base/common/errorMessage.ts | 8 +- src/vs/base/common/errors.ts | 10 + src/vs/base/common/event.ts | 57 +- src/vs/base/common/extpath.ts | 10 +- src/vs/base/common/filters.ts | 8 +- src/vs/base/common/fuzzyScorer.ts | 14 +- src/vs/base/common/glob.ts | 16 +- src/vs/base/common/hash.ts | 2 +- src/vs/base/common/history.ts | 6 +- src/vs/base/common/hotReload.ts | 10 +- src/vs/base/common/hotReloadHelpers.ts | 25 +- src/vs/base/common/htmlContent.ts | 10 +- src/vs/base/common/iconLabels.ts | 6 +- src/vs/base/common/ime.ts | 2 +- src/vs/base/common/jsonEdit.ts | 4 +- src/vs/base/common/jsonErrorMessages.ts | 4 +- src/vs/base/common/jsonFormatter.ts | 2 +- src/vs/base/common/jsonc.js | 16 +- src/vs/base/common/keybindingLabels.ts | 6 +- src/vs/base/common/keybindingParser.ts | 4 +- src/vs/base/common/keybindings.ts | 6 +- src/vs/base/common/labels.ts | 15 +- src/vs/base/common/lifecycle.ts | 10 +- src/vs/base/common/linkedText.ts | 2 +- src/vs/base/common/map.ts | 92 +- src/vs/base/common/marked/marked.js | 50 +- src/vs/base/common/marshalling.ts | 6 +- src/vs/base/common/mime.ts | 2 +- src/vs/base/common/network.ts | 18 +- src/vs/base/common/normalization.ts | 2 +- src/vs/base/common/objects.ts | 4 +- src/vs/base/common/observable.ts | 70 +- src/vs/base/common/observableInternal/api.ts | 9 +- .../base/common/observableInternal/autorun.ts | 64 +- src/vs/base/common/observableInternal/base.ts | 11 +- .../commonFacade/cancellation.ts | 7 + .../observableInternal/commonFacade/deps.ts | 10 + .../base/common/observableInternal/derived.ts | 72 +- .../base/common/observableInternal/index.ts | 29 + .../observableInternal/lazyObservableValue.ts | 7 +- .../base/common/observableInternal/logging.ts | 8 +- .../base/common/observableInternal/promise.ts | 96 +- .../base/common/observableInternal/utils.ts | 64 +- .../observableInternal/utilsCancellation.ts | 98 + src/vs/base/common/paging.ts | 6 +- src/vs/base/common/path.ts | 2 +- src/vs/base/common/performance.js | 16 +- src/vs/base/common/platform.ts | 2 +- src/vs/base/common/prefixTree.ts | 2 +- src/vs/base/common/process.ts | 2 +- src/vs/base/common/processes.ts | 2 +- src/vs/base/common/product.ts | 7 +- src/vs/base/common/resourceTree.ts | 10 +- src/vs/base/common/resources.ts | 14 +- src/vs/base/common/scrollable.ts | 4 +- src/vs/base/common/search.ts | 2 +- src/vs/base/common/semver/semver.d.ts | 6 +- src/vs/base/common/semver/semver.js | 78 +- src/vs/base/common/sequence.ts | 2 +- src/vs/base/common/severity.ts | 2 +- src/vs/base/common/stream.ts | 6 +- src/vs/base/common/strings.ts | 14 +- src/vs/base/common/ternarySearchTree.ts | 10 +- src/vs/base/common/tfIdf.ts | 2 +- src/vs/base/common/themables.ts | 2 +- src/vs/base/common/uri.ts | 8 +- src/vs/base/common/uriIpc.ts | 8 +- src/vs/base/common/verifier.ts | 2 +- src/vs/base/common/worker/simpleWorker.ts | 24 +- .../common/worker/simpleWorkerBootstrap.ts | 2 +- src/vs/base/node/crypto.ts | 2 +- src/vs/base/node/extpath.ts | 10 +- src/vs/base/node/id.ts | 8 +- src/vs/base/node/nls.js | 28 +- src/vs/base/node/nodeStreams.ts | 2 +- src/vs/base/node/osDisplayProtocolInfo.ts | 4 +- src/vs/base/node/osReleaseInfo.ts | 2 +- src/vs/base/node/pfs.ts | 14 +- src/vs/base/node/powershell.ts | 4 +- src/vs/base/node/processes.ts | 12 +- src/vs/base/node/ps.ts | 4 +- src/vs/base/node/shell.ts | 6 +- src/vs/base/node/terminalEncoding.ts | 2 +- src/vs/base/node/unc.js | 23 +- src/vs/base/node/zip.ts | 12 +- .../contextmenu/electron-main/contextmenu.ts | 4 +- .../electron-sandbox/contextmenu.ts | 4 +- src/vs/base/parts/ipc/browser/ipc.mp.ts | 4 +- src/vs/base/parts/ipc/common/ipc.electron.ts | 6 +- src/vs/base/parts/ipc/common/ipc.mp.ts | 8 +- src/vs/base/parts/ipc/common/ipc.net.ts | 8 +- src/vs/base/parts/ipc/common/ipc.ts | 24 +- .../parts/ipc/electron-main/ipc.electron.ts | 12 +- src/vs/base/parts/ipc/electron-main/ipc.mp.ts | 10 +- .../base/parts/ipc/electron-main/ipcMain.ts | 6 +- .../ipc/electron-sandbox/ipc.electron.ts | 12 +- .../base/parts/ipc/electron-sandbox/ipc.mp.ts | 8 +- src/vs/base/parts/ipc/node/ipc.cp.ts | 22 +- src/vs/base/parts/ipc/node/ipc.mp.ts | 13 +- src/vs/base/parts/ipc/node/ipc.net.ts | 18 +- .../parts/ipc/test/browser/ipc.mp.test.ts | 8 +- src/vs/base/parts/ipc/test/common/ipc.test.ts | 20 +- .../ipc/test/electron-sandbox/ipc.mp.test.ts | 4 +- .../ipc/test/node/ipc.cp.integrationTest.ts | 10 +- .../base/parts/ipc/test/node/ipc.net.test.ts | 18 +- src/vs/base/parts/ipc/test/node/testApp.ts | 4 +- .../base/parts/ipc/test/node/testService.ts | 6 +- src/vs/base/parts/request/browser/request.ts | 8 +- src/vs/base/parts/request/common/request.ts | 2 +- .../request/test/browser/request.test.ts | 10 +- .../parts/sandbox/common/electronTypes.ts | 18 - .../base/parts/sandbox/common/sandboxTypes.ts | 4 +- .../parts/sandbox/electron-sandbox/globals.ts | 10 +- .../test/electron-sandbox/globals.test.ts | 4 +- src/vs/base/parts/storage/common/storage.ts | 10 +- src/vs/base/parts/storage/node/storage.ts | 16 +- .../test/node/storage.integrationTest.ts | 22 +- src/vs/base/test/browser/actionbar.test.ts | 6 +- src/vs/base/test/browser/browser.test.ts | 4 +- src/vs/base/test/browser/comparers.test.ts | 4 +- src/vs/base/test/browser/dom.test.ts | 10 +- .../browser/formattedTextRenderer.test.ts | 6 +- src/vs/base/test/browser/hash.test.ts | 6 +- .../test/browser/highlightedLabel.test.ts | 4 +- src/vs/base/test/browser/iconLabels.test.ts | 6 +- src/vs/base/test/browser/indexedDB.test.ts | 6 +- .../test/browser/markdownRenderer.test.ts | 14 +- src/vs/base/test/browser/progressBar.test.ts | 6 +- .../ui/contextview/contextview.test.ts | 4 +- src/vs/base/test/browser/ui/grid/grid.test.ts | 12 +- .../test/browser/ui/grid/gridview.test.ts | 8 +- src/vs/base/test/browser/ui/grid/util.ts | 6 +- .../test/browser/ui/list/listView.test.ts | 8 +- .../test/browser/ui/list/listWidget.test.ts | 10 +- .../test/browser/ui/list/rangeMap.test.ts | 6 +- .../base/test/browser/ui/menu/menubar.test.ts | 8 +- .../ui/scrollbar/scrollableElement.test.ts | 4 +- .../ui/scrollbar/scrollbarState.test.ts | 4 +- .../browser/ui/splitview/splitview.test.ts | 8 +- .../browser/ui/tree/asyncDataTree.test.ts | 161 +- .../ui/tree/compressedObjectTreeModel.test.ts | 42 +- .../test/browser/ui/tree/dataTree.test.ts | 8 +- .../browser/ui/tree/indexTreeModel.test.ts | 149 +- .../test/browser/ui/tree/objectTree.test.ts | 225 +- .../browser/ui/tree/objectTreeModel.test.ts | 80 +- src/vs/base/test/common/arrays.test.ts | 6 +- src/vs/base/test/common/arraysFind.test.ts | 4 +- src/vs/base/test/common/assert.test.ts | 4 +- src/vs/base/test/common/async.test.ts | 18 +- src/vs/base/test/common/buffer.test.ts | 8 +- src/vs/base/test/common/cache.test.ts | 6 +- src/vs/base/test/common/cancellation.test.ts | 4 +- src/vs/base/test/common/charCode.test.ts | 4 +- src/vs/base/test/common/collections.test.ts | 4 +- src/vs/base/test/common/color.test.ts | 71 +- src/vs/base/test/common/console.test.ts | 6 +- src/vs/base/test/common/date.test.ts | 4 +- src/vs/base/test/common/decorators.test.ts | 4 +- src/vs/base/test/common/diff/diff.test.ts | 4 +- src/vs/base/test/common/errors.test.ts | 4 +- src/vs/base/test/common/event.test.ts | 20 +- src/vs/base/test/common/extpath.test.ts | 8 +- src/vs/base/test/common/filters.perf.test.ts | 10 +- src/vs/base/test/common/filters.test.ts | 4 +- src/vs/base/test/common/fuzzyScorer.test.ts | 12 +- src/vs/base/test/common/glob.test.ts | 10 +- src/vs/base/test/common/history.test.ts | 4 +- src/vs/base/test/common/iconLabels.test.ts | 6 +- src/vs/base/test/common/iterator.test.ts | 4 +- src/vs/base/test/common/json.test.ts | 6 +- src/vs/base/test/common/jsonEdit.test.ts | 6 +- src/vs/base/test/common/jsonFormatter.test.ts | 4 +- src/vs/base/test/common/jsonParse.test.ts | 4 +- src/vs/base/test/common/jsonSchema.test.ts | 4 +- src/vs/base/test/common/keyCodes.test.ts | 8 +- src/vs/base/test/common/keybindings.test.ts | 6 +- src/vs/base/test/common/labels.test.ts | 8 +- src/vs/base/test/common/lazy.test.ts | 4 +- src/vs/base/test/common/lifecycle.test.ts | 6 +- src/vs/base/test/common/linkedList.test.ts | 4 +- src/vs/base/test/common/linkedText.test.ts | 4 +- src/vs/base/test/common/map.test.ts | 101 +- .../base/test/common/markdownString.test.ts | 4 +- src/vs/base/test/common/marshalling.test.ts | 6 +- src/vs/base/test/common/mime.test.ts | 4 +- .../common/naturalLanguage/korean.test.ts | 4 +- src/vs/base/test/common/network.test.ts | 10 +- src/vs/base/test/common/normalization.test.ts | 4 +- src/vs/base/test/common/numbers.test.ts | 4 +- src/vs/base/test/common/objects.test.ts | 4 +- src/vs/base/test/common/observable.test.ts | 85 +- src/vs/base/test/common/paging.test.ts | 10 +- src/vs/base/test/common/path.test.ts | 8 +- src/vs/base/test/common/prefixTree.test.ts | 4 +- src/vs/base/test/common/processes.test.ts | 4 +- src/vs/base/test/common/resourceTree.test.ts | 6 +- src/vs/base/test/common/resources.test.ts | 12 +- src/vs/base/test/common/scrollable.test.ts | 4 +- src/vs/base/test/common/skipList.test.ts | 8 +- src/vs/base/test/common/snapshot.ts | 6 +- src/vs/base/test/common/stream.test.ts | 10 +- src/vs/base/test/common/strings.test.ts | 4 +- .../test/common/ternarySearchtree.test.ts | 12 +- src/vs/base/test/common/tfIdf.test.ts | 6 +- .../base/test/common/timeTravelScheduler.ts | 8 +- src/vs/base/test/common/troubleshooting.ts | 2 +- src/vs/base/test/common/types.test.ts | 4 +- src/vs/base/test/common/uri.test.ts | 6 +- src/vs/base/test/common/utils.ts | 8 +- src/vs/base/test/common/uuid.test.ts | 4 +- src/vs/base/test/node/crypto.test.ts | 10 +- src/vs/base/test/node/css.build.test.ts | 4 +- src/vs/base/test/node/extpath.test.ts | 8 +- src/vs/base/test/node/id.test.ts | 8 +- src/vs/base/test/node/nodeStreams.test.ts | 4 +- src/vs/base/test/node/pfs/pfs.test.ts | 23 +- src/vs/base/test/node/port.test.ts | 6 +- src/vs/base/test/node/powershell.test.ts | 6 +- .../base/test/node/processes/fixtures/fork.ts | 2 +- .../node/processes/fixtures/fork_large.ts | 2 +- .../processes/processes.integrationTest.ts | 8 +- src/vs/base/test/node/snapshot.test.ts | 10 +- src/vs/base/test/node/testUtils.ts | 6 +- src/vs/base/test/node/unc.test.ts | 4 +- src/vs/base/test/node/uri.perf.test.ts | 6 +- src/vs/base/test/node/zip/zip.test.ts | 14 +- src/vs/base/worker/workerMain.ts | 44 +- src/vs/code/browser/workbench/workbench.html | 2 +- src/vs/code/browser/workbench/workbench.ts | 36 +- src/vs/code/electron-main/app.ts | 254 +- src/vs/code/electron-main/main.ts | 138 +- .../processExplorer/processExplorerMain.ts | 46 +- .../electron-sandbox/workbench/workbench.js | 106 +- .../sharedProcess/contrib/codeCacheCleaner.ts | 14 +- .../sharedProcess/contrib/extensions.ts | 14 +- .../contrib/languagePackCachedDataCleaner.ts | 18 +- .../contrib/localizationsUpdater.ts | 6 +- .../sharedProcess/contrib/logsDataCleaner.ts | 18 +- .../contrib/storageDataCleaner.ts | 26 +- .../contrib/userDataProfilesCleaner.ts | 6 +- .../sharedProcess/sharedProcessMain.ts | 242 +- src/vs/code/node/cli.ts | 46 +- src/vs/code/node/cliProcessMain.ts | 120 +- .../editor/browser/config/charWidthReader.ts | 4 +- src/vs/editor/browser/config/domFontInfo.ts | 4 +- .../browser/config/editorConfiguration.ts | 38 +- .../browser/config/elementSizeObserver.ts | 8 +- .../editor/browser/config/fontMeasurements.ts | 14 +- .../editor/browser/config/migrateOptions.ts | 2 +- src/vs/editor/browser/config/tabFocus.ts | 2 +- .../controller/editContext/clipboardUtils.ts | 86 + .../editContext/editContextUtils.ts | 20 + .../editContext/native/debugEditContext.ts | 225 + .../editContext/native/nativeEditContext.css | 56 + .../editContext/native/nativeEditContext.ts | 367 + .../native/nativeEditContextUtils.ts | 55 + .../editContext/native/screenReaderSupport.ts | 164 + .../editContext/screenReaderUtils.ts | 138 + .../textArea/textAreaEditContext.css} | 0 .../textArea/textAreaEditContext.ts} | 157 +- .../textArea/textAreaEditContextInput.ts} | 86 +- .../textArea/textAreaEditContextState.ts} | 91 +- .../editor/browser/controller/mouseHandler.ts | 36 +- .../editor/browser/controller/mouseTarget.ts | 38 +- .../browser/controller/pointerHandler.ts | 26 +- src/vs/editor/browser/coreCommands.ts | 58 +- src/vs/editor/browser/dnd.ts | 10 +- src/vs/editor/browser/editorBrowser.ts | 50 +- src/vs/editor/browser/editorDom.ts | 16 +- src/vs/editor/browser/editorExtensions.ts | 44 +- src/vs/editor/browser/gpu/atlas/atlas.ts | 95 + .../editor/browser/gpu/atlas/textureAtlas.ts | 179 + .../browser/gpu/atlas/textureAtlasPage.ts | 122 + .../gpu/atlas/textureAtlasShelfAllocator.ts | 162 + .../gpu/atlas/textureAtlasSlabAllocator.ts | 433 + .../editor/browser/gpu/bufferDirtyTracker.ts | 72 + .../browser/gpu/fullFileRenderStrategy.ts | 301 + .../gpu/fullFileRenderStrategy.wgsl.ts | 94 + src/vs/editor/browser/gpu/gpu.ts | 30 + src/vs/editor/browser/gpu/gpuDisposable.ts | 46 + src/vs/editor/browser/gpu/gpuUtils.ts | 59 + .../browser/gpu/objectCollectionBuffer.ts | 207 + .../browser/gpu/raster/glyphRasterizer.ts | 240 + src/vs/editor/browser/gpu/raster/raster.ts | 65 + .../editor/browser/gpu/rectangleRenderer.ts | 291 + .../browser/gpu/rectangleRenderer.wgsl.ts | 73 + src/vs/editor/browser/gpu/taskQueue.ts | 172 + src/vs/editor/browser/gpu/viewGpuContext.ts | 123 + src/vs/editor/browser/observableCodeEditor.ts | 59 +- .../services/abstractCodeEditorService.ts | 26 +- .../browser/services/bulkEditService.ts | 18 +- .../browser/services/codeEditorService.ts | 16 +- .../browser/services/editorWorkerService.ts | 60 +- .../services/hoverService/hoverService.ts | 45 +- .../services/hoverService/hoverWidget.ts | 42 +- .../hoverService/updatableHoverWidget.ts | 18 +- .../browser/services/markerDecorations.ts | 8 +- .../editor/browser/services/openerService.ts | 28 +- .../treeSitter/treeSitterParserService.ts | 97 +- src/vs/editor/browser/stableEditorScroll.ts | 6 +- src/vs/editor/browser/view.ts | 198 +- .../browser/view/domLineBreaksComputer.ts | 22 +- .../editor/browser/view/dynamicViewOverlay.ts | 4 +- .../editor/browser/view/renderingContext.ts | 16 +- src/vs/editor/browser/view/viewController.ts | 22 +- src/vs/editor/browser/view/viewLayer.ts | 14 +- src/vs/editor/browser/view/viewOverlays.ts | 24 +- src/vs/editor/browser/view/viewPart.ts | 8 +- .../browser/view/viewUserInputEvents.ts | 10 +- .../blockDecorations/blockDecorations.ts | 14 +- .../contentWidgets/contentWidgets.ts | 33 +- .../currentLineHighlight.ts | 30 +- .../viewParts/decorations/decorations.ts | 16 +- .../editorScrollbar/editorScrollbar.ts | 30 +- .../viewParts/glyphMargin/glyphMargin.ts | 26 +- .../viewParts/indentGuides/indentGuides.ts | 34 +- .../viewParts/lineNumbers/lineNumbers.ts | 27 +- .../linesDecorations/linesDecorations.ts | 12 +- .../editor/browser/viewParts/margin/margin.ts | 22 +- .../marginDecorations/marginDecorations.ts | 10 +- .../browser/viewParts/minimap/minimap.ts | 72 +- .../viewParts/minimap/minimapCharRenderer.ts | 6 +- .../minimap/minimapCharRendererFactory.ts | 8 +- .../viewParts/minimap/minimapPreBaked.ts | 2 +- .../overlayWidgets/overlayWidgets.ts | 23 +- .../overviewRuler/decorationsOverviewRuler.ts | 30 +- .../viewParts/overviewRuler/overviewRuler.ts | 20 +- .../editor/browser/viewParts/rulers/rulers.ts | 20 +- .../browser/viewParts/rulersGpu/rulersGpu.ts | 80 + .../scrollDecoration/scrollDecoration.ts | 14 +- .../viewParts/selections/selections.ts | 18 +- .../viewParts/viewCursors/viewCursor.ts | 22 +- .../viewParts/viewCursors/viewCursors.ts | 42 +- .../{lines => viewLines}/domReadingContext.ts | 0 .../{lines => viewLines}/rangeUtil.ts | 6 +- .../{lines => viewLines}/viewLine.ts | 92 +- .../viewParts/viewLines/viewLineOptions.ts | 66 + .../{lines => viewLines}/viewLines.css | 0 .../{lines => viewLines}/viewLines.ts | 47 +- .../viewParts/viewLinesGpu/viewLinesGpu.ts | 436 + .../browser/viewParts/viewZones/viewZones.ts | 25 +- .../viewParts/whitespace/whitespace.ts | 34 +- .../codeEditor/codeEditorContributions.ts | 14 +- .../widget/codeEditor/codeEditorWidget.ts | 122 +- .../browser/widget/codeEditor/editor.css | 8 + .../codeEditor/embeddedCodeEditorWidget.ts | 26 +- .../browser/widget/diffEditor/commands.ts | 34 +- .../components/accessibleDiffViewer.ts | 62 +- .../components/diffEditorDecorations.ts | 22 +- .../components/diffEditorEditors.ts | 32 +- .../diffEditor/components/diffEditorSash.ts | 9 +- .../diffEditorViewZones.ts | 56 +- .../inlineDiffDeletedCodeMargin.ts | 30 +- .../diffEditorViewZones/renderLines.ts | 22 +- .../widget/diffEditor/delegatingEditorImpl.ts | 20 +- .../diffEditor/diffEditor.contribution.ts | 16 +- .../widget/diffEditor/diffEditorOptions.ts | 17 +- .../widget/diffEditor/diffEditorViewModel.ts | 42 +- .../widget/diffEditor/diffEditorWidget.ts | 91 +- .../diffEditor/diffProviderFactoryService.ts | 24 +- .../diffEditor/embeddedDiffEditorWidget.ts | 18 +- .../diffEditor/features/gutterFeature.ts | 121 +- .../features/hideUnchangedRegionsFeature.ts | 47 +- .../features/movedBlocksLinesFeature.ts | 36 +- .../features/overviewRulerFeature.ts | 34 +- .../features/revertButtonsFeature.ts | 30 +- .../diffEditor/registrations.contribution.ts | 12 +- .../editor/browser/widget/diffEditor/utils.ts | 24 +- .../widget/diffEditor/utils/editorGutter.ts | 12 +- .../browser/markdownRenderer.ts | 34 +- .../browser/widget/multiDiffEditor/colors.ts | 4 +- .../multiDiffEditor/diffEditorItemTemplate.ts | 39 +- .../browser/widget/multiDiffEditor/model.ts | 12 +- .../multiDiffEditorViewModel.ts | 46 +- .../multiDiffEditor/multiDiffEditorWidget.ts | 34 +- .../multiDiffEditorWidgetImpl.ts | 77 +- .../widget/multiDiffEditor/objectPool.ts | 2 +- .../browser/widget/multiDiffEditor/utils.ts | 2 +- .../workbenchUIElementFactory.ts | 4 +- .../editor/common/commands/replaceCommand.ts | 8 +- src/vs/editor/common/commands/shiftCommand.ts | 20 +- .../commands/surroundSelectionCommand.ts | 10 +- .../commands/trimTrailingWhitespaceCommand.ts | 16 +- src/vs/editor/common/config/diffEditor.ts | 2 +- .../common/config/editorConfiguration.ts | 10 +- .../config/editorConfigurationSchema.ts | 12 +- src/vs/editor/common/config/editorOptions.ts | 101 +- src/vs/editor/common/config/editorZoom.ts | 2 +- src/vs/editor/common/config/fontInfo.ts | 6 +- .../editor/common/core/characterClassifier.ts | 2 +- src/vs/editor/common/core/cursorColumns.ts | 8 +- src/vs/editor/common/core/editOperation.ts | 4 +- .../editor/common/core/editorColorRegistry.ts | 8 +- src/vs/editor/common/core/eolCounter.ts | 2 +- src/vs/editor/common/core/indentation.ts | 4 +- src/vs/editor/common/core/lineRange.ts | 8 +- src/vs/editor/common/core/offsetEdit.ts | 322 + src/vs/editor/common/core/offsetRange.ts | 12 +- src/vs/editor/common/core/positionToOffset.ts | 10 +- src/vs/editor/common/core/range.ts | 2 +- src/vs/editor/common/core/rangeMapping.ts | 8 +- src/vs/editor/common/core/selection.ts | 4 +- src/vs/editor/common/core/stringBuilder.ts | 6 +- src/vs/editor/common/core/textChange.ts | 4 +- src/vs/editor/common/core/textEdit.ts | 42 +- src/vs/editor/common/core/textLength.ts | 15 +- .../common/core/wordCharacterClassifier.ts | 6 +- src/vs/editor/common/core/wordHelper.ts | 6 +- src/vs/editor/common/cursor/cursor.ts | 38 +- .../cursor/cursorAtomicMoveOperations.ts | 4 +- .../editor/common/cursor/cursorCollection.ts | 16 +- .../common/cursor/cursorColumnSelection.ts | 6 +- src/vs/editor/common/cursor/cursorContext.ts | 6 +- .../common/cursor/cursorDeleteOperations.ts | 22 +- .../common/cursor/cursorMoveCommands.ts | 16 +- .../common/cursor/cursorMoveOperations.ts | 16 +- .../common/cursor/cursorTypeEditOperations.ts | 40 +- .../common/cursor/cursorTypeOperations.ts | 18 +- .../common/cursor/cursorWordOperations.ts | 24 +- src/vs/editor/common/cursor/oneCursor.ts | 12 +- src/vs/editor/common/cursorCommon.ts | 28 +- src/vs/editor/common/cursorEvents.ts | 4 +- .../algorithms/diffAlgorithm.ts | 8 +- .../algorithms/dynamicProgrammingDiffing.ts | 6 +- .../algorithms/myersDiffAlgorithm.ts | 4 +- .../computeMovedLines.ts | 20 +- .../defaultLinesDiffComputer.ts | 110 +- .../heuristicSequenceOptimizations.ts | 10 +- .../defaultLinesDiffComputer/lineSequence.ts | 6 +- .../linesSliceCharSequence.ts | 14 +- .../diff/defaultLinesDiffComputer/utils.ts | 6 +- .../common/diff/documentDiffProvider.ts | 10 +- .../common/diff/legacyLinesDiffComputer.ts | 16 +- .../editor/common/diff/linesDiffComputer.ts | 2 +- .../editor/common/diff/linesDiffComputers.ts | 6 +- src/vs/editor/common/diff/rangeMapping.ts | 118 +- src/vs/editor/common/editorAction.ts | 6 +- src/vs/editor/common/editorCommon.ts | 36 +- src/vs/editor/common/editorContextKeys.ts | 5 +- src/vs/editor/common/editorFeatures.ts | 2 +- src/vs/editor/common/editorTheme.ts | 8 +- .../editor/common/encodedTokenAttributes.ts | 34 +- .../editor/common/languageFeatureRegistry.ts | 10 +- src/vs/editor/common/languageSelector.ts | 6 +- src/vs/editor/common/languages.ts | 92 +- src/vs/editor/common/languages/autoIndent.ts | 20 +- .../defaultDocumentColorsComputer.ts | 8 +- src/vs/editor/common/languages/enterAction.ts | 12 +- .../languages/highlights/typescript.scm | 395 +- src/vs/editor/common/languages/language.ts | 10 +- .../common/languages/languageConfiguration.ts | 6 +- .../languageConfigurationRegistry.ts | 36 +- .../editor/common/languages/linkComputer.ts | 6 +- .../editor/common/languages/modesRegistry.ts | 14 +- .../editor/common/languages/nullTokenize.ts | 4 +- src/vs/editor/common/languages/supports.ts | 6 +- .../languages/supports/characterPair.ts | 2 +- .../languages/supports/electricCharacter.ts | 6 +- .../common/languages/supports/indentRules.ts | 2 +- .../supports/indentationLineProcessor.ts | 20 +- .../supports/inplaceReplaceSupport.ts | 4 +- .../supports/languageBracketsConfiguration.ts | 8 +- .../common/languages/supports/onEnter.ts | 8 +- .../languages/supports/richEditBrackets.ts | 8 +- .../common/languages/supports/tokenization.ts | 4 +- .../common/languages/textToHtmlTokenizer.ts | 14 +- src/vs/editor/common/model.ts | 46 +- .../bracketPairsImpl.ts | 28 +- .../bracketPairsTree/ast.ts | 14 +- .../beforeEditPositionMapper.ts | 8 +- .../bracketPairsTree/bracketPairsTree.ts | 40 +- .../bracketPairsTree/brackets.ts | 14 +- .../bracketPairsTree/combineTextEditInfos.ts | 6 +- .../bracketPairsTree/concat23Trees.ts | 2 +- .../bracketPairsTree/length.ts | 8 +- .../bracketPairsTree/nodeReader.ts | 4 +- .../bracketPairsTree/parser.ts | 14 +- .../bracketPairsTree/tokenizer.ts | 14 +- ...colorizedBracketPairsDecorationProvider.ts | 22 +- .../bracketPairsTextModelPart/fixBrackets.ts | 16 +- .../editor/common/model/decorationProvider.ts | 6 +- src/vs/editor/common/model/editStack.ts | 24 +- src/vs/editor/common/model/fixedArray.ts | 2 +- .../common/model/guidesTextModelPart.ts | 22 +- .../editor/common/model/indentationGuesser.ts | 4 +- src/vs/editor/common/model/intervalTree.ts | 6 +- src/vs/editor/common/model/mirrorTextModel.ts | 12 +- .../pieceTreeTextBuffer/pieceTreeBase.ts | 12 +- .../pieceTreeTextBuffer.ts | 18 +- .../pieceTreeTextBufferBuilder.ts | 12 +- .../model/pieceTreeTextBuffer/rbTreeBase.ts | 2 +- .../editor/common/model/prefixSumComputer.ts | 4 +- src/vs/editor/common/model/textModel.ts | 89 +- src/vs/editor/common/model/textModelPart.ts | 2 +- src/vs/editor/common/model/textModelSearch.ts | 14 +- src/vs/editor/common/model/textModelText.ts | 14 +- src/vs/editor/common/model/textModelTokens.ts | 58 +- .../common/model/tokenizationTextModelPart.ts | 72 +- src/vs/editor/common/model/tokens.ts | 27 +- .../editor/common/model/treeSitterTokens.ts | 27 +- src/vs/editor/common/model/utils.ts | 2 +- .../editor/common/modelLineProjectionData.ts | 12 +- .../editor/common/services/editorBaseApi.ts | 18 +- .../common/services/editorSimpleWorker.esm.ts | 4 +- .../common/services/editorSimpleWorker.ts | 60 +- src/vs/editor/common/services/editorWorker.ts | 18 +- .../common/services/editorWorkerBootstrap.ts | 6 +- .../common/services/editorWorkerHost.ts | 2 +- .../common/services/findSectionHeaders.ts | 4 +- .../editor/common/services/getIconClasses.ts | 16 +- .../services/languageFeatureDebounce.ts | 20 +- .../common/services/languageFeatures.ts | 6 +- .../services/languageFeaturesService.ts | 10 +- .../editor/common/services/languageService.ts | 19 +- .../common/services/languagesAssociations.ts | 16 +- .../common/services/languagesRegistry.ts | 22 +- .../common/services/markerDecorations.ts | 12 +- .../services/markerDecorationsService.ts | 32 +- src/vs/editor/common/services/model.ts | 12 +- src/vs/editor/common/services/modelService.ts | 42 +- .../services/modelUndoRedoParticipant.ts | 10 +- .../editor/common/services/resolverService.ts | 14 +- .../common/services/semanticTokensDto.ts | 4 +- .../services/semanticTokensProviderStyling.ts | 12 +- .../common/services/semanticTokensStyling.ts | 6 +- .../services/semanticTokensStylingService.ts | 16 +- .../textModelSync/textModelSync.impl.ts | 26 +- .../textModelSync/textModelSync.protocol.ts | 2 +- .../services/textResourceConfiguration.ts | 10 +- .../textResourceConfigurationService.ts | 16 +- .../services/treeSitterParserService.ts | 8 +- .../common/services/treeViewsDndService.ts | 8 +- .../services/unicodeTextModelHighlighter.ts | 12 +- .../common/standalone/standaloneEnums.ts | 230 +- src/vs/editor/common/standaloneStrings.ts | 2 +- src/vs/editor/common/textModelBracketPairs.ts | 12 +- src/vs/editor/common/textModelEvents.ts | 6 +- src/vs/editor/common/textModelGuides.ts | 2 +- src/vs/editor/common/tokenizationRegistry.ts | 10 +- .../common/tokenizationTextModelPart.ts | 39 +- .../tokens/contiguousMultilineTokens.ts | 14 +- .../contiguousMultilineTokensBuilder.ts | 4 +- .../common/tokens/contiguousTokensEditing.ts | 2 +- .../common/tokens/contiguousTokensStore.ts | 18 +- src/vs/editor/common/tokens/lineTokens.ts | 124 +- .../common/tokens/sparseMultilineTokens.ts | 8 +- .../editor/common/tokens/sparseTokensStore.ts | 12 +- src/vs/editor/common/tokens/tokenArray.ts | 79 + src/vs/editor/common/viewEventHandler.ts | 4 +- src/vs/editor/common/viewEvents.ts | 16 +- .../common/viewLayout/lineDecorations.ts | 8 +- .../editor/common/viewLayout/linesLayout.ts | 4 +- src/vs/editor/common/viewLayout/viewLayout.ts | 18 +- .../common/viewLayout/viewLineRenderer.ts | 16 +- .../viewLayout/viewLinesViewportData.ts | 6 +- src/vs/editor/common/viewModel.ts | 30 +- .../common/viewModel/glyphLanesModel.ts | 4 +- .../viewModel/minimapTokensColorTracker.ts | 10 +- .../common/viewModel/modelLineProjection.ts | 42 +- .../viewModel/monospaceLineBreaksComputer.ts | 16 +- src/vs/editor/common/viewModel/viewContext.ts | 10 +- .../common/viewModel/viewModelDecorations.ts | 18 +- .../editor/common/viewModel/viewModelImpl.ts | 83 +- .../editor/common/viewModel/viewModelLines.ts | 30 +- .../editor/common/viewModelEventDispatcher.ts | 16 +- .../anchorSelect/browser/anchorSelect.ts | 28 +- .../browser/bracketMatching.ts | 38 +- .../test/browser/bracketMatching.test.ts | 20 +- .../browser/caretOperations.ts | 12 +- .../browser/moveCaretCommand.ts | 8 +- .../caretOperations/browser/transpose.ts | 20 +- .../test/browser/moveCarretCommand.test.ts | 8 +- .../contrib/clipboard/browser/clipboard.ts | 51 +- .../contrib/codeAction/browser/codeAction.ts | 48 +- .../codeAction/browser/codeActionCommands.ts | 28 +- .../browser/codeActionContributions.ts | 16 +- .../browser/codeActionController.ts | 80 +- .../browser/codeActionKeybindingResolver.ts | 14 +- .../codeAction/browser/codeActionMenu.ts | 20 +- .../codeAction/browser/codeActionModel.ts | 42 +- .../codeAction/browser/lightBulbWidget.ts | 64 +- .../editor/contrib/codeAction/common/types.ts | 12 +- .../test/browser/codeAction.test.ts | 28 +- .../codeActionKeybindingResolver.test.ts | 20 +- .../test/browser/codeActionModel.test.ts | 28 +- .../contrib/colorPicker/browser/color.ts | 54 +- .../colorPicker/browser/colorDetector.ts | 41 +- .../browser/colorHoverParticipant.ts | 277 - .../browser/colorPickerContribution.ts | 53 + .../colorPicker/browser/colorPickerModel.ts | 6 +- .../browser/colorPickerParticipantUtils.ts | 66 + .../colorPickerParts/colorPickerBody.ts | 97 + .../colorPickerCloseButton.ts | 38 + .../colorPickerParts/colorPickerHeader.ts | 93 + .../colorPickerInsertButton.ts | 29 + .../colorPickerSaturationBox.ts | 138 + .../colorPickerParts/colorPickerStrip.ts | 126 + .../colorPicker/browser/colorPickerWidget.ts | 499 -- .../browser/defaultDocumentColorProvider.ts | 18 +- .../hoverColorPickerContribution.ts} | 24 +- .../hoverColorPickerParticipant.ts | 148 + .../hoverColorPickerWidget.ts | 49 + .../standaloneColorPickerActions.ts | 25 +- .../standaloneColorPickerController.ts | 63 + .../standaloneColorPickerParticipant.ts | 119 + .../standaloneColorPickerWidget.ts | 105 +- .../comment/browser/blockCommentCommand.ts | 16 +- .../editor/contrib/comment/browser/comment.ts | 26 +- .../comment/browser/lineCommentCommand.ts | 22 +- .../test/browser/blockCommentCommand.test.ts | 18 +- .../test/browser/lineCommentCommand.test.ts | 28 +- .../contextmenu/browser/contextmenu.ts | 48 +- .../contrib/cursorUndo/browser/cursorUndo.ts | 18 +- .../test/browser/cursorUndo.test.ts | 12 +- .../browser/contribution.ts | 22 +- src/vs/editor/contrib/dnd/browser/dnd.ts | 34 +- .../contrib/dnd/browser/dragAndDropCommand.ts | 10 +- .../browser/documentSymbols.ts | 12 +- .../documentSymbols/browser/outlineModel.ts | 38 +- .../test/browser/outlineModel.test.ts | 30 +- .../browser/copyPasteContribution.ts | 22 +- .../browser/copyPasteController.ts | 71 +- .../browser/defaultProviders.ts | 32 +- .../browser/dropIntoEditorContribution.ts | 22 +- .../browser/dropIntoEditorController.ts | 50 +- .../contrib/dropOrPasteInto/browser/edit.ts | 12 +- .../dropOrPasteInto/browser/postEditWidget.ts | 42 +- .../test/browser/editSort.test.ts | 8 +- .../editorState/browser/editorState.ts | 16 +- .../browser/keybindingCancellation.ts | 20 +- .../test/browser/editorState.test.ts | 14 +- .../contrib/find/browser/findController.ts | 58 +- .../contrib/find/browser/findDecorations.ts | 16 +- .../editor/contrib/find/browser/findModel.ts | 42 +- .../contrib/find/browser/findOptionsWidget.ts | 22 +- .../editor/contrib/find/browser/findState.ts | 8 +- .../editor/contrib/find/browser/findWidget.ts | 86 +- .../contrib/find/browser/replaceAllCommand.ts | 8 +- .../contrib/find/browser/replacePattern.ts | 4 +- .../contrib/find/test/browser/find.test.ts | 10 +- .../find/test/browser/findController.test.ts | 38 +- .../find/test/browser/findModel.test.ts | 22 +- .../find/test/browser/replacePattern.test.ts | 6 +- .../editor/contrib/folding/browser/folding.ts | 108 +- .../folding/browser/foldingDecorations.ts | 20 +- .../contrib/folding/browser/foldingModel.ts | 10 +- .../contrib/folding/browser/foldingRanges.ts | 2 +- .../folding/browser/hiddenRangeModel.ts | 18 +- .../folding/browser/indentRangeProvider.ts | 14 +- .../folding/browser/syntaxRangeProvider.ts | 14 +- .../folding/test/browser/foldingModel.test.ts | 26 +- .../test/browser/foldingRanges.test.ts | 10 +- .../test/browser/hiddenRangeModel.test.ts | 14 +- .../folding/test/browser/indentFold.test.ts | 6 +- .../test/browser/indentRangeProvider.test.ts | 8 +- .../folding/test/browser/syntaxFold.test.ts | 14 +- .../contrib/fontZoom/browser/fontZoom.ts | 8 +- .../editor/contrib/format/browser/format.ts | 56 +- .../contrib/format/browser/formatActions.ts | 48 +- .../contrib/format/browser/formattingEdit.ts | 12 +- .../contrib/gotoError/browser/gotoError.ts | 42 +- .../gotoError/browser/gotoErrorWidget.ts | 54 +- .../browser/markerNavigationService.ts | 26 +- .../gotoSymbol/browser/goToCommands.ts | 74 +- .../contrib/gotoSymbol/browser/goToSymbol.ts | 22 +- .../browser/link/clickLinkGesture.ts | 16 +- .../browser/link/goToDefinitionAtPosition.ts | 56 +- .../browser/peek/referencesController.ts | 52 +- .../gotoSymbol/browser/peek/referencesTree.ts | 36 +- .../browser/peek/referencesWidget.ts | 62 +- .../gotoSymbol/browser/referencesModel.ts | 30 +- .../gotoSymbol/browser/symbolNavigation.ts | 34 +- .../test/browser/referencesModel.test.ts | 10 +- .../editor/contrib/gpu/browser/gpuActions.ts | 145 + .../hover/browser/contentHoverComputer.ts | 52 +- ...ntroller2.ts => contentHoverController.ts} | 40 +- .../hover/browser/contentHoverRendered.ts | 51 +- .../hover/browser/contentHoverStatusBar.ts | 10 +- .../hover/browser/contentHoverTypes.ts | 25 +- .../hover/browser/contentHoverWidget.ts | 30 +- .../browser/contentHoverWidgetWrapper.ts | 98 +- .../editor/contrib/hover/browser/getHover.ts | 18 +- ...HoverComputer.ts => glyphHoverComputer.ts} | 42 +- ...rController.ts => glyphHoverController.ts} | 52 +- ...rginHoverWidget.ts => glyphHoverWidget.ts} | 73 +- src/vs/editor/contrib/hover/browser/hover.css | 2 +- .../hover/browser/hoverAccessibleViews.ts | 38 +- .../contrib/hover/browser/hoverActionIds.ts | 2 +- .../contrib/hover/browser/hoverActions.ts | 30 +- .../hover/browser/hoverContribution.ts | 26 +- .../contrib/hover/browser/hoverOperation.ts | 126 +- .../contrib/hover/browser/hoverTypes.ts | 18 +- .../contrib/hover/browser/hoverUtils.ts | 2 +- .../hover/browser/markdownHoverParticipant.ts | 62 +- .../hover/browser/markerHoverParticipant.ts | 48 +- .../hover/browser/resizableContentWidget.ts | 12 +- .../hover/test/browser/contentHover.test.ts | 12 +- .../inPlaceReplace/browser/inPlaceReplace.ts | 34 +- .../browser/inPlaceReplaceCommand.ts | 8 +- .../indentation/browser/indentation.ts | 48 +- .../contrib/indentation/common/indentation.ts | 18 +- .../test/browser/indentation.test.ts | 44 +- .../browser/indentationLineProcessor.test.ts | 26 +- .../contrib/inlayHints/browser/inlayHints.ts | 20 +- .../browser/inlayHintsContribution.ts | 8 +- .../browser/inlayHintsController.ts | 197 +- .../inlayHints/browser/inlayHintsHover.ts | 48 +- .../inlayHints/browser/inlayHintsLocations.ts | 38 +- .../browser/controller/commands.ts | 97 +- .../controller/inlineCompletionContextKeys.ts | 28 +- .../controller/inlineCompletionsController.ts | 175 +- .../browser/hintsWidget/hoverParticipant.ts | 36 +- .../inlineCompletionsHintsWidget.ts | 61 +- .../browser/inlineCompletions.contribution.ts | 25 +- .../inlineCompletionsAccessibleView.ts | 22 +- ...{singleTextEdit.ts => computeGhostText.ts} | 59 +- .../browser/model/ghostText.ts | 12 +- .../browser/model/inlineCompletionsModel.ts | 170 +- .../browser/model/inlineCompletionsSource.ts | 62 +- .../browser/model/inlineEdit.ts | 20 + .../browser/model/inlineEditsAdapter.ts | 80 + .../browser/model/provideInlineCompletions.ts | 45 +- .../browser/model/singleTextEditHelpers.ts | 34 + .../browser/model/suggestWidgetAdaptor.ts | 30 +- .../inlineCompletions/browser/utils.ts | 71 +- .../view/{ => ghostText}/ghostTextView.css | 7 +- .../browser/view/ghostText/ghostTextView.ts | 365 + .../browser/view/ghostTextView.ts | 328 - .../view/inlineEdits/inlineEditsView.css | 138 + .../view/inlineEdits/inlineEditsView.ts | 418 + .../browser/view/inlineEdits/utils.ts | 86 + .../browser/inlineCompletionsModel.test.ts | 12 +- .../browser/inlineCompletionsProvider.test.ts | 38 +- .../test/browser/suggestWidgetModel.test.ts | 64 +- .../inlineCompletions/test/browser/utils.ts | 20 +- .../contrib/inlineEdit/browser/commands.ts | 18 +- .../inlineEdit/browser/ghostTextWidget.ts | 59 +- .../inlineEdit/browser/hoverParticipant.ts | 24 +- .../browser/inlineEdit.contribution.ts | 6 +- .../browser/inlineEditController.ts | 53 +- .../browser/inlineEditHintsWidget.ts | 44 +- .../browser/inlineEditSideBySideWidget.ts | 43 +- .../contrib/inlineEdits/browser/commands.ts | 185 - .../contrib/inlineEdits/browser/consts.ts | 16 - .../browser/inlineEdits.contribution.ts | 19 - .../browser/inlineEditsController.ts | 97 - .../inlineEdits/browser/inlineEditsModel.ts | 289 - .../inlineEdits/browser/inlineEditsWidget.css | 49 - .../inlineEdits/browser/inlineEditsWidget.ts | 400 - .../inlineProgress/browser/inlineProgress.ts | 30 +- .../lineSelection/browser/lineSelection.ts | 16 +- .../test/browser/lineSelection.test.ts | 14 +- .../browser/copyLinesCommand.ts | 8 +- .../browser/linesOperations.ts | 48 +- .../browser/moveLinesCommand.ts | 26 +- .../browser/sortLinesCommand.ts | 10 +- .../test/browser/copyLinesCommand.test.ts | 12 +- .../test/browser/linesOperations.test.ts | 24 +- .../test/browser/moveLinesCommand.test.ts | 22 +- .../test/browser/sortLinesCommand.test.ts | 8 +- .../linkedEditing/browser/linkedEditing.ts | 64 +- .../test/browser/linkedEditing.test.ts | 36 +- .../editor/contrib/links/browser/getLinks.ts | 26 +- src/vs/editor/contrib/links/browser/links.ts | 54 +- .../browser/longLinesHelper.ts | 10 +- .../message/browser/messageController.ts | 38 +- .../multicursor/browser/multicursor.ts | 50 +- .../test/browser/multicursor.test.ts | 20 +- .../parameterHints/browser/parameterHints.ts | 32 +- .../browser/parameterHintsModel.ts | 22 +- .../browser/parameterHintsWidget.ts | 50 +- .../browser/provideSignatureHelp.ts | 24 +- .../test/browser/parameterHintsModel.test.ts | 36 +- .../contrib/peekView/browser/peekView.ts | 48 +- .../browser/placeholderText.contribution.ts | 14 +- .../browser/placeholderTextContribution.ts | 18 +- .../browser/commandsQuickAccess.ts | 20 +- .../browser/editorNavigationQuickAccess.ts | 28 +- .../browser/gotoLineQuickAccess.ts | 20 +- .../browser/gotoSymbolQuickAccess.ts | 42 +- .../readOnlyMessage/browser/contribution.ts | 16 +- .../editor/contrib/rename/browser/rename.ts | 72 +- .../contrib/rename/browser/renameWidget.ts | 75 +- .../sectionHeaders/browser/sectionHeaders.ts | 24 +- .../browser/documentSemanticTokens.ts | 38 +- .../browser/viewportSemanticTokens.ts | 36 +- .../common/getSemanticTokens.ts | 26 +- .../common/semanticTokensConfig.ts | 6 +- .../browser/documentSemanticTokens.test.ts | 64 +- .../test/browser/getSemanticTokens.test.ts | 18 +- .../smartSelect/browser/bracketSelections.ts | 10 +- .../smartSelect/browser/smartSelect.ts | 52 +- .../smartSelect/browser/wordSelections.ts | 12 +- .../test/browser/smartSelect.test.ts | 34 +- .../snippet/browser/snippetController2.ts | 42 +- .../contrib/snippet/browser/snippetParser.ts | 2 +- .../contrib/snippet/browser/snippetSession.ts | 40 +- .../snippet/browser/snippetVariables.ts | 26 +- .../browser/snippetController2.old.test.ts | 28 +- .../test/browser/snippetController2.test.ts | 40 +- .../test/browser/snippetParser.test.ts | 4 +- .../test/browser/snippetSession.test.ts | 32 +- .../test/browser/snippetVariables.test.ts | 32 +- .../browser/stickyScrollActions.ts | 22 +- .../browser/stickyScrollContribution.ts | 8 +- .../browser/stickyScrollController.ts | 52 +- .../browser/stickyScrollElement.ts | 2 +- .../browser/stickyScrollModelProvider.ts | 32 +- .../browser/stickyScrollProvider.ts | 24 +- .../browser/stickyScrollWidget.ts | 33 +- .../test/browser/stickyScroll.test.ts | 40 +- .../suggest/browser/completionModel.ts | 16 +- .../contrib/suggest/browser/media/suggest.css | 2 +- .../editor/contrib/suggest/browser/suggest.ts | 50 +- .../suggest/browser/suggestAlternatives.ts | 10 +- .../browser/suggestCommitCharacters.ts | 14 +- .../suggest/browser/suggestController.ts | 86 +- .../browser/suggestInlineCompletions.ts | 42 +- .../contrib/suggest/browser/suggestMemory.ts | 24 +- .../contrib/suggest/browser/suggestModel.ts | 58 +- .../browser/suggestOvertypingCapturer.ts | 6 +- .../contrib/suggest/browser/suggestWidget.ts | 106 +- .../suggest/browser/suggestWidgetDetails.ts | 34 +- .../suggest/browser/suggestWidgetRenderer.ts | 42 +- .../suggest/browser/suggestWidgetStatus.ts | 16 +- .../contrib/suggest/browser/wordContextKey.ts | 8 +- .../contrib/suggest/browser/wordDistance.ts | 16 +- .../test/browser/completionModel.test.ts | 14 +- .../suggest/test/browser/suggest.test.ts | 20 +- .../test/browser/suggestController.test.ts | 58 +- .../browser/suggestInlineCompletions.test.ts | 34 +- .../test/browser/suggestMemory.test.ts | 14 +- .../suggest/test/browser/suggestModel.test.ts | 76 +- .../suggest/test/browser/wordDistance.test.ts | 44 +- .../symbolIcons/browser/symbolIcons.ts | 6 +- .../browser/toggleTabFocusMode.ts | 12 +- .../tokenization/browser/tokenization.ts | 8 +- .../browser/bannerController.ts | 24 +- .../browser/unicodeHighlighter.ts | 58 +- .../browser/unusualLineTerminators.ts | 20 +- .../browser/highlightDecorations.ts | 14 +- .../browser/textualHighlightProvider.ts | 18 +- .../browser/wordHighlighter.ts | 219 +- .../wordOperations/browser/wordOperations.ts | 42 +- .../test/browser/wordOperations.test.ts | 32 +- .../test/browser/wordTestUtils.ts | 4 +- .../browser/wordPartOperations.ts | 22 +- .../wordPartOperations/test/browser/utils.ts | 2 +- .../test/browser/wordPartOperations.test.ts | 18 +- .../contrib/zoneWidget/browser/zoneWidget.ts | 28 +- src/vs/editor/editor.all.ts | 123 +- src/vs/editor/editor.api.ts | 10 +- src/vs/editor/editor.main.ts | 20 +- src/vs/editor/editor.worker.ts | 2 +- src/vs/editor/standalone/browser/colorizer.ts | 22 +- .../iPadShowKeyboard/iPadShowKeyboard.ts | 16 +- .../browser/inspectTokens/inspectTokens.ts | 34 +- .../standaloneCommandsQuickAccess.ts | 34 +- .../standaloneGotoLineQuickAccess.ts | 22 +- .../standaloneGotoSymbolQuickAccess.ts | 32 +- .../quickAccess/standaloneHelpQuickAccess.ts | 8 +- .../quickInput/standaloneQuickInputService.ts | 32 +- .../standaloneReferenceSearch.ts | 18 +- .../browser/standaloneCodeEditor.ts | 78 +- .../browser/standaloneCodeEditorService.ts | 26 +- .../standalone/browser/standaloneEditor.ts | 72 +- .../standalone/browser/standaloneLanguages.ts | 44 +- .../browser/standaloneLayoutService.ts | 16 +- .../standalone/browser/standaloneServices.ts | 192 +- .../browser/standaloneThemeService.ts | 34 +- .../browser/standaloneTreeSitterService.ts | 9 +- .../standalone/browser/standaloneWebWorker.ts | 12 +- .../toggleHighContrast/toggleHighContrast.ts | 12 +- .../common/monarch/monarchCompile.ts | 4 +- .../standalone/common/monarch/monarchLexer.ts | 18 +- .../standalone/common/standaloneTheme.ts | 8 +- src/vs/editor/standalone/common/themes.ts | 6 +- .../standalone/test/browser/monarch.test.ts | 22 +- .../test/browser/standaloneLanguages.test.ts | 28 +- .../test/browser/standaloneServices.test.ts | 24 +- .../browser/commands/shiftCommand.test.ts | 28 +- .../test/browser/commands/sideEditing.test.ts | 12 +- .../trimTrailingWhitespaceCommand.test.ts | 26 +- .../config/editorConfiguration.test.ts | 14 +- .../config/editorLayoutProvider.test.ts | 6 +- .../test/browser/config/testConfiguration.ts | 14 +- .../controller/cursor.integrationTest.ts | 4 +- .../test/browser/controller/cursor.test.ts | 48 +- .../controller/cursorMoveCommand.test.ts | 16 +- .../browser/controller/imeRecordedTypes.ts | 4 +- .../test/browser/controller/imeRecorder.ts | 12 +- .../test/browser/controller/imeTester.ts | 26 +- .../browser/controller/textAreaInput.test.ts | 21 +- .../browser/controller/textAreaState.test.ts | 18 +- .../diff/testDiffProviderFactoryService.ts | 14 +- .../editor/test/browser/editorTestServices.ts | 12 +- .../services/decorationRenderOptions.test.ts | 12 +- .../browser/services/openerService.test.ts | 20 +- .../services/treeSitterParserService.test.ts | 16 +- src/vs/editor/test/browser/testCodeEditor.ts | 118 +- src/vs/editor/test/browser/testCommand.ts | 18 +- .../test/browser/view/gpu/atlas/testUtil.ts | 55 + .../view/gpu/atlas/textureAtlas.test.ts | 130 + .../gpu/atlas/textureAtlasAllocator.test.ts | 202 + .../view/gpu/bufferDirtyTracker.test.ts | 46 + .../view/gpu/objectCollectionBuffer.test.ts | 108 + .../browser/view/minimapCharRenderer.test.ts | 8 +- .../test/browser/view/viewLayer.test.ts | 4 +- .../viewModel/modelLineProjection.test.ts | 36 +- .../test/browser/viewModel/testViewModel.ts | 16 +- .../viewModel/viewModelDecorations.test.ts | 10 +- .../browser/viewModel/viewModelImpl.test.ts | 14 +- .../browser/widget/codeEditorWidget.test.ts | 14 +- .../browser/widget/diffEditorWidget.test.ts | 8 +- .../widget/observableCodeEditor.test.ts | 18 +- .../cursorAtomicMoveOperations.test.ts | 4 +- .../common/core/characterClassifier.test.ts | 6 +- .../cursorColumns.test.ts} | 214 +- .../editor/test/common/core/lineRange.test.ts | 4 +- .../test/common/core/lineTokens.test.ts | 8 +- .../core/positionOffsetTransformer.test.ts | 6 +- src/vs/editor/test/common/core/random.ts | 12 +- src/vs/editor/test/common/core/range.test.ts | 6 +- .../test/common/core/stringBuilder.test.ts | 8 +- .../editor/test/common/core/testLineToken.ts | 6 +- .../editor/test/common/core/textEdit.test.ts | 8 +- .../test/common/diff/diffComputer.test.ts | 12 +- .../beforeEditPositionMapper.test.ts | 12 +- .../bracketPairColorizer/brackets.test.ts | 12 +- .../combineTextEditInfos.test.ts | 18 +- .../concat23Trees.test.ts | 8 +- .../getBracketPairsInRange.test.ts | 24 +- .../model/bracketPairColorizer/length.test.ts | 4 +- .../smallImmutableSet.test.ts | 4 +- .../bracketPairColorizer/tokenizer.test.ts | 24 +- .../test/common/model/editStack.test.ts | 10 +- .../common/model/editableTextModel.test.ts | 18 +- .../model/editableTextModelAuto.test.ts | 12 +- .../model/editableTextModelTestUtils.ts | 14 +- .../test/common/model/intervalTree.test.ts | 6 +- .../linesTextBuffer/linesTextBuffer.test.ts | 10 +- .../linesTextBufferBuilder.test.ts | 8 +- .../test/common/model/model.line.test.ts | 20 +- .../test/common/model/model.modes.test.ts | 18 +- src/vs/editor/test/common/model/model.test.ts | 26 +- .../common/model/modelDecorations.test.ts | 14 +- .../common/model/modelEditOperation.test.ts | 10 +- .../common/model/modelInjectedText.test.ts | 10 +- .../pieceTreeTextBuffer.test.ts | 22 +- .../test/common/model/textChange.test.ts | 4 +- .../test/common/model/textModel.test.ts | 20 +- .../test/common/model/textModelSearch.test.ts | 18 +- .../test/common/model/textModelTokens.test.ts | 6 +- .../common/model/textModelWithTokens.test.ts | 30 +- .../test/common/model/tokensStore.test.ts | 26 +- .../modes/languageConfiguration.test.ts | 8 +- .../common/modes/languageSelector.test.ts | 6 +- .../test/common/modes/linkComputer.test.ts | 6 +- .../modes/supports/autoClosingPairsRules.ts | 2 +- .../common/modes/supports/bracketRules.ts | 2 +- .../modes/supports/characterPair.test.ts | 10 +- .../modes/supports/electricCharacter.test.ts | 10 +- .../common/modes/supports/onEnter.test.ts | 10 +- .../common/modes/supports/onEnterRules.ts | 2 +- .../modes/supports/richEditBrackets.test.ts | 6 +- .../modes/supports/tokenization.test.ts | 6 +- .../modes/testLanguageConfigurationService.ts | 8 +- .../common/modes/textToHtmlTokenizer.test.ts | 20 +- src/vs/editor/test/common/modesTestUtils.ts | 8 +- .../services/editorSimpleWorker.test.ts | 12 +- .../common/services/languageService.test.ts | 6 +- .../services/languagesAssociations.test.ts | 6 +- .../common/services/languagesRegistry.test.ts | 6 +- .../test/common/services/modelService.test.ts | 34 +- .../common/services/semanticTokensDto.test.ts | 6 +- .../semanticTokensProviderStyling.test.ts | 18 +- .../services/testEditorWorkerService.ts | 14 +- .../testTextResourcePropertiesService.ts | 8 +- .../common/services/testTreeSitterService.ts | 8 +- .../textResourceConfigurationService.test.ts | 16 +- .../unicodeTextModelHighlighter.test.ts | 8 +- src/vs/editor/test/common/testTextModel.ts | 66 +- .../common/view/overviewZoneManager.test.ts | 4 +- .../common/viewLayout/lineDecorations.test.ts | 8 +- .../common/viewLayout/linesLayout.test.ts | 4 +- .../viewLayout/viewLineRenderer.test.ts | 18 +- .../common/viewModel/glyphLanesModel.test.ts | 8 +- .../common/viewModel/lineBreakData.test.ts | 8 +- .../monospaceLineBreaksComputer.test.ts | 10 +- .../viewModel/prefixSumComputer.test.ts | 6 +- .../node/classification/typescript.test.ts | 6 +- .../diffing/defaultLinesDiffComputer.test.ts | 32 +- .../editor/test/node/diffing/fixtures.test.ts | 18 +- src/vs/monaco.d.ts | 250 +- src/vs/nls.ts | 6 +- .../browser/accessibilityService.ts | 18 +- .../accessibility/browser/accessibleView.ts | 17 +- .../browser/accessibleViewRegistry.ts | 8 +- .../accessibility/common/accessibility.ts | 6 +- .../test/common/testAccessibilityService.ts | 4 +- .../browser/accessibilitySignalService.ts | 25 +- .../progressAccessibilitySignalScheduler.ts | 6 +- src/vs/platform/action/common/action.ts | 10 +- .../action/common/actionCommonCategories.ts | 2 +- .../actionWidget/browser/actionList.ts | 36 +- .../actionWidget/browser/actionWidget.css | 5 +- .../actionWidget/browser/actionWidget.ts | 32 +- .../actionWidget/common/actionWidget.ts | 2 +- .../actions/browser/actionViewItemService.ts | 80 + src/vs/platform/actions/browser/buttonbar.ts | 32 +- .../dropdownWithPrimaryActionViewItem.ts | 40 +- .../platform/actions/browser/floatingMenu.ts | 20 +- .../browser/menuEntryActionViewItem.ts | 58 +- src/vs/platform/actions/browser/toolbar.ts | 71 +- .../actions/common/actions.contribution.ts | 8 +- src/vs/platform/actions/common/actions.ts | 42 +- .../actions/common/menuResetAction.ts | 10 +- src/vs/platform/actions/common/menuService.ts | 24 +- .../actions/test/common/menuService.test.ts | 16 +- .../platform/assignment/common/assignment.ts | 2 +- .../assignment/common/assignmentService.ts | 14 +- .../electron-main/auxiliaryWindow.ts | 18 +- .../electron-main/auxiliaryWindows.ts | 6 +- .../auxiliaryWindowsMainService.ts | 20 +- src/vs/platform/backup/common/backup.ts | 4 +- .../platform/backup/electron-main/backup.ts | 6 +- .../backup/electron-main/backupMainService.ts | 32 +- src/vs/platform/backup/node/backup.ts | 4 +- .../electron-main/backupMainService.test.ts | 40 +- .../checksum/common/checksumService.ts | 4 +- .../platform/checksum/node/checksumService.ts | 8 +- .../test/node/checksumService.test.ts | 16 +- .../clipboard/browser/clipboardService.ts | 46 +- .../clipboard/common/clipboardService.ts | 10 +- .../test/common/testClipboardService.ts | 7 +- src/vs/platform/commands/common/commands.ts | 16 +- .../commands/test/common/commands.test.ts | 6 +- .../test/common/nullCommandService.ts | 4 +- .../configuration/common/configuration.ts | 10 +- .../common/configurationModels.ts | 32 +- .../common/configurationRegistry.ts | 22 +- .../common/configurationService.ts | 40 +- .../configuration/common/configurations.ts | 22 +- .../test/common/configuration.test.ts | 4 +- .../test/common/configurationModels.test.ts | 20 +- .../test/common/configurationRegistry.test.ts | 6 +- .../test/common/configurationService.test.ts | 32 +- .../test/common/configurations.test.ts | 14 +- .../test/common/policyConfiguration.test.ts | 30 +- .../test/common/testConfigurationService.ts | 12 +- .../contextkey/browser/contextKeyService.ts | 26 +- .../platform/contextkey/common/contextkey.ts | 18 +- .../platform/contextkey/common/contextkeys.ts | 6 +- src/vs/platform/contextkey/common/scanner.ts | 6 +- .../test/browser/contextkey.test.ts | 22 +- .../contextkey/test/common/contextkey.test.ts | 6 +- .../contextkey/test/common/parser.test.ts | 4 +- .../contextkey/test/common/scanner.test.ts | 4 +- .../contextview/browser/contextMenuHandler.ts | 24 +- .../contextview/browser/contextMenuService.ts | 26 +- .../contextview/browser/contextView.ts | 18 +- .../contextview/browser/contextViewService.ts | 10 +- src/vs/platform/cssDev/node/cssDevService.ts | 12 +- .../debug/common/extensionHostDebug.ts | 4 +- .../debug/common/extensionHostDebugIpc.ts | 8 +- .../electron-main/extensionHostDebugIpc.ts | 8 +- .../diagnostics/common/diagnostics.ts | 10 +- .../electron-main/diagnosticsMainService.ts | 24 +- .../electron-sandbox/diagnosticsService.ts | 4 +- .../diagnostics/node/diagnosticsService.ts | 32 +- src/vs/platform/dialogs/common/dialogs.ts | 28 +- .../electron-main/dialogMainService.ts | 26 +- .../dialogs/test/common/dialog.test.ts | 10 +- .../dialogs/test/common/testDialogService.ts | 6 +- src/vs/platform/dnd/browser/dnd.ts | 40 +- src/vs/platform/download/common/download.ts | 6 +- .../platform/download/common/downloadIpc.ts | 10 +- .../download/common/downloadService.ts | 12 +- src/vs/platform/editor/common/editor.ts | 4 +- .../encryption/common/encryptionService.ts | 2 +- .../electron-main/encryptionMainService.ts | 6 +- .../environment/common/environment.ts | 6 +- .../environment/common/environmentService.ts | 20 +- .../electron-main/environmentMainService.ts | 14 +- src/vs/platform/environment/node/argv.ts | 6 +- .../platform/environment/node/argvHelper.ts | 8 +- .../environment/node/environmentService.ts | 10 +- src/vs/platform/environment/node/stdin.ts | 6 +- .../platform/environment/node/userDataPath.js | 24 +- src/vs/platform/environment/node/wait.ts | 2 +- .../environmentMainService.test.ts | 8 +- .../environment/test/node/argv.test.ts | 6 +- .../test/node/environmentService.test.ts | 10 +- .../node/nativeModules.integrationTest.ts | 16 +- .../test/node/userDataPath.test.ts | 8 +- .../abstractExtensionManagementService.ts | 169 +- .../common/configRemotes.ts | 2 +- .../common/extensionEnablementService.ts | 22 +- .../common/extensionGalleryService.ts | 50 +- .../common/extensionManagement.ts | 51 +- .../common/extensionManagementCLI.ts | 22 +- .../common/extensionManagementIpc.ts | 58 +- .../common/extensionManagementUtil.ts | 24 +- .../common/extensionNls.ts | 10 +- .../common/extensionStorage.ts | 24 +- .../common/extensionTipsService.ts | 38 +- .../common/extensionsProfileScannerService.ts | 34 +- .../common/extensionsScannerService.ts | 66 +- .../common/implicitActivationEvents.ts | 4 +- .../common/unsupportedExtensionsMigration.ts | 12 +- .../extensionsProfileScannerService.ts | 18 +- .../node/extensionDownloader.ts | 98 +- .../node/extensionLifecycle.ts | 20 +- .../node/extensionManagementService.ts | 132 +- .../node/extensionManagementUtil.ts | 10 +- .../extensionSignatureVerificationService.ts | 85 +- .../node/extensionTipsService.ts | 18 +- .../node/extensionsManifestCache.ts | 16 +- .../node/extensionsProfileScannerService.ts | 16 +- .../node/extensionsScannerService.ts | 20 +- .../node/extensionsWatcher.ts | 28 +- .../test/common/configRemotes.test.ts | 4 +- .../common/extensionGalleryService.test.ts | 40 +- .../test/common/extensionManagement.test.ts | 8 +- .../test/common/extensionNls.test.ts | 14 +- .../extensionsProfileScannerService.test.ts | 34 +- .../test/node/extensionDownloader.test.ts | 91 +- .../node/extensionsScannerService.test.ts | 40 +- .../common/extensionRecommendations.ts | 4 +- .../common/extensionRecommendationsIpc.ts | 6 +- .../browser/extensionResourceLoaderService.ts | 20 +- .../common/extensionResourceLoader.ts | 28 +- .../common/extensionResourceLoaderService.ts | 20 +- .../extensions/common/extensionHostStarter.ts | 4 +- .../extensions/common/extensionValidator.ts | 16 +- .../platform/extensions/common/extensions.ts | 14 +- .../common/extensionsApiProposals.ts | 12 +- .../electron-main/extensionHostStarter.ts | 21 +- .../test/common/extensionValidator.test.ts | 6 +- .../extensions/test/common/extensions.test.ts | 4 +- .../externalServices/common/marketplace.ts | 18 +- .../common/serviceMachineId.ts | 10 +- .../common/externalTerminal.ts | 4 +- .../electron-main/externalTerminal.ts | 4 +- .../externalTerminalService.ts | 6 +- .../node/externalTerminalService.ts | 20 +- .../externalTerminalService.test.ts | 6 +- .../files/browser/htmlFileSystemProvider.ts | 30 +- .../browser/indexedDBFileSystemProvider.ts | 22 +- .../files/common/diskFileSystemProvider.ts | 77 +- .../common/diskFileSystemProviderClient.ts | 24 +- src/vs/platform/files/common/fileService.ts | 38 +- src/vs/platform/files/common/files.ts | 34 +- .../common/inMemoryFilesystemProvider.ts | 14 +- src/vs/platform/files/common/io.ts | 14 +- src/vs/platform/files/common/watcher.ts | 14 +- .../diskFileSystemProviderServer.ts | 26 +- .../files/node/diskFileSystemProvider.ts | 42 +- .../node/diskFileSystemProviderServer.ts | 28 +- .../files/node/watcher/baseWatcher.ts | 128 +- .../files/node/watcher/nodejs/nodejsClient.ts | 8 +- .../node/watcher/nodejs/nodejsWatcher.ts | 14 +- .../node/watcher/nodejs/nodejsWatcherLib.ts | 28 +- .../node/watcher/parcel/parcelWatcher.ts | 139 +- src/vs/platform/files/node/watcher/watcher.ts | 32 +- .../files/node/watcher/watcherClient.ts | 12 +- .../files/node/watcher/watcherMain.ts | 12 +- .../files/node/watcher/watcherStats.ts | 15 +- .../files/test/browser/fileService.test.ts | 26 +- .../indexedDBFileService.integrationTest.ts | 22 +- .../platform/files/test/common/files.test.ts | 10 +- .../test/common/nullFileSystemProvider.ts | 12 +- .../files/test/common/watcher.test.ts | 16 +- .../node/diskFileService.integrationTest.ts | 31 +- ...tegrationTest.ts => nodejsWatcher.test.ts} | 92 +- ...tegrationTest.ts => parcelWatcher.test.ts} | 78 +- .../browser/contextScopedHistoryWidget.ts | 22 +- .../browser/historyWidgetKeybindingHint.ts | 2 +- src/vs/platform/hover/browser/hover.ts | 14 +- .../hover/test/browser/nullHoverService.ts | 4 +- .../instantiation/common/extensions.ts | 4 +- .../instantiation/common/instantiation.ts | 10 +- .../common/instantiationService.ts | 24 +- .../instantiation/common/serviceCollection.ts | 4 +- .../instantiation/test/common/graph.test.ts | 4 +- .../test/common/instantiationService.test.ts | 14 +- .../test/common/instantiationServiceMock.ts | 10 +- .../platform/ipc/common/mainProcessService.ts | 6 +- src/vs/platform/ipc/common/services.ts | 2 +- .../electron-sandbox/mainProcessService.ts | 8 +- .../platform/ipc/electron-sandbox/services.ts | 12 +- src/vs/platform/issue/common/issue.ts | 8 +- .../issue/common/issueReporterUtil.ts | 2 +- .../issue/electron-main/issueMainService.ts | 38 +- .../issue/electron-main/processMainService.ts | 46 +- .../common/jsonContributionRegistry.ts | 6 +- .../common/abstractKeybindingService.ts | 38 +- .../common/baseResolvedKeybinding.ts | 8 +- .../platform/keybinding/common/keybinding.ts | 16 +- .../keybinding/common/keybindingResolver.ts | 4 +- .../keybinding/common/keybindingsRegistry.ts | 14 +- .../common/resolvedKeybindingItem.ts | 6 +- .../common/usLayoutResolvedKeybinding.ts | 10 +- .../common/abstractKeybindingService.test.ts | 34 +- .../test/common/keybindingLabels.test.ts | 8 +- .../test/common/keybindingResolver.test.ts | 18 +- .../test/common/keybindingsTestUtils.ts | 6 +- .../test/common/mockKeybindingService.ts | 16 +- .../keyboardLayout/common/keyboardConfig.ts | 10 +- .../keyboardLayout/common/keyboardLayout.ts | 10 +- .../common/keyboardLayoutService.ts | 4 +- .../keyboardLayout/common/keyboardMapper.ts | 4 +- .../keyboardLayoutMainService.ts | 12 +- src/vs/platform/label/common/label.ts | 10 +- .../languagePacks/browser/languagePacks.ts | 12 +- .../languagePacks/common/languagePacks.ts | 16 +- .../languagePacks/common/localizedStrings.ts | 2 +- .../languagePacks/node/languagePacks.ts | 26 +- .../launch/electron-main/launchMainService.ts | 30 +- .../platform/layout/browser/layoutService.ts | 8 +- .../platform/layout/browser/zIndexRegistry.ts | 4 +- src/vs/platform/lifecycle/common/lifecycle.ts | 2 +- .../electron-main/lifecycleMainService.ts | 30 +- .../node/sharedProcessLifecycleService.ts | 8 +- src/vs/platform/list/browser/listService.ts | 60 +- src/vs/platform/log/browser/log.ts | 12 +- src/vs/platform/log/common/bufferLog.ts | 9 +- src/vs/platform/log/common/fileLog.ts | 14 +- src/vs/platform/log/common/log.ts | 28 +- src/vs/platform/log/common/logIpc.ts | 12 +- src/vs/platform/log/common/logService.ts | 6 +- src/vs/platform/log/electron-main/logIpc.ts | 12 +- .../log/electron-main/loggerService.ts | 12 +- src/vs/platform/log/node/loggerService.ts | 8 +- src/vs/platform/log/node/spdlogLog.ts | 4 +- .../platform/markers/common/markerService.ts | 16 +- src/vs/platform/markers/common/markers.ts | 10 +- .../markers/test/common/markerService.test.ts | 8 +- src/vs/platform/menubar/common/menubar.ts | 2 +- .../platform/menubar/electron-main/menubar.ts | 44 +- .../electron-main/menubarMainService.ts | 12 +- .../menubar/electron-sandbox/menubar.ts | 4 +- src/vs/platform/native/common/native.ts | 25 +- .../native/common/nativeHostService.ts | 6 +- src/vs/platform/native/electron-main/auth.ts | 30 +- .../electron-main/nativeHostMainService.ts | 104 +- .../notification/common/notification.ts | 10 +- .../test/common/testNotificationService.ts | 6 +- .../common/platformObservableUtils.ts | 9 +- .../observable/common/wrapInHotClass.ts | 70 + .../common/wrapInReloadableClass.ts | 10 +- src/vs/platform/opener/browser/link.ts | 26 +- src/vs/platform/opener/common/opener.ts | 10 +- .../opener/test/common/nullOpenerService.ts | 6 +- .../opener/test/common/opener.test.ts | 4 +- .../policy/common/filePolicyService.ts | 16 +- src/vs/platform/policy/common/policy.ts | 10 +- src/vs/platform/policy/common/policyIpc.ts | 10 +- .../policy/node/nativePolicyService.ts | 10 +- src/vs/platform/product/common/product.ts | 8 +- .../platform/product/common/productService.ts | 4 +- src/vs/platform/profiling/common/profiling.ts | 4 +- .../profiling/common/profilingModel.ts | 2 +- .../common/profilingTelemetrySpec.ts | 8 +- .../electron-main/windowProfiling.ts | 6 +- .../profileAnalysisWorker.esm.ts | 4 +- .../electron-sandbox/profileAnalysisWorker.ts | 14 +- .../profileAnalysisWorkerService.ts | 20 +- .../electron-sandbox/profilingService.ts | 4 +- .../profiling/node/profilingService.ts | 4 +- src/vs/platform/progress/common/progress.ts | 12 +- .../progress/test/common/progress.test.ts | 6 +- .../protocol/electron-main/protocol.ts | 6 +- .../electron-main/protocolMainService.ts | 24 +- .../quickinput/browser/commandsQuickAccess.ts | 44 +- .../quickinput/browser/helpQuickAccess.ts | 12 +- .../quickinput/browser/pickerQuickAccess.ts | 12 +- .../quickinput/browser/quickAccess.ts | 16 +- .../platform/quickinput/browser/quickInput.ts | 60 +- .../quickinput/browser/quickInputActions.ts | 20 +- .../quickinput/browser/quickInputBox.ts | 18 +- .../browser/quickInputController.ts | 44 +- .../quickinput/browser/quickInputService.ts | 32 +- .../quickinput/browser/quickInputTree.ts | 74 +- .../quickinput/browser/quickInputUtils.ts | 30 +- .../quickinput/browser/quickPickPin.ts | 12 +- .../platform/quickinput/common/quickAccess.ts | 10 +- .../platform/quickinput/common/quickInput.ts | 24 +- .../test/browser/quickinput.test.ts | 60 +- src/vs/platform/registry/common/platform.ts | 4 +- .../registry/test/common/platform.test.ts | 4 +- .../remote/browser/browserSocketFactory.ts | 18 +- .../browser/remoteAuthorityResolverService.ts | 26 +- .../remote/common/electronRemoteResources.ts | 4 +- .../platform/remote/common/managedSocket.ts | 8 +- .../remote/common/remoteAgentConnection.ts | 34 +- .../remote/common/remoteAgentEnvironment.ts | 8 +- .../remote/common/remoteAuthorityResolver.ts | 8 +- .../remote/common/remoteExtensionsScanner.ts | 4 +- src/vs/platform/remote/common/remoteHosts.ts | 4 +- .../common/remoteSocketFactoryService.ts | 8 +- .../common/sharedProcessTunnelService.ts | 4 +- .../electronRemoteResourceLoader.ts | 20 +- .../remoteAuthorityResolverService.ts | 18 +- .../sharedProcessTunnelService.ts | 4 +- .../platform/remote/node/nodeSocketFactory.ts | 10 +- .../remote/test/common/remoteHosts.test.ts | 4 +- .../remoteAuthorityResolverService.test.ts | 10 +- .../remoteTunnel/common/remoteTunnel.ts | 6 +- .../electron-sandbox/remoteTunnelService.ts | 4 +- .../remoteTunnel/node/remoteTunnelService.ts | 34 +- .../request/browser/requestService.ts | 50 - src/vs/platform/request/common/request.ts | 45 +- src/vs/platform/request/common/requestIpc.ts | 12 +- .../requestService.ts} | 8 +- src/vs/platform/request/node/proxy.ts | 10 +- .../platform/request/node/requestService.ts | 33 +- src/vs/platform/secrets/common/secrets.ts | 16 +- .../secrets/test/common/secrets.test.ts | 10 +- .../severityIcon/browser/severityIcon.ts | 8 +- .../electron-main/sharedProcess.ts | 35 +- .../sharedProcess/node/sharedProcess.ts | 12 +- src/vs/platform/shell/node/shellEnv.ts | 28 +- src/vs/platform/sign/browser/signService.ts | 18 +- .../sign/common/abstractSignService.ts | 2 +- src/vs/platform/sign/common/sign.ts | 2 +- src/vs/platform/sign/node/signService.ts | 16 +- src/vs/platform/state/node/state.ts | 2 +- src/vs/platform/state/node/stateService.ts | 18 +- src/vs/platform/state/test/node/state.test.ts | 24 +- src/vs/platform/storage/common/storage.ts | 18 +- src/vs/platform/storage/common/storageIpc.ts | 14 +- .../platform/storage/common/storageService.ts | 22 +- .../storage/electron-main/storageIpc.ts | 20 +- .../storage/electron-main/storageMain.ts | 36 +- .../electron-main/storageMainService.ts | 32 +- .../test/common/storageService.test.ts | 6 +- .../electron-main/storageMainService.test.ts | 44 +- .../platform/telemetry/browser/1dsAppender.ts | 2 +- .../telemetry/browser/errorTelemetry.ts | 8 +- .../platform/telemetry/common/1dsAppender.ts | 26 +- .../telemetry/common/commonProperties.ts | 8 +- .../telemetry/common/errorTelemetry.ts | 12 +- .../common/remoteTelemetryChannel.ts | 12 +- .../common/serverTelemetryService.ts | 14 +- src/vs/platform/telemetry/common/telemetry.ts | 4 +- .../platform/telemetry/common/telemetryIpc.ts | 6 +- .../telemetry/common/telemetryLogAppender.ts | 16 +- .../telemetry/common/telemetryService.ts | 26 +- .../telemetry/common/telemetryUtils.ts | 22 +- .../telemetry/electron-main/telemetryUtils.ts | 8 +- .../customEndpointTelemetryService.ts | 4 +- src/vs/platform/telemetry/node/1dsAppender.ts | 10 +- .../node/customEndpointTelemetryService.ts | 20 +- .../platform/telemetry/node/errorTelemetry.ts | 4 +- src/vs/platform/telemetry/node/telemetry.ts | 4 +- .../platform/telemetry/node/telemetryUtils.ts | 10 +- .../test/browser/1dsAppender.test.ts | 6 +- .../test/browser/telemetryService.test.ts | 22 +- .../test/common/telemetryLogAppender.test.ts | 14 +- .../capabilities/bufferMarkCapability.ts | 8 +- .../common/capabilities/capabilities.ts | 12 +- .../commandDetection/promptInputModel.ts | 14 +- .../commandDetection/terminalCommand.ts | 7 +- .../commandDetectionCapability.ts | 21 +- .../capabilities/cwdDetectionCapability.ts | 6 +- .../naiveCwdDetectionCapability.ts | 6 +- .../partialCommandDetectionCapability.ts | 8 +- .../capabilities/terminalCapabilityStore.ts | 6 +- .../terminal/common/environmentVariable.ts | 4 +- .../common/environmentVariableCollection.ts | 4 +- .../common/environmentVariableShared.ts | 2 +- .../platform/terminal/common/requestStore.ts | 10 +- src/vs/platform/terminal/common/terminal.ts | 26 +- .../terminal/common/terminalAutoResponder.ts | 10 +- .../terminal/common/terminalDataBuffering.ts | 6 +- .../terminal/common/terminalEnvironment.ts | 4 +- .../terminal/common/terminalLogService.ts | 16 +- .../common/terminalPlatformConfiguration.ts | 16 +- .../terminal/common/terminalProcess.ts | 6 +- .../terminal/common/terminalProfiles.ts | 10 +- .../terminal/common/terminalRecorder.ts | 4 +- .../common/xterm/shellIntegrationAddon.ts | 32 +- .../electron-main/electronPtyHostStarter.ts | 30 +- .../terminal/node/childProcessMonitor.ts | 14 +- .../terminal/node/heartbeatService.ts | 6 +- .../terminal/node/nodePtyHostStarter.ts | 14 +- src/vs/platform/terminal/node/ptyHost.ts | 6 +- src/vs/platform/terminal/node/ptyHostMain.ts | 38 +- .../platform/terminal/node/ptyHostService.ts | 36 +- src/vs/platform/terminal/node/ptyService.ts | 58 +- .../terminal/node/terminalEnvironment.ts | 48 +- .../platform/terminal/node/terminalProcess.ts | 28 +- .../terminal/node/terminalProfiles.ts | 24 +- .../terminal/node/windowsShellHelper.ts | 14 +- .../commandDetection/promptInputModel.test.ts | 14 +- .../terminal/test/common/requestStore.test.ts | 10 +- .../test/common/terminalEnvironment.test.ts | 6 +- .../test/common/terminalProcess.test.ts | 4 +- .../test/common/terminalProfiles.test.ts | 8 +- .../test/common/terminalRecorder.test.ts | 6 +- .../test/node/terminalEnvironment.test.ts | 73 +- .../electron-main/workbenchTestServices.ts | 14 +- .../platform/theme/browser/defaultStyles.ts | 32 +- .../platform/theme/browser/iconsStyleSheet.ts | 12 +- src/vs/platform/theme/common/colorRegistry.ts | 22 +- src/vs/platform/theme/common/colorUtils.ts | 21 +- .../theme/common/colors/baseColors.ts | 6 +- .../theme/common/colors/chartsColors.ts | 10 +- .../theme/common/colors/editorColors.ts | 10 +- .../theme/common/colors/inputColors.ts | 10 +- .../theme/common/colors/listColors.ts | 10 +- .../theme/common/colors/menuColors.ts | 10 +- .../theme/common/colors/minimapColors.ts | 10 +- .../theme/common/colors/miscColors.ts | 8 +- .../theme/common/colors/quickpickColors.ts | 10 +- .../theme/common/colors/searchColors.ts | 8 +- src/vs/platform/theme/common/iconRegistry.ts | 22 +- src/vs/platform/theme/common/themeService.ts | 24 +- .../common/tokenClassificationRegistry.ts | 16 +- .../theme/electron-main/themeMainService.ts | 26 +- .../theme/test/common/testThemeService.ts | 10 +- src/vs/platform/tunnel/common/tunnel.ts | 20 +- .../tunnel/node/sharedProcessTunnelService.ts | 14 +- src/vs/platform/tunnel/node/tunnelService.ts | 30 +- .../tunnel/test/common/tunnel.test.ts | 6 +- src/vs/platform/undoRedo/common/undoRedo.ts | 6 +- .../undoRedo/common/undoRedoService.ts | 20 +- .../test/common/undoRedoService.test.ts | 16 +- .../common/update.config.contribution.ts | 8 +- src/vs/platform/update/common/update.ts | 4 +- src/vs/platform/update/common/updateIpc.ts | 6 +- .../electron-main/abstractUpdateService.ts | 20 +- .../electron-main/updateService.darwin.ts | 26 +- .../electron-main/updateService.linux.ts | 22 +- .../electron-main/updateService.snap.ts | 18 +- .../electron-main/updateService.win32.ts | 40 +- .../uriIdentity/common/uriIdentity.ts | 6 +- .../uriIdentity/common/uriIdentityService.ts | 16 +- .../test/common/uriIdentityService.test.ts | 12 +- src/vs/platform/url/common/url.ts | 6 +- src/vs/platform/url/common/urlIpc.ts | 12 +- src/vs/platform/url/common/urlService.ts | 10 +- .../url/electron-main/electronUrlListener.ts | 22 +- src/vs/platform/url/electron-main/url.ts | 4 +- .../userData/common/fileUserDataProvider.ts | 22 +- .../test/browser/fileUserDataProvider.test.ts | 38 +- .../browser/userDataProfile.ts | 16 +- .../userDataProfile/common/userDataProfile.ts | 339 +- .../common/userDataProfileIpc.ts | 14 +- .../common/userDataProfileStorageService.ts | 18 +- .../electron-main/userDataProfile.ts | 20 +- .../userDataProfileStorageIpc.ts | 20 +- .../electron-main/userDataProfilesHandler.ts | 14 +- .../userDataProfileStorageService.ts | 12 +- .../userDataProfile/node/userDataProfile.ts | 20 +- .../node/userDataProfileStorageService.ts | 10 +- .../common/userDataProfileService.test.ts | 151 +- .../userDataProfileStorageService.test.ts | 16 +- .../userDataProfileMainService.test.ts | 24 +- .../common/abstractSynchronizer.ts | 50 +- .../platform/userDataSync/common/content.ts | 6 +- .../userDataSync/common/extensionsMerge.ts | 12 +- .../userDataSync/common/extensionsSync.ts | 58 +- .../userDataSync/common/globalStateMerge.ts | 8 +- .../userDataSync/common/globalStateSync.ts | 54 +- .../userDataSync/common/ignoredExtensions.ts | 8 +- .../userDataSync/common/keybindingsMerge.ts | 18 +- .../userDataSync/common/keybindingsSync.ts | 40 +- .../userDataSync/common/settingsMerge.ts | 18 +- .../userDataSync/common/settingsSync.ts | 38 +- .../userDataSync/common/snippetsMerge.ts | 2 +- .../userDataSync/common/snippetsSync.ts | 32 +- .../platform/userDataSync/common/tasksSync.ts | 26 +- .../common/userDataAutoSyncService.ts | 34 +- .../common/userDataProfilesManifestMerge.ts | 6 +- .../common/userDataProfilesManifestSync.ts | 26 +- .../userDataSync/common/userDataSync.ts | 44 +- .../common/userDataSyncAccount.ts | 8 +- .../common/userDataSyncEnablementService.ts | 14 +- .../userDataSync/common/userDataSyncIpc.ts | 20 +- .../common/userDataSyncLocalStoreService.ts | 22 +- .../userDataSync/common/userDataSyncLog.ts | 10 +- .../common/userDataSyncMachines.ts | 24 +- .../common/userDataSyncResourceProvider.ts | 46 +- .../common/userDataSyncService.ts | 50 +- .../common/userDataSyncServiceIpc.ts | 16 +- .../common/userDataSyncStoreService.ts | 44 +- .../node/userDataAutoSyncService.ts | 18 +- .../test/common/extensionsMerge.test.ts | 6 +- .../test/common/globalStateMerge.test.ts | 6 +- .../test/common/globalStateSync.test.ts | 22 +- .../test/common/keybindingsMerge.test.ts | 6 +- .../test/common/keybindingsSync.test.ts | 16 +- .../test/common/settingsMerge.test.ts | 6 +- .../test/common/settingsSync.test.ts | 24 +- .../test/common/snippetsMerge.test.ts | 4 +- .../test/common/snippetsSync.test.ts | 22 +- .../test/common/synchronizer.test.ts | 28 +- .../test/common/tasksSync.test.ts | 18 +- .../common/userDataAutoSyncService.test.ts | 24 +- .../userDataProfilesManifestMerge.test.ts | 10 +- .../userDataProfilesManifestSync.test.ts | 12 +- .../test/common/userDataSyncClient.ts | 84 +- .../test/common/userDataSyncService.test.ts | 16 +- .../common/userDataSyncStoreService.test.ts | 26 +- .../electron-main/utilityProcess.ts | 77 +- .../utilityProcessWorkerMainService.ts | 22 +- src/vs/platform/webview/common/mimeTypes.ts | 6 +- .../webview/common/webviewManagerService.ts | 4 +- .../webview/common/webviewPortMapping.ts | 10 +- .../electron-main/webviewMainService.ts | 10 +- .../electron-main/webviewProtocolProvider.ts | 6 +- src/vs/platform/window/common/window.ts | 31 +- .../platform/window/electron-main/window.ts | 16 +- .../window/electron-sandbox/window.ts | 10 +- .../windows/electron-main/windowImpl.ts | 83 +- .../platform/windows/electron-main/windows.ts | 30 +- .../windows/electron-main/windowsFinder.ts | 8 +- .../electron-main/windowsMainService.ts | 102 +- .../electron-main/windowsStateHandler.ts | 24 +- src/vs/platform/windows/node/windowTracker.ts | 6 +- .../test/electron-main/windowsFinder.test.ts | 28 +- .../electron-main/windowsStateHandler.test.ts | 12 +- .../platform/workspace/common/canonicalUri.ts | 8 +- .../platform/workspace/common/editSessions.ts | 8 +- .../workspace/common/virtualWorkspace.ts | 6 +- src/vs/platform/workspace/common/workspace.ts | 18 +- .../workspace/common/workspaceTrust.ts | 8 +- .../workspace/test/common/testWorkspace.ts | 6 +- .../workspace/test/common/workspace.test.ts | 12 +- .../platform/workspaces/common/workspaces.ts | 32 +- .../workspacesHistoryMainService.ts | 42 +- .../electron-main/workspacesMainService.ts | 18 +- .../workspacesManagementMainService.ts | 40 +- src/vs/platform/workspaces/node/workspaces.ts | 10 +- .../workspaces/test/common/workspaces.test.ts | 6 +- .../test/electron-main/workspaces.test.ts | 14 +- .../workspacesHistoryStorage.test.ts | 12 +- .../workspacesManagementMainService.test.ts | 52 +- src/vs/server/node/extensionHostConnection.ts | 34 +- .../server/node/extensionHostStatusService.ts | 4 +- .../server/node/extensionsScannerService.ts | 24 +- .../server/node/remoteAgentEnvironmentImpl.ts | 36 +- .../node/remoteExtensionHostAgentCli.ts | 96 +- .../node/remoteExtensionHostAgentServer.ts | 68 +- .../server/node/remoteExtensionManagement.ts | 10 +- src/vs/server/node/remoteExtensionsScanner.ts | 40 +- .../node/remoteFileSystemProviderServer.ts | 33 +- src/vs/server/node/remoteLanguagePacks.ts | 12 +- src/vs/server/node/remoteTerminalChannel.ts | 58 +- src/vs/server/node/server.cli.ts | 18 +- src/vs/server/node/server.main.ts | 16 +- src/vs/server/node/serverConnectionToken.ts | 10 +- .../server/node/serverEnvironmentService.ts | 16 +- src/vs/server/node/serverServices.ts | 152 +- src/vs/server/node/webClientServer.ts | 42 +- .../test/node/serverConnectionToken.test.ts | 8 +- .../api/browser/extensionHost.contribution.ts | 163 +- .../browser/mainThreadAiEmbeddingVector.ts | 10 +- .../browser/mainThreadAiRelatedInformation.ts | 12 +- .../api/browser/mainThreadAuthentication.ts | 115 +- .../api/browser/mainThreadBulkEdits.ts | 22 +- .../api/browser/mainThreadCLICommands.ts | 38 +- .../api/browser/mainThreadChatAgents2.ts | 62 +- .../api/browser/mainThreadChatCodeMapper.ts | 62 + .../api/browser/mainThreadChatVariables.ts | 10 +- .../api/browser/mainThreadClipboard.ts | 6 +- .../api/browser/mainThreadCodeInsets.ts | 22 +- .../api/browser/mainThreadCommands.ts | 16 +- .../api/browser/mainThreadComments.ts | 65 +- .../api/browser/mainThreadConfiguration.ts | 18 +- .../api/browser/mainThreadConsole.ts | 14 +- .../api/browser/mainThreadCustomEditors.ts | 95 +- .../api/browser/mainThreadDebugService.ts | 30 +- .../api/browser/mainThreadDecorations.ts | 14 +- .../api/browser/mainThreadDiagnostics.ts | 12 +- .../api/browser/mainThreadDialogs.ts | 10 +- .../mainThreadDocumentContentProviders.ts | 26 +- .../api/browser/mainThreadDocuments.ts | 38 +- .../browser/mainThreadDocumentsAndEditors.ts | 58 +- .../api/browser/mainThreadDownloadService.ts | 10 +- ...ainThreadEditSessionIdentityParticipant.ts | 18 +- .../workbench/api/browser/mainThreadEditor.ts | 38 +- .../api/browser/mainThreadEditorTabs.ts | 50 +- .../api/browser/mainThreadEditors.ts | 52 +- .../api/browser/mainThreadEmbeddings.ts | 14 +- .../workbench/api/browser/mainThreadErrors.ts | 6 +- .../api/browser/mainThreadExtensionService.ts | 52 +- .../api/browser/mainThreadFileSystem.ts | 16 +- .../mainThreadFileSystemEventService.ts | 106 +- .../api/browser/mainThreadInteractive.ts | 10 +- .../api/browser/mainThreadLabelService.ts | 8 +- .../api/browser/mainThreadLanguageFeatures.ts | 68 +- .../browser/mainThreadLanguageModelTools.ts | 22 +- .../api/browser/mainThreadLanguageModels.ts | 30 +- .../api/browser/mainThreadLanguages.ts | 22 +- .../api/browser/mainThreadLocalization.ts | 12 +- .../api/browser/mainThreadLogService.ts | 16 +- .../api/browser/mainThreadManagedSockets.ts | 18 +- .../api/browser/mainThreadMessageService.ts | 22 +- .../api/browser/mainThreadNotebook.ts | 42 +- .../browser/mainThreadNotebookDocuments.ts | 24 +- .../mainThreadNotebookDocumentsAndEditors.ts | 39 +- .../api/browser/mainThreadNotebookDto.ts | 8 +- .../api/browser/mainThreadNotebookEditors.ts | 26 +- .../api/browser/mainThreadNotebookKernels.ts | 60 +- .../browser/mainThreadNotebookRenderers.ts | 8 +- .../mainThreadNotebookSaveParticipant.ts | 22 +- .../api/browser/mainThreadOutputService.ts | 18 +- .../mainThreadProfileContentHandlers.ts | 14 +- .../api/browser/mainThreadProgress.ts | 12 +- .../api/browser/mainThreadQuickDiff.ts | 12 +- .../api/browser/mainThreadQuickOpen.ts | 12 +- .../browser/mainThreadRemoteConnectionData.ts | 10 +- src/vs/workbench/api/browser/mainThreadSCM.ts | 161 +- .../api/browser/mainThreadSaveParticipant.ts | 20 +- .../workbench/api/browser/mainThreadSearch.ts | 30 +- .../api/browser/mainThreadSecretState.ts | 14 +- .../workbench/api/browser/mainThreadShare.ts | 12 +- .../workbench/api/browser/mainThreadSpeech.ts | 14 +- .../api/browser/mainThreadStatusBar.ts | 18 +- .../api/browser/mainThreadStorage.ts | 18 +- .../workbench/api/browser/mainThreadTask.ts | 34 +- .../api/browser/mainThreadTelemetry.ts | 18 +- .../api/browser/mainThreadTerminalService.ts | 40 +- .../mainThreadTerminalShellIntegration.ts | 18 +- .../api/browser/mainThreadTesting.ts | 36 +- .../api/browser/mainThreadTheming.ts | 8 +- .../api/browser/mainThreadTimeline.ts | 16 +- .../api/browser/mainThreadTreeViews.ts | 34 +- .../api/browser/mainThreadTunnelService.ts | 50 +- .../api/browser/mainThreadUriOpeners.ts | 32 +- .../workbench/api/browser/mainThreadUrls.ts | 14 +- .../api/browser/mainThreadWebviewManager.ts | 16 +- .../api/browser/mainThreadWebviewPanels.ts | 42 +- .../api/browser/mainThreadWebviewViews.ts | 20 +- .../api/browser/mainThreadWebviews.ts | 30 +- .../workbench/api/browser/mainThreadWindow.ts | 16 +- .../api/browser/mainThreadWorkspace.ts | 61 +- .../api/browser/statusBarExtensionPoint.ts | 38 +- .../api/browser/viewsExtensionPoint.ts | 54 +- .../api/common/configurationExtensionPoint.ts | 30 +- .../workbench/api/common/extHost.api.impl.ts | 241 +- .../api/common/extHost.common.services.ts | 58 +- .../workbench/api/common/extHost.protocol.ts | 256 +- .../api/common/extHostAiRelatedInformation.ts | 6 +- .../api/common/extHostApiCommands.ts | 37 +- .../common/extHostApiDeprecationService.ts | 10 +- .../api/common/extHostAuthentication.ts | 36 +- .../workbench/api/common/extHostBulkEdits.ts | 12 +- .../api/common/extHostChatAgents2.ts | 98 +- .../api/common/extHostChatVariables.ts | 20 +- .../workbench/api/common/extHostClipboard.ts | 2 +- .../workbench/api/common/extHostCodeInsets.ts | 14 +- .../workbench/api/common/extHostCodeMapper.ts | 68 + .../workbench/api/common/extHostCommands.ts | 52 +- .../workbench/api/common/extHostComments.ts | 34 +- .../api/common/extHostConfiguration.ts | 32 +- .../api/common/extHostConsoleForwarder.ts | 10 +- .../api/common/extHostCustomEditors.ts | 34 +- .../api/common/extHostDebugService.ts | 116 +- .../api/common/extHostDecorations.ts | 24 +- .../api/common/extHostDiagnostics.ts | 26 +- src/vs/workbench/api/common/extHostDialogs.ts | 8 +- .../common/extHostDocumentContentProviders.ts | 20 +- .../api/common/extHostDocumentData.ts | 18 +- .../common/extHostDocumentSaveParticipant.ts | 24 +- .../workbench/api/common/extHostDocuments.ts | 22 +- .../api/common/extHostDocumentsAndEditors.ts | 30 +- .../workbench/api/common/extHostEditorTabs.ts | 18 +- .../workbench/api/common/extHostEmbedding.ts | 10 +- .../api/common/extHostEmbeddingVector.ts | 6 +- .../api/common/extHostExtensionActivator.ts | 14 +- .../api/common/extHostExtensionService.ts | 84 +- .../workbench/api/common/extHostFileSystem.ts | 28 +- .../api/common/extHostFileSystemConsumer.ts | 24 +- .../common/extHostFileSystemEventService.ts | 125 +- .../api/common/extHostFileSystemInfo.ts | 12 +- .../api/common/extHostInitDataService.ts | 4 +- .../api/common/extHostInteractive.ts | 12 +- .../api/common/extHostLabelService.ts | 6 +- .../api/common/extHostLanguageFeatures.ts | 117 +- .../api/common/extHostLanguageModelTools.ts | 87 +- .../api/common/extHostLanguageModels.ts | 134 +- .../workbench/api/common/extHostLanguages.ts | 22 +- .../api/common/extHostLocalizationService.ts | 18 +- .../workbench/api/common/extHostLogService.ts | 8 +- .../api/common/extHostLoggerService.ts | 12 +- .../api/common/extHostManagedSockets.ts | 10 +- src/vs/workbench/api/common/extHostMemento.ts | 8 +- .../api/common/extHostMessageService.ts | 10 +- .../workbench/api/common/extHostNotebook.ts | 79 +- .../api/common/extHostNotebookDocument.ts | 16 +- .../extHostNotebookDocumentSaveParticipant.ts | 22 +- .../api/common/extHostNotebookDocuments.ts | 12 +- .../api/common/extHostNotebookEditor.ts | 33 +- .../api/common/extHostNotebookEditors.ts | 10 +- .../api/common/extHostNotebookKernels.ts | 44 +- .../api/common/extHostNotebookRenderers.ts | 10 +- src/vs/workbench/api/common/extHostOutput.ts | 32 +- .../common/extHostProfileContentHandler.ts | 16 +- .../workbench/api/common/extHostProgress.ts | 14 +- .../workbench/api/common/extHostQuickDiff.ts | 12 +- .../workbench/api/common/extHostQuickOpen.ts | 30 +- .../api/common/extHostRequireInterceptor.ts | 26 +- .../workbench/api/common/extHostRpcService.ts | 4 +- src/vs/workbench/api/common/extHostSCM.ts | 112 +- src/vs/workbench/api/common/extHostSearch.ts | 36 +- .../api/common/extHostSecretState.ts | 8 +- src/vs/workbench/api/common/extHostSecrets.ts | 8 +- src/vs/workbench/api/common/extHostShare.ts | 10 +- src/vs/workbench/api/common/extHostSpeech.ts | 8 +- .../workbench/api/common/extHostStatusBar.ts | 16 +- src/vs/workbench/api/common/extHostStorage.ts | 12 +- .../api/common/extHostStoragePaths.ts | 14 +- src/vs/workbench/api/common/extHostTask.ts | 44 +- .../workbench/api/common/extHostTelemetry.ts | 28 +- .../api/common/extHostTerminalService.ts | 46 +- .../common/extHostTerminalShellIntegration.ts | 18 +- .../workbench/api/common/extHostTestItem.ts | 16 +- src/vs/workbench/api/common/extHostTesting.ts | 54 +- .../api/common/extHostTestingPrivateApi.ts | 2 +- .../workbench/api/common/extHostTextEditor.ts | 24 +- .../api/common/extHostTextEditors.ts | 18 +- src/vs/workbench/api/common/extHostTheming.ts | 8 +- .../workbench/api/common/extHostTimeline.ts | 24 +- .../workbench/api/common/extHostTreeViews.ts | 40 +- .../api/common/extHostTunnelService.ts | 32 +- .../api/common/extHostTypeConverters.ts | 200 +- src/vs/workbench/api/common/extHostTypes.ts | 43 +- .../workbench/api/common/extHostUriOpener.ts | 14 +- .../common/extHostUriTransformerService.ts | 6 +- src/vs/workbench/api/common/extHostUrls.ts | 10 +- .../common/extHostVariableResolverService.ts | 28 +- src/vs/workbench/api/common/extHostWebview.ts | 30 +- .../api/common/extHostWebviewMessaging.ts | 4 +- .../api/common/extHostWebviewPanels.ts | 22 +- .../api/common/extHostWebviewView.ts | 16 +- src/vs/workbench/api/common/extHostWindow.ts | 14 +- .../workbench/api/common/extHostWorkspace.ts | 109 +- .../workbench/api/common/extensionHostMain.ts | 40 +- .../common/jsonValidationExtensionPoint.ts | 20 +- .../api/common/shared/dataTransferCache.ts | 6 +- src/vs/workbench/api/common/shared/tasks.ts | 6 +- .../api/node/extHost.node.services.ts | 46 +- src/vs/workbench/api/node/extHostCLIServer.ts | 12 +- .../api/node/extHostConsoleForwarder.ts | 8 +- .../workbench/api/node/extHostDebugService.ts | 106 +- .../api/node/extHostDiskFileSystemProvider.ts | 12 +- .../api/node/extHostDownloadService.ts | 14 +- .../api/node/extHostExtensionService.ts | 52 +- .../api/node/extHostLoggerService.ts | 12 +- src/vs/workbench/api/node/extHostSearch.ts | 32 +- .../workbench/api/node/extHostStoragePaths.ts | 16 +- src/vs/workbench/api/node/extHostTask.ts | 38 +- .../api/node/extHostTerminalService.ts | 8 +- .../api/node/extHostTunnelService.ts | 38 +- .../node/extHostVariableResolverService.ts | 2 +- .../api/node/extensionHostProcess.ts | 53 +- src/vs/workbench/api/node/proxyResolver.ts | 175 +- src/vs/workbench/api/node/uriTransformer.ts | 2 +- .../api/test/browser/extHost.api.impl.test.ts | 8 +- .../test/browser/extHostApiCommands.test.ts | 118 +- .../extHostAuthentication.integrationTest.ts | 54 +- .../api/test/browser/extHostBulkEdits.test.ts | 22 +- .../api/test/browser/extHostCommands.test.ts | 16 +- .../test/browser/extHostConfiguration.test.ts | 32 +- .../test/browser/extHostDecorations.test.ts | 20 +- .../test/browser/extHostDiagnostics.test.ts | 28 +- .../extHostDocumentContentProvider.test.ts | 20 +- .../test/browser/extHostDocumentData.test.ts | 20 +- .../extHostDocumentSaveParticipant.test.ts | 26 +- .../extHostDocumentsAndEditors.test.ts | 10 +- .../test/browser/extHostEditorTabs.test.ts | 14 +- .../extHostFileSystemEventService.test.ts | 12 +- .../browser/extHostLanguageFeatures.test.ts | 102 +- .../browser/extHostMessagerService.test.ts | 20 +- .../api/test/browser/extHostNotebook.test.ts | 54 +- .../browser/extHostNotebookKernel.test.ts | 57 +- .../api/test/browser/extHostTelemetry.test.ts | 20 +- .../api/test/browser/extHostTesting.test.ts | 46 +- .../test/browser/extHostTextEditor.test.ts | 20 +- .../api/test/browser/extHostTreeViews.test.ts | 26 +- .../test/browser/extHostTypeConverter.test.ts | 12 +- .../api/test/browser/extHostTypes.test.ts | 16 +- .../api/test/browser/extHostWebview.test.ts | 32 +- .../api/test/browser/extHostWorkspace.test.ts | 937 ++- .../test/browser/mainThreadBulkEdits.test.ts | 18 +- .../test/browser/mainThreadCommands.test.ts | 12 +- .../browser/mainThreadConfiguration.test.ts | 20 +- .../browser/mainThreadDiagnostics.test.ts | 22 +- ...mainThreadDocumentContentProviders.test.ts | 18 +- .../test/browser/mainThreadDocuments.test.ts | 10 +- .../mainThreadDocumentsAndEditors.test.ts | 64 +- .../test/browser/mainThreadEditors.test.ts | 110 +- .../browser/mainThreadManagedSockets.test.ts | 20 +- .../test/browser/mainThreadTreeViews.test.ts | 34 +- .../test/browser/mainThreadWorkspace.test.ts | 38 +- .../common/extHostExtensionActivator.test.ts | 18 +- .../api/test/common/extensionHostMain.test.ts | 34 +- .../api/test/common/testRPCProtocol.ts | 14 +- .../api/test/node/extHostSearch.test.ts | 82 +- .../test/node/extHostTunnelService.test.ts | 2 +- .../api/worker/extHost.worker.services.ts | 14 +- .../api/worker/extHostConsoleForwarder.ts | 6 +- .../api/worker/extHostExtensionService.ts | 18 +- .../api/worker/extensionHostWorker.esm.ts | 2 +- .../api/worker/extensionHostWorker.ts | 28 +- src/vs/workbench/browser/actions.ts | 12 +- .../browser/actions/developerActions.ts | 74 +- .../workbench/browser/actions/helpActions.ts | 48 +- .../browser/actions/layoutActions.ts | 58 +- .../workbench/browser/actions/listCommands.ts | 40 +- .../browser/actions/navigationActions.ts | 32 +- .../browser/actions/quickAccessActions.ts | 24 +- .../browser/actions/textInputActions.ts | 24 +- .../actions/widgetNavigationCommands.ts | 18 +- .../browser/actions/windowActions.ts | 64 +- .../browser/actions/workspaceActions.ts | 40 +- .../browser/actions/workspaceCommands.ts | 44 +- src/vs/workbench/browser/codeeditor.ts | 38 +- src/vs/workbench/browser/composite.ts | 30 +- src/vs/workbench/browser/contextkeys.ts | 46 +- src/vs/workbench/browser/dnd.ts | 68 +- src/vs/workbench/browser/editor.ts | 34 +- src/vs/workbench/browser/labels.ts | 46 +- src/vs/workbench/browser/layout.ts | 102 +- src/vs/workbench/browser/panecomposite.ts | 40 +- src/vs/workbench/browser/part.ts | 20 +- .../parts/activitybar/activitybarPart.ts | 72 +- .../activitybar/media/activityaction.css | 17 - .../parts/auxiliarybar/auxiliaryBarActions.ts | 26 +- .../parts/auxiliarybar/auxiliaryBarPart.ts | 66 +- .../browser/parts/banner/bannerPart.ts | 50 +- .../workbench/browser/parts/compositeBar.ts | 167 +- .../browser/parts/compositeBarActions.ts | 83 +- .../workbench/browser/parts/compositePart.ts | 66 +- .../parts/dialogs/dialog.web.contribution.ts | 26 +- .../browser/parts/dialogs/dialogHandler.ts | 34 +- .../parts/editor/auxiliaryEditorPart.ts | 48 +- .../browser/parts/editor/binaryDiffEditor.ts | 24 +- .../browser/parts/editor/binaryEditor.ts | 22 +- .../browser/parts/editor/breadcrumbs.ts | 22 +- .../parts/editor/breadcrumbsControl.ts | 76 +- .../browser/parts/editor/breadcrumbsModel.ts | 26 +- .../browser/parts/editor/breadcrumbsPicker.ts | 56 +- .../parts/editor/diffEditorCommands.ts | 26 +- .../parts/editor/editor.contribution.ts | 78 +- .../workbench/browser/parts/editor/editor.ts | 32 +- .../browser/parts/editor/editorActions.ts | 73 +- .../browser/parts/editor/editorAutoSave.ts | 30 +- .../browser/parts/editor/editorCommands.ts | 74 +- .../parts/editor/editorCommandsContext.ts | 16 +- .../parts/editor/editorConfiguration.ts | 26 +- .../browser/parts/editor/editorDropTarget.ts | 48 +- .../browser/parts/editor/editorGroupView.ts | 112 +- .../parts/editor/editorGroupWatermark.ts | 24 +- .../browser/parts/editor/editorPane.ts | 44 +- .../browser/parts/editor/editorPanes.ts | 83 +- .../browser/parts/editor/editorPart.ts | 66 +- .../browser/parts/editor/editorParts.ts | 46 +- .../browser/parts/editor/editorPlaceholder.ts | 54 +- .../browser/parts/editor/editorQuickAccess.ts | 30 +- .../browser/parts/editor/editorStatus.ts | 106 +- .../browser/parts/editor/editorTabsControl.ts | 103 +- .../parts/editor/editorTitleControl.ts | 30 +- .../parts/editor/editorWithViewState.ts | 28 +- .../browser/parts/editor/editorsObserver.ts | 26 +- .../parts/editor/media/editorplaceholder.css | 2 +- .../parts/editor/media/editortabscontrol.css | 6 +- .../parts/editor/multiEditorTabsControl.ts | 110 +- .../parts/editor/multiRowEditorTabsControl.ts | 22 +- .../parts/editor/noEditorTabsControl.ts | 24 +- .../browser/parts/editor/sideBySideEditor.ts | 58 +- .../parts/editor/singleEditorTabsControl.ts | 32 +- .../browser/parts/editor/textCodeEditor.ts | 28 +- .../browser/parts/editor/textDiffEditor.ts | 64 +- .../browser/parts/editor/textEditor.ts | 52 +- .../parts/editor/textResourceEditor.ts | 50 +- .../browser/parts/globalCompositeBar.ts | 85 +- .../browser/parts/media/paneCompositePart.css | 4 + .../notificationAccessibleView.ts | 26 +- .../notifications/notificationsActions.ts | 20 +- .../notifications/notificationsAlerts.ts | 14 +- .../notifications/notificationsCenter.ts | 52 +- .../notifications/notificationsCommands.ts | 41 +- .../parts/notifications/notificationsList.ts | 36 +- .../notifications/notificationsStatus.ts | 12 +- .../notifications/notificationsTelemetry.ts | 10 +- .../notifications/notificationsToasts.ts | 46 +- .../notifications/notificationsViewer.ts | 58 +- .../browser/parts/paneCompositeBar.ts | 56 +- .../browser/parts/paneCompositePart.ts | 108 +- .../browser/parts/paneCompositePartService.ts | 28 +- .../browser/parts/panel/panelActions.ts | 34 +- .../browser/parts/panel/panelPart.ts | 64 +- .../browser/parts/sidebar/sidebarActions.ts | 20 +- .../browser/parts/sidebar/sidebarPart.ts | 58 +- .../parts/statusbar/statusbarActions.ts | 26 +- .../browser/parts/statusbar/statusbarItem.ts | 46 +- .../browser/parts/statusbar/statusbarModel.ts | 10 +- .../browser/parts/statusbar/statusbarPart.ts | 62 +- .../parts/titlebar/commandCenterControl.ts | 40 +- .../parts/titlebar/media/titlebarpart.css | 57 +- .../browser/parts/titlebar/menubarControl.ts | 135 +- .../browser/parts/titlebar/titlebarActions.ts | 22 +- .../browser/parts/titlebar/titlebarPart.ts | 148 +- .../browser/parts/titlebar/windowTitle.ts | 52 +- .../workbench/browser/parts/views/checkbox.ts | 22 +- .../workbench/browser/parts/views/treeView.ts | 146 +- .../browser/parts/views/viewFilter.ts | 46 +- .../workbench/browser/parts/views/viewPane.ts | 111 +- .../browser/parts/views/viewPaneContainer.ts | 81 +- .../browser/parts/views/viewsViewlet.ts | 28 +- src/vs/workbench/browser/quickaccess.ts | 26 +- src/vs/workbench/browser/style.ts | 16 +- src/vs/workbench/browser/web.api.ts | 32 +- src/vs/workbench/browser/web.factory.ts | 24 +- src/vs/workbench/browser/web.main.ts | 189 +- src/vs/workbench/browser/window.ts | 56 +- .../browser/workbench.contribution.ts | 25 +- src/vs/workbench/browser/workbench.ts | 96 +- src/vs/workbench/common/comments.ts | 4 +- src/vs/workbench/common/component.ts | 10 +- src/vs/workbench/common/composite.ts | 2 +- src/vs/workbench/common/configuration.ts | 28 +- src/vs/workbench/common/contextkeys.ts | 26 +- src/vs/workbench/common/contributions.ts | 20 +- src/vs/workbench/common/dialogs.ts | 8 +- src/vs/workbench/common/editor.ts | 50 +- .../common/editor/binaryEditorModel.ts | 8 +- .../common/editor/diffEditorInput.ts | 24 +- .../common/editor/diffEditorModel.ts | 4 +- .../common/editor/editorGroupModel.ts | 18 +- src/vs/workbench/common/editor/editorInput.ts | 19 +- src/vs/workbench/common/editor/editorModel.ts | 4 +- .../workbench/common/editor/editorOptions.ts | 8 +- .../common/editor/filteredEditorGroupModel.ts | 10 +- .../common/editor/resourceEditorInput.ts | 22 +- .../common/editor/sideBySideEditorInput.ts | 18 +- .../common/editor/textDiffEditorModel.ts | 8 +- .../common/editor/textEditorModel.ts | 28 +- .../common/editor/textResourceEditorInput.ts | 34 +- .../common/editor/textResourceEditorModel.ts | 12 +- src/vs/workbench/common/memento.ts | 10 +- src/vs/workbench/common/notifications.ts | 18 +- src/vs/workbench/common/panecomposite.ts | 4 +- src/vs/workbench/common/resources.ts | 24 +- src/vs/workbench/common/theme.ts | 10 +- src/vs/workbench/common/views.ts | 46 +- .../browser/accessibility.contribution.ts | 32 +- .../browser/accessibilityConfiguration.ts | 30 +- .../browser/accessibilityStatus.ts | 20 +- .../accessibility/browser/accessibleView.ts | 86 +- .../browser/accessibleViewActions.ts | 24 +- .../browser/accessibleViewContributions.ts | 12 +- .../accessibleViewKeybindingResolver.ts | 6 +- .../browser/editorAccessibilityHelp.ts | 32 +- .../extensionAccesibilityHelp.contribution.ts | 18 +- .../unfocusedViewDimmingContribution.ts | 14 +- .../accessibilitySignal.contribution.ts | 16 +- ...accessibilitySignalDebuggerContribution.ts | 10 +- .../accessibilitySignals/browser/commands.ts | 22 +- .../editorTextPropertySignalsContribution.ts | 31 +- .../browser/openDiffEditorAnnouncement.ts | 18 +- .../browser/saveAccessibilitySignal.ts | 10 +- .../accountsEntitlements.contribution.ts | 53 +- ...ageAccountPreferencesForExtensionAction.ts | 152 + ...manageTrustedExtensionsForAccountAction.ts | 37 +- .../browser/actions/signOutOfAccountAction.ts | 16 +- .../browser/authentication.contribution.ts | 54 +- ...ketPairColorizer2Telemetry.contribution.ts | 16 +- .../contrib/bulkEdit/browser/bulkCellEdits.ts | 26 +- .../bulkEdit/browser/bulkEditService.ts | 50 +- .../contrib/bulkEdit/browser/bulkFileEdits.ts | 30 +- .../contrib/bulkEdit/browser/bulkTextEdits.ts | 38 +- .../contrib/bulkEdit/browser/conflicts.ts | 20 +- .../browser/preview/bulkEdit.contribution.ts | 52 +- .../bulkEdit/browser/preview/bulkEditPane.ts | 76 +- .../browser/preview/bulkEditPreview.ts | 64 +- .../bulkEdit/browser/preview/bulkEditTree.ts | 54 +- .../test/browser/bulkCellEdits.test.ts | 22 +- .../test/browser/bulkEditPreview.test.ts | 24 +- .../browser/callHierarchy.contribution.ts | 46 +- .../browser/callHierarchyPeek.ts | 62 +- .../browser/callHierarchyTree.ts | 24 +- .../callHierarchy/common/callHierarchy.ts | 28 +- .../browser/actions/chatAccessibilityHelp.ts | 26 +- .../chat/browser/actions/chatActions.ts | 202 +- .../contrib/chat/browser/actions/chatClear.ts | 8 +- .../chat/browser/actions/chatClearActions.ts | 32 +- .../browser/actions/chatCodeblockActions.ts | 436 +- .../browser/actions/chatContextActions.ts | 185 +- .../chat/browser/actions/chatCopyActions.ts | 16 +- .../browser/actions/chatDeveloperActions.ts | 12 +- .../browser/actions/chatExecuteActions.ts | 40 +- .../browser/actions/chatFileTreeActions.ts | 18 +- .../chat/browser/actions/chatImportExport.ts | 30 +- .../chat/browser/actions/chatMoveActions.ts | 37 +- .../browser/actions/chatQuickInputActions.ts | 29 +- .../chat/browser/actions/chatTitleActions.ts | 84 +- .../browser/actions/codeBlockOperations.ts | 493 ++ .../contrib/chat/browser/chat.contribution.ts | 139 +- src/vs/workbench/contrib/chat/browser/chat.ts | 55 +- .../chat/browser/chatAccessibilityProvider.ts | 20 +- .../chat/browser/chatAccessibilityService.ts | 26 +- .../contrib/chat/browser/chatAgentHover.ts | 32 +- .../chatAttachmentsContentPart.ts | 96 +- .../chatCodeCitationContentPart.ts | 20 +- .../chatContentParts/chatCollections.ts | 2 +- .../chatCommandContentPart.ts | 20 +- .../chatConfirmationContentPart.ts | 18 +- .../chatConfirmationWidget.ts | 22 +- .../chatContentParts/chatContentParts.ts | 8 +- .../chatMarkdownContentPart.ts | 85 +- .../chatProgressContentPart.ts | 29 +- .../chatReferencesContentPart.ts | 130 +- .../chatContentParts/chatTaskContentPart.ts | 22 +- .../chatTextEditContentPart.ts | 56 +- .../chatToolInvocationPart.ts | 100 + .../chatContentParts/chatTreeContentPart.ts | 46 +- .../chatWarningContentPart.ts | 16 +- .../contrib/chat/browser/chatDragAndDrop.ts | 260 + .../chat/browser/chatEditingService.ts | 732 ++ .../contrib/chat/browser/chatEditor.ts | 49 +- .../contrib/chat/browser/chatEditorInput.ts | 32 +- .../contrib/chat/browser/chatFollowups.ts | 16 +- .../chat/browser/chatGettingStarted.ts | 139 + .../contrib/chat/browser/chatImagePaste.ts | 82 + .../chat/browser/chatInlineAnchorWidget.ts | 293 + .../contrib/chat/browser/chatInputPart.ts | 636 +- .../contrib/chat/browser/chatListRenderer.ts | 272 +- .../chatMarkdownDecorationsRenderer.ts | 79 +- .../chat/browser/chatMarkdownRenderer.ts | 37 +- .../contrib/chat/browser/chatOptions.ts | 14 +- .../browser/chatParticipantContributions.ts | 176 +- .../chat/browser/chatPasteProviders.ts | 37 + .../contrib/chat/browser/chatQuick.ts | 44 +- .../browser/chatResponseAccessibleView.ts | 34 +- .../contrib/chat/browser/chatVariables.ts | 47 +- .../contrib/chat/browser/chatViewPane.ts | 84 +- .../contrib/chat/browser/chatWidget.ts | 231 +- .../codeBlockContextProviderService.ts | 4 +- .../contrib/chat/browser/codeBlockPart.css | 1 + .../contrib/chat/browser/codeBlockPart.ts | 156 +- .../browser/contrib/chatContextAttachments.ts | 8 +- .../browser/contrib/chatDynamicVariables.ts | 40 +- .../browser/contrib/chatInputCompletions.ts | 247 +- .../browser/contrib/chatInputEditorContrib.ts | 30 +- .../browser/contrib/chatInputEditorHover.ts | 26 +- .../browser/contrib/editorHoverWrapper.ts | 10 +- .../contrib/chat/browser/media/chat.css | 317 +- .../chat/browser/media/chatAgentHover.css | 2 + .../browser/media/chatInlineAnchorWidget.css | 46 + .../contrib/chat/common/annotations.ts | 55 +- .../contrib/chat/common/chatAgents.ts | 91 +- .../chat/common/chatCodeMapperService.ts | 80 + .../contrib/chat/common/chatColors.ts | 6 +- .../contrib/chat/common/chatContextKeys.ts | 16 +- .../contrib/chat/common/chatEditingService.ts | 59 + .../contrib/chat/common/chatModel.ts | 199 +- .../contrib/chat/common/chatParserTypes.ts | 26 +- .../common/chatParticipantContribTypes.ts | 5 +- .../chatProgressTypes/chatToolInvocation.ts | 70 + .../contrib/chat/common/chatRequestParser.ts | 20 +- .../contrib/chat/common/chatService.ts | 80 +- .../contrib/chat/common/chatServiceImpl.ts | 107 +- .../chat/common/chatServiceTelemetry.ts | 36 +- .../contrib/chat/common/chatSlashCommands.ts | 18 +- .../contrib/chat/common/chatVariables.ts | 24 +- .../contrib/chat/common/chatViewModel.ts | 51 +- .../chat/common/chatWidgetHistoryService.ts | 12 +- .../chat/common/codeBlockModelCollection.ts | 51 +- .../contrib/chat/common/languageModelStats.ts | 16 +- .../chat/common/languageModelToolsService.ts | 107 +- .../contrib/chat/common/languageModels.ts | 41 +- .../tools/languageModelToolsContribution.ts | 36 +- .../contrib/chat/common/voiceChatService.ts | 22 +- .../actions/voiceChatActions.ts | 219 +- .../electron-sandbox/chat.contribution.ts | 6 +- .../test/browser/chatMarkdownRenderer.test.ts | 14 +- .../chat/test/browser/chatVariables.test.ts | 40 +- .../browser/languageModelToolsService.test.ts | 51 +- .../chat/test/browser/mockChatWidget.ts | 4 +- .../ChatService_can_deserialize.0.snap | 1 - .../ChatService_can_serialize.0.snap | 1 - .../ChatService_can_serialize.1.snap | 1 - .../ChatService_sendRequest_fails.0.snap | 1 - .../chat/test/common/annotations.test.ts | 10 +- .../chat/test/common/chatAgents.test.ts | 10 +- .../chat/test/common/chatModel.test.ts | 83 +- .../test/common/chatRequestParser.test.ts | 36 +- .../chat/test/common/chatService.test.ts | 58 +- .../chat/test/common/chatWordCounter.test.ts | 4 +- .../chat/test/common/languageModels.test.ts | 22 +- .../chat/test/common/mockChatService.ts | 14 +- .../chat/test/common/mockChatVariables.ts | 12 +- .../common/mockLanguageModelToolsService.ts | 8 +- .../chat/test/common/voiceChatService.test.ts | 31 +- .../electron-sandbox/voiceChatActions.test.ts | 4 +- .../browser/codeActions.contribution.ts | 20 +- .../browser/codeActionsContribution.ts | 30 +- .../browser/documentationContribution.ts | 26 +- .../common/codeActionsExtensionPoint.ts | 18 +- .../common/documentationExtensionPoint.ts | 6 +- .../browser/accessibility/accessibility.ts | 22 +- .../browser/codeEditor.contribution.ts | 42 +- .../browser/dictation/editorDictation.ts | 54 +- .../browser/diffEditorAccessibilityHelp.ts | 24 +- .../codeEditor/browser/diffEditorHelper.ts | 30 +- .../codeEditor/browser/editorFeatures.ts | 12 +- .../browser/editorLineNumberMenu.ts | 24 +- .../browser/editorSettingsMigration.ts | 6 +- .../emptyTextEditorHint.ts | 66 +- .../browser/find/simpleFindWidget.ts | 46 +- .../inspectEditorTokens.ts | 60 +- .../codeEditor/browser/inspectKeybindings.ts | 14 +- .../browser/largeFileOptimizations.ts | 16 +- .../codeEditor/browser/menuPreventer.ts | 10 +- .../browser/outline/documentSymbolsOutline.ts | 60 +- .../browser/outline/documentSymbolsTree.ts | 42 +- .../quickaccess/gotoLineQuickAccess.ts | 32 +- .../quickaccess/gotoSymbolQuickAccess.ts | 62 +- .../codeEditor/browser/saveParticipants.ts | 66 +- .../codeEditor/browser/simpleEditorOptions.ts | 29 +- .../suggestEnabledInput.ts | 70 +- .../browser/toggleColumnSelection.ts | 22 +- .../codeEditor/browser/toggleMinimap.ts | 12 +- .../browser/toggleMultiCursorModifier.ts | 20 +- .../browser/toggleRenderControlCharacter.ts | 12 +- .../browser/toggleRenderWhitespace.ts | 12 +- .../codeEditor/browser/toggleWordWrap.ts | 38 +- .../browser/workbenchEditorWorkerService.ts | 14 +- .../browser/workbenchReferenceSearch.ts | 18 +- .../languageConfigurationExtensionPoint.ts | 30 +- .../codeEditor.contribution.ts | 10 +- .../displayChangeRemeasureFonts.ts | 12 +- .../electron-sandbox/inputClipboardActions.ts | 8 +- .../electron-sandbox/selectionClipboard.ts | 38 +- .../sleepResumeRepaintMinimap.ts | 12 +- .../electron-sandbox/startDebugTextMate.ts | 36 +- .../test/browser/saveParticipant.test.ts | 24 +- .../codeEditor/test/node/autoindent.test.ts | 34 +- .../commands/common/commands.contribution.ts | 14 +- .../contrib/comments/browser/commentColors.ts | 12 +- .../comments/browser/commentFormActions.ts | 40 +- .../comments/browser/commentGlyphWidget.ts | 38 +- .../contrib/comments/browser/commentMenus.ts | 12 +- .../contrib/comments/browser/commentNode.ts | 98 +- .../contrib/comments/browser/commentReply.ts | 60 +- .../comments/browser/commentService.ts | 44 +- .../browser/commentThreadAdditionalActions.ts | 32 +- .../comments/browser/commentThreadBody.ts | 45 +- .../comments/browser/commentThreadHeader.ts | 40 +- .../browser/commentThreadRangeDecorator.ts | 14 +- .../comments/browser/commentThreadWidget.ts | 76 +- .../browser/commentThreadZoneWidget.ts | 81 +- .../comments/browser/comments.contribution.ts | 55 +- .../contrib/comments/browser/comments.ts | 6 +- .../comments/browser/commentsAccessibility.ts | 24 +- .../browser/commentsAccessibleView.ts | 119 +- .../comments/browser/commentsController.ts | 152 +- .../browser/commentsEditorContribution.ts | 168 +- .../comments/browser/commentsFilterOptions.ts | 4 +- .../browser/commentsInputContentProvider.ts | 26 +- .../contrib/comments/browser/commentsModel.ts | 14 +- .../comments/browser/commentsTreeViewer.ts | 80 +- .../contrib/comments/browser/commentsView.ts | 97 +- .../comments/browser/commentsViewActions.ts | 40 +- .../comments/browser/reactionsAction.ts | 10 +- .../comments/browser/simpleCommentEditor.ts | 68 +- .../contrib/comments/browser/timestamp.ts | 18 +- .../comments/common/commentCommandIds.ts | 3 + .../comments/common/commentContextKeys.ts | 12 +- .../contrib/comments/common/commentModel.ts | 6 +- .../test/browser/commentsView.test.ts | 35 +- .../configurationExportHelper.contribution.ts | 12 +- .../configurationExportHelper.ts | 18 +- .../browser/contextmenu.contribution.ts | 12 +- .../browser/customEditor.contribution.ts | 22 +- .../customEditor/browser/customEditorInput.ts | 58 +- .../browser/customEditorInputFactory.ts | 32 +- .../customEditor/browser/customEditors.ts | 50 +- .../common/contributedCustomEditors.ts | 22 +- .../customEditor/common/customEditor.ts | 20 +- .../common/customEditorModelManager.ts | 8 +- .../common/customTextEditorModel.ts | 36 +- .../customEditor/common/extensionPoint.ts | 22 +- .../contrib/debug/browser/baseDebugView.ts | 162 +- .../browser/breakpointEditorContribution.ts | 74 +- .../contrib/debug/browser/breakpointWidget.ts | 86 +- .../contrib/debug/browser/breakpointsView.ts | 284 +- .../browser/callStackEditorContribution.ts | 34 +- .../contrib/debug/browser/callStackView.ts | 96 +- .../contrib/debug/browser/callStackWidget.ts | 191 +- .../debug/browser/debug.contribution.ts | 120 +- .../debug/browser/debugANSIHandling.ts | 77 +- .../debug/browser/debugActionViewItems.ts | 48 +- .../debug/browser/debugAdapterManager.ts | 62 +- .../contrib/debug/browser/debugColors.ts | 14 +- .../contrib/debug/browser/debugCommands.ts | 76 +- .../browser/debugConfigurationManager.ts | 68 +- .../debug/browser/debugConsoleQuickAccess.ts | 20 +- .../debug/browser/debugEditorActions.ts | 58 +- .../debug/browser/debugEditorContribution.ts | 100 +- .../debug/browser/debugExpressionRenderer.ts | 193 + .../contrib/debug/browser/debugHover.ts | 90 +- .../contrib/debug/browser/debugIcons.ts | 6 +- .../contrib/debug/browser/debugMemory.ts | 16 +- .../contrib/debug/browser/debugProgress.ts | 12 +- .../contrib/debug/browser/debugQuickAccess.ts | 22 +- .../contrib/debug/browser/debugService.ts | 116 +- .../contrib/debug/browser/debugSession.ts | 91 +- .../debug/browser/debugSessionPicker.ts | 20 +- .../debug/browser/debugSettingMigration.ts | 14 +- .../contrib/debug/browser/debugStatus.ts | 14 +- .../contrib/debug/browser/debugTaskRunner.ts | 42 +- .../contrib/debug/browser/debugTitle.ts | 10 +- .../contrib/debug/browser/debugToolBar.ts | 77 +- .../contrib/debug/browser/debugViewlet.ts | 62 +- .../contrib/debug/browser/disassemblyView.ts | 80 +- .../contrib/debug/browser/exceptionWidget.ts | 34 +- .../browser/extensionHostDebugService.ts | 30 +- .../contrib/debug/browser/linkDetector.ts | 67 +- .../debug/browser/loadedScriptsView.ts | 82 +- .../debug/browser/media/callStackWidget.css | 12 +- .../browser/media/debug.contribution.css | 4 + .../contrib/debug/browser/rawDebugSession.ts | 36 +- .../workbench/contrib/debug/browser/repl.ts | 156 +- .../debug/browser/replAccessibilityHelp.ts | 18 +- .../debug/browser/replAccessibleView.ts | 22 +- .../contrib/debug/browser/replFilter.ts | 12 +- .../contrib/debug/browser/replViewer.ts | 110 +- .../browser/runAndDebugAccessibilityHelp.ts | 24 +- .../debug/browser/statusbarColorProvider.ts | 20 +- .../contrib/debug/browser/variablesView.ts | 119 +- .../debug/browser/watchExpressionsView.ts | 85 +- .../contrib/debug/browser/welcomeView.ts | 48 +- .../debug/common/abstractDebugAdapter.ts | 8 +- .../contrib/debug/common/breakpoints.ts | 4 +- .../workbench/contrib/debug/common/debug.ts | 55 +- .../common/debugAccessibilityAnnouncer.ts | 14 +- .../contrib/debug/common/debugCompoundRoot.ts | 2 +- .../debug/common/debugContentProvider.ts | 32 +- .../contrib/debug/common/debugContext.ts | 6 +- .../contrib/debug/common/debugLifecycle.ts | 14 +- .../contrib/debug/common/debugModel.ts | 76 +- .../contrib/debug/common/debugProtocol.d.ts | 11 +- .../contrib/debug/common/debugSchemas.ts | 22 +- .../contrib/debug/common/debugSource.ts | 26 +- .../contrib/debug/common/debugStorage.ts | 18 +- .../contrib/debug/common/debugTelemetry.ts | 6 +- .../contrib/debug/common/debugUtils.ts | 28 +- .../contrib/debug/common/debugViewModel.ts | 8 +- .../contrib/debug/common/debugVisualizers.ts | 35 +- .../contrib/debug/common/debugger.ts | 36 +- .../debug/common/disassemblyViewInput.ts | 10 +- .../debug/common/loadedScriptsPicker.ts | 26 +- .../common/replAccessibilityAnnouncer.ts | 10 +- .../contrib/debug/common/replModel.ts | 32 +- .../extensionHostDebugService.ts | 6 +- .../contrib/debug/node/debugAdapter.ts | 18 +- .../contrib/debug/node/telemetryApp.ts | 6 +- .../workbench/contrib/debug/node/terminals.ts | 4 +- .../debug/test/browser/baseDebugView.test.ts | 181 +- .../debug/test/browser/breakpoints.test.ts | 44 +- .../debug/test/browser/callStack.test.ts | 38 +- .../test/browser/debugANSIHandling.test.ts | 42 +- .../browser/debugConfigurationManager.test.ts | 36 +- .../debug/test/browser/debugHover.test.ts | 16 +- .../debug/test/browser/debugMemory.test.ts | 14 +- .../debug/test/browser/debugSession.test.ts | 4 +- .../debug/test/browser/debugSource.test.ts | 12 +- .../debug/test/browser/debugUtils.test.ts | 6 +- .../debug/test/browser/debugViewModel.test.ts | 16 +- .../debug/test/browser/linkDetector.test.ts | 18 +- .../debug/test/browser/mockDebugModel.ts | 14 +- .../test/browser/rawDebugSession.test.ts | 18 +- .../contrib/debug/test/browser/repl.test.ts | 28 +- .../debug/test/browser/variablesView.test.ts | 54 +- .../contrib/debug/test/browser/watch.test.ts | 6 +- .../test/browser/watchExpressionView.test.ts | 49 +- .../test/common/abstractDebugAdapter.test.ts | 6 +- .../debug/test/common/debugModel.test.ts | 16 +- .../contrib/debug/test/common/mockDebug.ts | 30 +- .../contrib/debug/test/node/debugger.test.ts | 20 +- .../test/node/streamDebugAdapter.test.ts | 10 +- .../contrib/debug/test/node/terminals.test.ts | 4 +- ...eprecatedExtensionMigrator.contribution.ts | 26 +- .../browser/editSessions.contribution.ts | 136 +- .../browser/editSessionsFileSystemProvider.ts | 12 +- .../browser/editSessionsStorageService.ts | 44 +- .../editSessions/browser/editSessionsViews.ts | 40 +- .../editSessions/common/editSessions.ts | 24 +- .../common/editSessionsLogService.ts | 10 +- .../common/editSessionsStorageClient.ts | 2 +- .../editSessions/common/workspaceStateSync.ts | 32 +- .../test/browser/editSessions.test.ts | 90 +- .../emergencyAlert.contribution.ts | 93 + .../browser/actions/expandAbbreviation.ts | 16 +- .../emmet/browser/emmet.contribution.ts | 2 +- .../contrib/emmet/browser/emmetActions.ts | 10 +- .../emmet/test/browser/emmetAction.test.ts | 10 +- .../encryption.contribution.ts | 18 +- .../abstractRuntimeExtensionsEditor.ts | 105 +- .../browser/browserRuntimeExtensionsEditor.ts | 18 +- .../browser/configBasedRecommendations.ts | 12 +- .../browser/deprecatedExtensionsChecker.ts | 30 +- .../browser/exeBasedRecommendations.ts | 8 +- .../extensions/browser/extensionEditor.ts | 150 +- ...mentWorkspaceTrustTransitionParticipant.ts | 16 +- .../browser/extensionFeaturesTab.ts | 70 +- ...ensionRecommendationNotificationService.ts | 62 +- .../browser/extensionRecommendations.ts | 6 +- .../extensionRecommendationsService.ts | 52 +- .../browser/extensions.contribution.ts | 260 +- .../browser/extensions.web.contribution.ts | 14 +- .../extensions/browser/extensionsActions.ts | 308 +- .../browser/extensionsActivationProgress.ts | 16 +- .../extensionsCompletionItemsProvider.ts | 22 +- .../browser/extensionsDependencyChecker.ts | 26 +- .../extensions/browser/extensionsIcons.ts | 6 +- .../extensions/browser/extensionsList.ts | 46 +- .../browser/extensionsQuickAccess.ts | 41 +- .../extensions/browser/extensionsViewer.ts | 48 +- .../extensions/browser/extensionsViewlet.ts | 225 +- .../extensions/browser/extensionsViews.ts | 141 +- .../extensions/browser/extensionsWidgets.ts | 87 +- .../browser/extensionsWorkbenchService.ts | 247 +- .../browser/fileBasedRecommendations.ts | 50 +- .../browser/keymapRecommendations.ts | 6 +- .../browser/languageRecommendations.ts | 6 +- .../browser/media/extensionsViewlet.css | 63 +- .../browser/remoteRecommendations.ts | 8 +- ...upportedExtensionsMigrationContribution.ts | 12 +- .../extensions/browser/webRecommendations.ts | 10 +- .../browser/workspaceRecommendations.ts | 28 +- .../extensions/common/extensionQuery.ts | 2 +- .../contrib/extensions/common/extensions.ts | 48 +- .../common/extensionsFileTemplate.ts | 6 +- .../extensions/common/extensionsInput.ts | 24 +- .../extensions/common/extensionsUtils.ts | 24 +- .../common/reportExtensionIssueAction.ts | 8 +- .../common/runtimeExtensionsInput.ts | 14 +- .../debugExtensionHostAction.ts | 121 +- .../extensionProfileService.ts | 43 +- .../extensions.contribution.ts | 124 +- .../electron-sandbox/extensionsActions.ts | 20 +- .../extensionsAutoProfiler.ts | 58 +- .../electron-sandbox/extensionsSlowActions.ts | 36 +- .../electron-sandbox/remoteExtensionsInit.ts | 42 +- .../runtimeExtensionsEditor.ts | 237 +- .../test/common/extensionQuery.test.ts | 2 +- .../test/electron-sandbox/extension.test.ts | 20 +- .../extensionRecommendationsService.test.ts | 118 +- .../extensionsActions.test.ts | 117 +- .../electron-sandbox/extensionsViews.test.ts | 95 +- .../extensionsWorkbenchService.test.ts | 109 +- .../browser/externalTerminal.contribution.ts | 48 +- .../externalTerminal.contribution.ts | 32 +- .../externalUriOpener/common/configuration.ts | 10 +- .../common/contributedOpeners.ts | 10 +- .../common/externalUriOpener.contribution.ts | 10 +- .../common/externalUriOpenerService.ts | 35 +- .../common/externalUriOpenerService.test.ts | 22 +- .../files/browser/editors/binaryFileEditor.ts | 26 +- .../browser/editors/fileEditorHandler.ts | 24 +- .../files/browser/editors/fileEditorInput.ts | 46 +- .../files/browser/editors/textFileEditor.ts | 68 +- .../browser/editors/textFileEditorTracker.ts | 32 +- .../editors/textFileSaveErrorHandler.ts | 56 +- .../files/browser/explorerFileContrib.ts | 10 +- .../contrib/files/browser/explorerService.ts | 48 +- .../contrib/files/browser/explorerViewlet.ts | 70 +- .../files/browser/fileActions.contribution.ts | 110 +- .../contrib/files/browser/fileActions.ts | 114 +- .../contrib/files/browser/fileCommands.ts | 102 +- .../contrib/files/browser/fileConstants.ts | 4 +- .../contrib/files/browser/fileImportExport.ts | 66 +- .../files/browser/files.contribution.ts | 66 +- .../workbench/contrib/files/browser/files.ts | 30 +- .../contrib/files/browser/views/emptyView.ts | 40 +- .../views/explorerDecorationsProvider.ts | 22 +- .../files/browser/views/explorerView.ts | 223 +- .../files/browser/views/explorerViewer.ts | 151 +- .../files/browser/views/openEditorsView.ts | 107 +- .../contrib/files/browser/workspaceWatcher.ts | 26 +- .../files/common/dirtyFilesIndicator.ts | 16 +- .../contrib/files/common/explorerModel.ts | 38 +- .../workbench/contrib/files/common/files.ts | 38 +- .../fileActions.contribution.ts | 49 +- .../files/electron-sandbox/fileCommands.ts | 10 +- .../files/test/browser/editorAutoSave.test.ts | 40 +- .../browser/explorerFileNestingTrie.test.ts | 4 +- .../files/test/browser/explorerModel.test.ts | 18 +- .../files/test/browser/explorerView.test.ts | 24 +- .../files/test/browser/fileActions.test.ts | 4 +- .../test/browser/fileEditorInput.test.ts | 36 +- .../test/browser/fileOnDiskProvider.test.ts | 14 +- .../browser/textFileEditorTracker.test.ts | 50 +- .../folding/browser/folding.contribution.ts | 26 +- .../format/browser/format.contribution.ts | 6 +- .../format/browser/formatActionsMultiple.ts | 62 +- .../format/browser/formatActionsNone.ts | 37 +- .../contrib/format/browser/formatModified.ts | 32 +- .../browser/inlayHintsAccessibilty.ts | 34 +- .../browser/inlineChat.contribution.ts | 50 +- .../browser/inlineChatAccessibilityHelp.ts | 16 +- .../browser/inlineChatAccessibleView.ts | 20 +- .../inlineChat/browser/inlineChatActions.ts | 58 +- .../browser/inlineChatContentWidget.ts | 222 - .../browser/inlineChatController.ts | 249 +- .../browser/inlineChatCurrentLine.ts | 32 +- .../inlineChat/browser/inlineChatNotebook.ts | 24 +- .../browser/inlineChatSavingService.ts | 4 +- .../browser/inlineChatSavingServiceImpl.ts | 54 +- .../inlineChat/browser/inlineChatSession.ts | 120 +- .../browser/inlineChatSessionService.ts | 20 +- .../browser/inlineChatSessionServiceImpl.ts | 58 +- .../browser/inlineChatStrategies.ts | 171 +- .../inlineChat/browser/inlineChatWidget.ts | 112 +- .../browser/inlineChatZoneWidget.ts | 113 +- .../inlineChat/browser/media/inlineChat.css | 55 +- .../browser/media/inlineChatContentWidget.css | 33 - .../contrib/inlineChat/browser/utils.ts | 16 +- .../contrib/inlineChat/common/inlineChat.ts | 21 +- .../inlineChat.contribution.ts | 4 +- .../electron-sandbox/inlineChatActions.ts | 36 +- ..._should_be_easier_to_undo_esc__7537.1.snap | 13 + ..._should_be_easier_to_undo_esc__7537.2.snap | 6 + .../test/browser/inlineChatController.test.ts | 173 +- .../test/browser/inlineChatSession.test.ts | 202 +- .../test/browser/inlineChatStrategies.test.ts | 8 +- .../test/browser/testWorkerService.ts | 24 +- .../browser/interactive.contribution.ts | 231 +- .../interactive/browser/interactiveCommon.ts | 2 +- .../browser/interactiveDocumentService.ts | 8 +- .../interactive/browser/interactiveEditor.css | 4 +- .../interactive/browser/interactiveEditor.ts | 156 +- .../browser/interactiveEditorInput.ts | 34 +- .../browser/interactiveHistoryService.ts | 10 +- .../browser/replInputHintContentWidget.ts | 36 +- .../issue/browser/baseIssueReporterService.ts | 44 +- .../issue/browser/issue.contribution.ts | 28 +- .../contrib/issue/browser/issueFormService.ts | 36 +- .../contrib/issue/browser/issueQuickAccess.ts | 26 +- .../issue/browser/issueReporterModel.ts | 8 +- .../issue/browser/issueReporterPage.ts | 4 +- .../issue/browser/issueReporterService.ts | 10 +- .../contrib/issue/browser/issueService.ts | 40 +- .../issue/browser/issueTroubleshoot.ts | 52 +- .../browser/test/testReporterModel.test.ts | 340 - .../issue/common/issue.contribution.ts | 20 +- .../workbench/contrib/issue/common/issue.ts | 8 +- .../contrib/issue/common/issueReporterUtil.ts | 2 +- .../electron-sandbox/issue.contribution.ts | 40 +- .../electron-sandbox/issueMainService.ts | 4 +- .../electron-sandbox/issueReporterMain.ts | 34 +- .../electron-sandbox/issueReporterService.ts | 44 +- .../electron-sandbox/issueReporterService2.ts | 26 +- .../issue/electron-sandbox/issueService.ts | 38 +- .../nativeIssueFormService.ts | 28 +- .../electron-sandbox/process.contribution.ts | 26 +- .../issue/electron-sandbox/processService.ts | 20 +- .../test/browser/testReporterModel.test.ts | 8 +- .../browser/keybindings.contribution.ts | 14 +- .../browser/languageDetection.contribution.ts | 44 +- .../browser/languageStatus.contribution.ts | 68 +- .../browser/limitIndicator.contribution.ts | 26 +- .../contrib/list/browser/list.contribution.ts | 8 +- .../list/browser/listResizeColumnAction.ts | 12 +- .../browser/tableColumnResizeQuickPick.ts | 10 +- .../browser/localHistory.contribution.ts | 6 +- .../localHistory/browser/localHistory.ts | 10 +- .../browser/localHistoryCommands.ts | 68 +- .../browser/localHistoryFileSystemProvider.ts | 12 +- .../browser/localHistoryTimeline.ts | 42 +- .../localHistory.contribution.ts | 2 +- .../electron-sandbox/localHistoryCommands.ts | 22 +- .../browser/localization.contribution.ts | 8 +- .../common/localization.contribution.ts | 20 +- .../common/localizationsActions.ts | 18 +- .../localization.contribution.ts | 47 +- .../electron-sandbox/minimalTranslations.ts | 2 +- .../contrib/logs/browser/logs.contribution.ts | 18 +- .../contrib/logs/common/defaultLogLevels.ts | 22 +- .../contrib/logs/common/logs.contribution.ts | 46 +- .../contrib/logs/common/logsActions.ts | 30 +- .../contrib/logs/common/logsDataCleaner.ts | 12 +- .../electron-sandbox/logs.contribution.ts | 10 +- .../logs/electron-sandbox/logsActions.ts | 14 +- .../common/mappedEdits.contribution.ts | 14 +- .../browser/markdownDocumentRenderer.ts | 35 +- .../browser/markdownSettingRenderer.ts | 80 +- .../browser/markedGfmHeadingIdPlugin.ts | 63 + .../browser/markdownSettingRenderer.test.ts | 18 +- .../markers/browser/markers.contribution.ts | 66 +- .../contrib/markers/browser/markers.ts | 8 +- .../markers/browser/markersFileDecorations.ts | 24 +- .../markers/browser/markersFilterOptions.ts | 14 +- .../contrib/markers/browser/markersModel.ts | 22 +- .../contrib/markers/browser/markersTable.ts | 60 +- .../markers/browser/markersTreeViewer.ts | 98 +- .../contrib/markers/browser/markersView.ts | 106 +- .../markers/browser/markersViewActions.ts | 26 +- .../contrib/markers/browser/messages.ts | 10 +- .../contrib/markers/common/markers.ts | 2 +- .../markers/test/browser/markersModel.test.ts | 10 +- .../mergeEditor/browser/commands/commands.ts | 38 +- .../browser/commands/devCommands.ts | 34 +- .../browser/mergeEditor.contribution.ts | 28 +- .../mergeEditor/browser/mergeEditorInput.ts | 40 +- .../browser/mergeEditorInputModel.ts | 48 +- .../browser/mergeEditorSerializer.ts | 12 +- .../mergeMarkers/mergeMarkersController.ts | 16 +- .../mergeEditor/browser/model/diffComputer.ts | 20 +- .../mergeEditor/browser/model/editing.ts | 8 +- .../mergeEditor/browser/model/lineRange.ts | 10 +- .../mergeEditor/browser/model/mapping.ts | 26 +- .../browser/model/mergeEditorModel.ts | 34 +- .../browser/model/modifiedBaseRange.ts | 22 +- .../mergeEditor/browser/model/rangeUtils.ts | 6 +- .../browser/model/textModelDiffs.ts | 22 +- .../contrib/mergeEditor/browser/telemetry.ts | 4 +- .../contrib/mergeEditor/browser/utils.ts | 14 +- .../mergeEditor/browser/view/colors.ts | 4 +- .../browser/view/conflictActions.ts | 26 +- .../mergeEditor/browser/view/editorGutter.ts | 10 +- .../view/editors/baseCodeEditorView.ts | 28 +- .../browser/view/editors/codeEditorView.ts | 40 +- .../view/editors/inputCodeEditorView.ts | 48 +- .../view/editors/resultCodeEditorView.ts | 42 +- .../browser/view/fixedZoneWidget.ts | 9 +- .../mergeEditor/browser/view/lineAlignment.ts | 18 +- .../mergeEditor/browser/view/mergeEditor.ts | 100 +- .../browser/view/scrollSynchronizer.ts | 22 +- .../mergeEditor/browser/view/viewModel.ts | 34 +- .../mergeEditor/browser/view/viewZones.ts | 26 +- .../contrib/mergeEditor/common/mergeEditor.ts | 4 +- .../electron-sandbox/devCommands.ts | 36 +- .../mergeEditor.contribution.ts | 4 +- .../mergeEditor/test/browser/mapping.test.ts | 10 +- .../mergeEditor/test/browser/model.test.ts | 26 +- .../multiDiffEditor/browser/actions.ts | 34 +- .../browser/icons.contribution.ts | 6 +- .../browser/multiDiffEditor.contribution.ts | 28 +- .../browser/multiDiffEditor.ts | 56 +- .../browser/multiDiffEditorInput.ts | 61 +- .../browser/multiDiffSourceResolverService.ts | 12 +- .../browser/scmMultiDiffSourceResolver.ts | 34 +- .../contrib/cellCommands/cellCommands.ts | 38 +- .../cellDiagnosticEditorContrib.ts | 26 +- .../cellDiagnostics/cellDiagnostics.ts | 6 +- .../cellDiagnostics/cellDiagnosticsActions.ts | 24 +- .../diagnosticCellStatusBarContrib.ts | 24 +- .../contributedStatusBarItemController.ts | 16 +- .../executionStatusBarItemController.ts | 32 +- .../notebookVisibleCellObserver.ts | 12 +- .../cellStatusBar/statusBarProviders.ts | 36 +- .../contrib/clipboard/cellOutputClipboard.ts | 8 +- .../contrib/clipboard/notebookClipboard.ts | 58 +- .../contrib/debug/notebookBreakpoints.ts | 26 +- .../contrib/debug/notebookCellPausing.ts | 22 +- .../contrib/debug/notebookDebugDecorations.ts | 24 +- .../contrib/editorHint/emptyCellEditorHint.ts | 32 +- .../editorStatusBar/editorStatusBar.ts | 38 +- .../execute/executionEditorProgress.ts | 14 +- .../browser/contrib/find/findFilters.ts | 6 +- .../contrib/find/findMatchDecorationModel.ts | 14 +- .../browser/contrib/find/findModel.ts | 30 +- .../browser/contrib/find/notebookFind.ts | 46 +- .../contrib/find/notebookFindReplaceWidget.ts | 86 +- .../contrib/find/notebookFindWidget.ts | 48 +- .../browser/contrib/format/formatting.ts | 60 +- .../gettingStarted/notebookGettingStarted.ts | 34 +- .../notebookKernelDetection.ts | 14 +- .../browser/contrib/layout/layoutActions.ts | 12 +- .../browser/contrib/marker/markerProvider.ts | 24 +- .../multicursor/notebookMulticursor.ts | 525 +- .../browser/contrib/navigation/arrow.ts | 55 +- .../notebookVariableCommands.ts | 18 +- .../notebookVariableContextKeys.ts | 2 +- .../notebookVariables/notebookVariables.ts | 40 +- .../notebookVariablesDataSource.ts | 10 +- .../notebookVariablesTree.ts | 34 +- .../notebookVariablesView.ts | 135 +- .../contrib/outline/notebookOutline.ts | 128 +- .../contrib/profile/notebookProfile.ts | 10 +- .../saveParticipants/saveParticipants.ts | 115 +- .../browser/contrib/troubleshoot/layout.ts | 22 +- .../contrib/undoRedo/notebookUndoRedo.ts | 14 +- .../contrib/viewportWarmup/viewportWarmup.ts | 18 +- .../notebook/browser/controller/apiActions.ts | 12 +- .../browser/controller/cellOperations.ts | 30 +- .../browser/controller/cellOutputActions.ts | 30 +- .../controller/chat/cellChatActions.ts | 105 +- .../chat/notebook.chat.contribution.ts | 213 +- .../controller/chat/notebookChatContext.ts | 6 +- .../controller/chat/notebookChatController.ts | 78 +- .../browser/controller/coreActions.ts | 40 +- .../browser/controller/editActions.ts | 74 +- .../browser/controller/executeActions.ts | 54 +- .../browser/controller/foldingController.ts | 36 +- .../browser/controller/insertCellActions.ts | 30 +- .../browser/controller/layoutActions.ts | 38 +- .../controller/notebookIndentationActions.ts | 30 +- .../browser/controller/sectionActions.ts | 22 +- .../browser/diff/diffCellEditorOptions.ts | 12 +- .../notebook/browser/diff/diffComponents.ts | 623 +- .../browser/diff/diffElementOutputs.ts | 32 +- .../browser/diff/diffElementViewModel.ts | 381 +- .../browser/diff/diffNestedCellViewModel.ts | 20 +- .../browser/diff/editorHeightCalculator.ts | 74 + .../notebook/browser/diff/eventDispatcher.ts | 8 +- .../browser/diff/notebookDiffActions.ts | 186 +- .../browser/diff/notebookDiffEditor.ts | 98 +- .../browser/diff/notebookDiffEditorBrowser.ts | 47 +- .../notebook/browser/diff/notebookDiffList.ts | 242 +- .../browser/diff/notebookDiffOverviewRuler.ts | 22 +- .../browser/diff/notebookDiffViewModel.ts | 241 +- .../browser/diff/notebookMultiDiffEditor.ts | 82 +- .../diff/notebookMultiDiffEditorInput.ts | 20 +- .../browser/diff/unchangedEditorRegions.ts | 60 + .../notebook/browser/media/notebook.css | 119 +- .../notebook/browser/notebook.contribution.ts | 334 +- .../browser/notebookAccessibilityHelp.ts | 27 +- .../browser/notebookAccessibilityProvider.ts | 56 +- .../browser/notebookAccessibleView.ts | 16 +- .../notebook/browser/notebookBrowser.ts | 62 +- .../notebook/browser/notebookEditor.ts | 92 +- .../browser/notebookEditorExtensions.ts | 4 +- .../notebook/browser/notebookEditorWidget.ts | 219 +- .../browser/notebookExtensionPoint.ts | 18 +- .../contrib/notebook/browser/notebookIcons.ts | 6 +- .../notebook/browser/notebookOptions.ts | 26 +- .../notebook/browser/notebookViewEvents.ts | 6 +- .../notebookCellStatusBarServiceImpl.ts | 14 +- .../browser/services/notebookEditorService.ts | 16 +- .../services/notebookEditorServiceImpl.ts | 40 +- .../services/notebookExecutionServiceImpl.ts | 26 +- .../notebookExecutionStateServiceImpl.ts | 30 +- .../notebookKernelHistoryServiceImpl.ts | 18 +- .../services/notebookKernelServiceImpl.ts | 28 +- .../services/notebookKeymapServiceImpl.ts | 30 +- .../services/notebookLoggingServiceImpl.ts | 8 +- .../notebookRendererMessagingServiceImpl.ts | 8 +- .../browser/services/notebookServiceImpl.ts | 84 +- .../services/notebookWorkerServiceImpl.ts | 149 +- .../contrib/notebook/browser/view/cellPart.ts | 12 +- .../browser/view/cellParts/cellActionView.ts | 32 +- .../browser/view/cellParts/cellComments.ts | 114 +- .../browser/view/cellParts/cellContextKeys.ts | 26 +- .../browser/view/cellParts/cellDecorations.ts | 6 +- .../browser/view/cellParts/cellDnd.ts | 22 +- .../view/cellParts/cellDragRenderer.ts | 24 +- .../view/cellParts/cellEditorOptions.ts | 38 +- .../browser/view/cellParts/cellExecution.ts | 20 +- .../browser/view/cellParts/cellFocus.ts | 8 +- .../view/cellParts/cellFocusIndicator.ts | 16 +- .../browser/view/cellParts/cellOutput.ts | 70 +- .../browser/view/cellParts/cellProgressBar.ts | 14 +- .../browser/view/cellParts/cellStatusPart.ts | 70 +- .../view/cellParts/cellToolbarStickyScroll.ts | 6 +- .../browser/view/cellParts/cellToolbars.ts | 42 +- .../view/cellParts/chat/cellChatPart.ts | 4 +- .../browser/view/cellParts/codeCell.ts | 63 +- .../view/cellParts/codeCellExecutionIcon.ts | 18 +- .../view/cellParts/codeCellRunToolbar.ts | 45 +- .../view/cellParts/collapsedCellInput.ts | 6 +- .../view/cellParts/collapsedCellOutput.ts | 14 +- .../browser/view/cellParts/foldedCellHint.ts | 26 +- .../browser/view/cellParts/markupCell.ts | 56 +- .../browser/view/notebookCellAnchor.ts | 20 +- .../browser/view/notebookCellEditorPool.ts | 24 +- .../notebook/browser/view/notebookCellList.ts | 64 +- .../browser/view/notebookCellListView.ts | 8 +- .../browser/view/notebookRenderingCommon.ts | 34 +- .../view/renderers/backLayerWebView.ts | 110 +- .../browser/view/renderers/cellRenderer.ts | 110 +- .../browser/view/renderers/webviewMessages.ts | 6 +- .../browser/view/renderers/webviewPreloads.ts | 22 +- .../view/renderers/webviewThemeMapping.ts | 2 +- .../browser/viewModel/OutlineEntry.ts | 16 +- .../browser/viewModel/baseCellViewModel.ts | 46 +- .../notebook/browser/viewModel/cellEdit.ts | 18 +- .../browser/viewModel/cellEditorOptions.ts | 14 +- .../browser/viewModel/cellOutputViewModel.ts | 14 +- .../viewModel/cellSelectionCollection.ts | 6 +- .../browser/viewModel/codeCellViewModel.ts | 42 +- .../browser/viewModel/eventDispatcher.ts | 6 +- .../browser/viewModel/foldingModel.ts | 22 +- .../browser/viewModel/markupCellViewModel.ts | 28 +- .../viewModel/notebookOutlineDataSource.ts | 36 +- .../notebookOutlineDataSourceFactory.ts | 8 +- .../viewModel/notebookOutlineEntryFactory.ts | 70 +- .../viewModel/notebookViewModelImpl.ts | 71 +- .../notebook/browser/viewModel/viewContext.ts | 6 +- .../viewParts/notebookEditorStickyScroll.ts | 42 +- .../viewParts/notebookEditorToolbar.ts | 54 +- .../notebookEditorWidgetContextKeys.ts | 16 +- .../viewParts/notebookHorizontalTracker.ts | 12 +- .../notebookKernelQuickPickStrategy.ts | 76 +- .../browser/viewParts/notebookKernelView.ts | 34 +- .../viewParts/notebookOverviewRuler.ts | 10 +- .../viewParts/notebookTopCellToolbar.ts | 20 +- .../browser/viewParts/notebookViewZones.ts | 18 +- .../contrib/notebook/common/model/cellEdit.ts | 8 +- .../model/notebookCellOutputTextModel.ts | 8 +- .../common/model/notebookCellTextModel.ts | 87 +- .../common/model/notebookMetadataTextModel.ts | 103 + .../common/model/notebookTextModel.ts | 43 +- .../common/notebookCellStatusBarService.ts | 12 +- .../contrib/notebook/common/notebookCommon.ts | 103 +- .../notebook/common/notebookContextKeys.ts | 5 +- .../common/notebookDiffEditorInput.ts | 18 +- .../notebook/common/notebookEditorInput.ts | 60 +- .../notebook/common/notebookEditorModel.ts | 50 +- .../notebookEditorModelResolverService.ts | 12 +- .../notebookEditorModelResolverServiceImpl.ts | 54 +- .../common/notebookExecutionService.ts | 12 +- .../common/notebookExecutionStateService.ts | 14 +- .../notebook/common/notebookKernelService.ts | 20 +- .../notebook/common/notebookKeymapService.ts | 2 +- .../notebook/common/notebookLoggingService.ts | 2 +- .../notebook/common/notebookOutputRenderer.ts | 12 +- .../notebook/common/notebookProvider.ts | 12 +- .../notebookRendererMessagingService.ts | 6 +- .../notebook/common/notebookService.ts | 30 +- .../services/notebookSimpleWorker.esm.ts | 4 +- .../common/services/notebookSimpleWorker.ts | 124 +- .../common/services/notebookWorkerService.ts | 6 +- .../NotebookEditorWidgetService.test.ts | 32 +- .../test/browser/cellDecorations.test.ts | 8 +- .../notebook/test/browser/cellDnd.test.ts | 10 +- .../test/browser/cellOperations.test.ts | 20 +- .../notebook/test/browser/cellOutput.test.ts | 28 +- ...contributedStatusBarItemController.test.ts | 18 +- .../contrib/executionStatusBarItem.test.ts | 4 +- .../test/browser/contrib/find.test.ts | 28 +- .../browser/contrib/layoutActions.test.ts | 4 +- .../contrib/notebookCellDiagnostics.test.ts | 36 +- .../browser/contrib/notebookClipboard.test.ts | 22 +- .../browser/contrib/notebookOutline.test.ts | 93 +- .../notebookOutlineViewProviders.test.ts | 89 +- .../browser/contrib/notebookSymbols.test.ts | 52 +- .../browser/contrib/notebookUndoRedo.test.ts | 6 +- .../browser/contrib/outputCopyTests.test.ts | 16 +- .../diff/editorHeightCalculator.test.ts | 151 + .../browser/{ => diff}/notebookDiff.test.ts | 68 +- .../test/browser/notebookBrowser.test.ts | 8 +- .../test/browser/notebookCellAnchor.test.ts | 20 +- .../test/browser/notebookCellList.test.ts | 14 +- .../test/browser/notebookCommon.test.ts | 31 +- .../test/browser/notebookEditor.test.ts | 18 +- .../test/browser/notebookEditorModel.test.ts | 38 +- .../browser/notebookExecutionService.test.ts | 48 +- .../notebookExecutionStateService.test.ts | 48 +- .../test/browser/notebookFolding.test.ts | 14 +- .../browser/notebookKernelHistory.test.ts | 38 +- .../browser/notebookKernelService.test.ts | 34 +- .../notebookRendererMessagingService.test.ts | 8 +- .../test/browser/notebookSelection.test.ts | 18 +- .../test/browser/notebookServiceImpl.test.ts | 34 +- .../test/browser/notebookStickyScroll.test.ts | 34 +- .../test/browser/notebookTextModel.test.ts | 20 +- .../notebookVariablesDataSource.test.ts | 25 +- .../test/browser/notebookViewModel.test.ts | 56 +- .../test/browser/notebookViewZones.test.ts | 18 +- .../browser/notebookWorkbenchToolbar.test.ts | 6 +- .../test/browser/testNotebookEditor.ts | 132 +- .../outline/browser/outline.contribution.ts | 24 +- .../contrib/outline/browser/outline.ts | 4 +- .../contrib/outline/browser/outlineActions.ts | 14 +- .../contrib/outline/browser/outlinePane.ts | 68 +- .../outline/browser/outlineViewState.ts | 6 +- .../output/browser/output.contribution.ts | 88 +- .../output/browser/outputLinkProvider.ts | 24 +- .../contrib/output/browser/outputServices.ts | 42 +- .../contrib/output/browser/outputView.ts | 66 +- .../output/common/outputChannelModel.ts | 40 +- .../common/outputChannelModelService.ts | 18 +- .../output/common/outputLinkComputer.esm.ts | 4 +- .../output/common/outputLinkComputer.ts | 20 +- .../test/browser/outputLinkProvider.test.ts | 10 +- .../browser/inputLatencyContrib.ts | 14 +- .../browser/performance.contribution.ts | 26 +- .../browser/performance.web.contribution.ts | 8 +- .../performance/browser/perfviewEditor.ts | 56 +- .../performance/browser/startupTimings.ts | 32 +- .../performance.contribution.ts | 18 +- .../electron-sandbox/rendererAutoProfiler.ts | 26 +- .../electron-sandbox/startupProfiler.ts | 32 +- .../electron-sandbox/startupTimings.ts | 36 +- .../preferences/browser/keybindingWidgets.ts | 46 +- .../preferences/browser/keybindingsEditor.ts | 120 +- .../browser/keybindingsEditorContribution.ts | 46 +- .../browser/keyboardLayoutPicker.ts | 32 +- .../browser/preferences.contribution.ts | 88 +- .../preferences/browser/preferencesActions.ts | 30 +- .../preferences/browser/preferencesEditor.ts | 16 +- .../preferences/browser/preferencesIcons.ts | 6 +- .../browser/preferencesRenderers.ts | 84 +- .../preferences/browser/preferencesSearch.ts | 39 +- .../preferences/browser/preferencesWidgets.ts | 68 +- .../preferences/browser/settingsEditor2.ts | 133 +- .../settingsEditorSettingIndicators.ts | 40 +- .../preferences/browser/settingsLayout.ts | 4 +- .../preferences/browser/settingsSearchMenu.ts | 18 +- .../preferences/browser/settingsTree.ts | 141 +- .../preferences/browser/settingsTreeModels.ts | 38 +- .../preferences/browser/settingsWidgets.ts | 58 +- .../contrib/preferences/browser/tocTree.ts | 40 +- .../contrib/preferences/common/preferences.ts | 16 +- .../common/preferencesContribution.ts | 36 +- .../common/settingsEditorColorRegistry.ts | 8 +- .../common/settingsFilesystemProvider.ts | 22 +- .../common/smartSnippetInserter.ts | 8 +- .../keybindingsEditorContribution.test.ts | 4 +- .../test/browser/settingsTreeModels.test.ts | 4 +- .../test/common/smartSnippetInserter.test.ts | 8 +- .../browser/commandsQuickAccess.ts | 75 +- .../browser/quickAccess.contribution.ts | 24 +- .../quickaccess/browser/viewQuickAccess.ts | 38 +- .../browser/relauncher.contribution.ts | 34 +- .../remote/browser/explorerViewItems.ts | 26 +- .../remote/browser/remote.contribution.ts | 18 +- .../contrib/remote/browser/remote.ts | 104 +- .../remote/browser/remoteConnectionHealth.ts | 30 +- .../contrib/remote/browser/remoteExplorer.ts | 91 +- .../contrib/remote/browser/remoteIcons.ts | 6 +- .../contrib/remote/browser/remoteIndicator.ts | 107 +- .../browser/remoteStartEntry.contribution.ts | 8 +- .../remote/browser/remoteStartEntry.ts | 24 +- .../contrib/remote/browser/showCandidate.ts | 10 +- .../contrib/remote/browser/tunnelFactory.ts | 24 +- .../contrib/remote/browser/tunnelView.ts | 110 +- .../contrib/remote/browser/urlFinder.ts | 10 +- .../remote/common/remote.contribution.ts | 53 +- .../electron-sandbox/remote.contribution.ts | 54 +- .../remoteTunnel.contribution.ts | 64 +- .../browser/interactiveEditor.css | 4 +- .../replNotebook/browser/repl.contribution.ts | 123 +- .../replNotebook/browser/replEditor.ts | 173 +- .../browser/replEditorAccessibilityHelp.ts | 53 + .../replNotebook/browser/replEditorInput.ts | 48 +- .../contrib/sash/browser/sash.contribution.ts | 16 +- src/vs/workbench/contrib/sash/browser/sash.ts | 14 +- .../workbench/contrib/scm/browser/activity.ts | 86 +- .../contrib/scm/browser/dirtyDiffSwitcher.ts | 18 +- .../contrib/scm/browser/dirtydiffDecorator.ts | 114 +- .../contrib/scm/browser/media/scm.css | 189 +- src/vs/workbench/contrib/scm/browser/menus.ts | 115 +- .../contrib/scm/browser/scm.contribution.ts | 142 +- .../contrib/scm/browser/scmHistory.ts | 135 +- .../contrib/scm/browser/scmHistoryViewPane.ts | 1618 ++-- .../scm/browser/scmRepositoriesViewPane.ts | 48 +- .../scm/browser/scmRepositoryRenderer.ts | 48 +- .../contrib/scm/browser/scmViewPane.ts | 1133 +-- .../scm/browser/scmViewPaneContainer.ts | 38 +- .../contrib/scm/browser/scmViewService.ts | 67 +- src/vs/workbench/contrib/scm/browser/util.ts | 109 +- .../contrib/scm/browser/workingSet.ts | 40 +- .../workbench/contrib/scm/common/history.ts | 102 +- .../workbench/contrib/scm/common/quickDiff.ts | 10 +- .../contrib/scm/common/quickDiffService.ts | 14 +- src/vs/workbench/contrib/scm/common/scm.ts | 32 +- .../contrib/scm/common/scmService.ts | 28 +- .../scm/test/browser/scmHistory.test.ts | 132 +- .../browser/scrollLocking.contribution.ts | 4 +- .../scrollLocking/browser/scrollLocking.ts | 24 +- .../search/browser/anythingQuickAccess.ts | 108 +- .../notebookSearchContributions.ts | 6 +- .../notebookSearch/notebookSearchService.ts | 53 +- .../notebookSearch/searchNotebookHelpers.ts | 12 +- .../search/browser/patternInputWidget.ts | 34 +- .../quickTextSearch/textSearchQuickAccess.ts | 84 +- .../contrib/search/browser/replace.ts | 6 +- .../search/browser/replaceContributions.ts | 8 +- .../contrib/search/browser/replaceService.ts | 64 +- .../search/browser/search.contribution.ts | 74 +- .../search/browser/searchActionsBase.ts | 18 +- .../search/browser/searchActionsCopy.ts | 24 +- .../search/browser/searchActionsFind.ts | 66 +- .../search/browser/searchActionsNav.ts | 50 +- .../browser/searchActionsRemoveReplace.ts | 80 +- .../search/browser/searchActionsSymbol.ts | 14 +- .../browser/searchActionsTextQuickAccess.ts | 24 +- .../search/browser/searchActionsTopBar.ts | 63 +- .../contrib/search/browser/searchFindInput.ts | 87 +- .../contrib/search/browser/searchIcons.ts | 6 +- .../contrib/search/browser/searchMessage.ts | 28 +- .../contrib/search/browser/searchModel.ts | 1179 +-- .../search/browser/searchResultsView.ts | 112 +- .../contrib/search/browser/searchView.ts | 633 +- .../contrib/search/browser/searchWidget.ts | 91 +- .../search/browser/symbolsQuickAccess.ts | 42 +- .../contrib/search/common/cacheState.ts | 6 +- .../contrib/search/common/cellSearchModel.ts | 10 +- .../contrib/search/common/constants.ts | 3 +- .../contrib/search/common/notebookSearch.ts | 8 +- .../workbench/contrib/search/common/search.ts | 32 +- .../search/common/searchHistoryService.ts | 8 +- .../search/common/searchNotebookHelpers.ts | 8 +- .../search/test/browser/mockSearchTree.ts | 8 +- .../search/test/browser/searchActions.test.ts | 32 +- .../search/test/browser/searchModel.test.ts | 74 +- .../browser/searchNotebookHelpers.test.ts | 30 +- .../search/test/browser/searchResult.test.ts | 64 +- .../search/test/browser/searchTestCommon.ts | 38 +- .../search/test/browser/searchViewlet.test.ts | 44 +- .../search/test/common/cacheState.test.ts | 10 +- .../search/test/common/extractRange.test.ts | 4 +- .../contrib/searchEditor/browser/constants.ts | 2 +- .../browser/searchEditor.contribution.ts | 68 +- .../searchEditor/browser/searchEditor.ts | 122 +- .../browser/searchEditorActions.ts | 46 +- .../searchEditor/browser/searchEditorInput.ts | 64 +- .../searchEditor/browser/searchEditorModel.ts | 28 +- .../browser/searchEditorSerialization.ts | 22 +- .../share/browser/share.contribution.ts | 60 +- .../contrib/share/browser/shareService.ts | 24 +- .../workbench/contrib/share/common/share.ts | 14 +- .../commands/abstractSnippetsActions.ts | 6 +- .../browser/commands/configureSnippets.ts | 38 +- .../browser/commands/fileTemplateSnippets.ts | 24 +- .../browser/commands/insertSnippet.ts | 24 +- .../browser/commands/surroundWithSnippet.ts | 26 +- .../browser/snippetCodeActionProvider.ts | 30 +- .../browser/snippetCompletionProvider.ts | 34 +- .../contrib/snippets/browser/snippetPicker.ts | 18 +- .../snippets/browser/snippets.contribution.ts | 38 +- .../contrib/snippets/browser/snippets.ts | 4 +- .../contrib/snippets/browser/snippetsFile.ts | 28 +- .../snippets/browser/snippetsService.ts | 58 +- .../contrib/snippets/browser/tabCompletion.ts | 40 +- .../snippets/test/browser/snippetFile.test.ts | 10 +- .../test/browser/snippetsRegistry.test.ts | 6 +- .../test/browser/snippetsRewrite.test.ts | 6 +- .../test/browser/snippetsService.test.ts | 36 +- .../speech/browser/speech.contribution.ts | 6 +- .../browser/speechAccessibilitySignal.ts | 8 +- .../contrib/speech/browser/speechService.ts | 29 +- .../contrib/speech/common/speechService.ts | 16 +- .../speech/test/common/speechService.test.ts | 4 +- .../contrib/splash/browser/partsSplash.ts | 42 +- .../splash/browser/splash.contribution.ts | 10 +- .../contrib/splash/browser/splash.ts | 4 +- .../electron-sandbox/splash.contribution.ts | 12 +- .../browser/languageSurveys.contribution.ts | 36 +- .../surveys/browser/nps.contribution.ts | 24 +- .../tags/browser/workspaceTagsService.ts | 8 +- .../contrib/tags/common/workspaceTags.ts | 8 +- .../electron-sandbox/tags.contribution.ts | 8 +- .../tags/electron-sandbox/workspaceTags.ts | 30 +- .../electron-sandbox/workspaceTagsService.ts | 24 +- .../tags/test/node/workspaceTags.test.ts | 4 +- .../tasks/browser/abstractTaskService.ts | 160 +- .../tasks/browser/runAutomaticTasks.ts | 28 +- .../tasks/browser/task.contribution.ts | 74 +- .../contrib/tasks/browser/taskQuickPick.ts | 40 +- .../contrib/tasks/browser/taskService.ts | 14 +- .../tasks/browser/taskTerminalStatus.ts | 26 +- .../contrib/tasks/browser/tasksQuickAccess.ts | 32 +- .../tasks/browser/terminalTaskSystem.ts | 94 +- .../contrib/tasks/common/jsonSchemaCommon.ts | 6 +- .../contrib/tasks/common/jsonSchema_v1.ts | 10 +- .../contrib/tasks/common/jsonSchema_v2.ts | 18 +- .../contrib/tasks/common/problemCollectors.ts | 24 +- .../contrib/tasks/common/problemMatcher.ts | 42 +- .../contrib/tasks/common/taskConfiguration.ts | 34 +- .../tasks/common/taskDefinitionRegistry.ts | 24 +- .../contrib/tasks/common/taskService.ts | 22 +- .../contrib/tasks/common/taskSystem.ts | 16 +- .../contrib/tasks/common/taskTemplates.ts | 4 +- .../workbench/contrib/tasks/common/tasks.ts | 28 +- .../tasks/electron-sandbox/taskService.ts | 90 +- .../test/browser/taskTerminalStatus.test.ts | 26 +- .../tasks/test/common/problemMatcher.test.ts | 4 +- .../test/common/taskConfiguration.test.ts | 34 +- .../browser/telemetry.contribution.ts | 62 +- .../terminal/browser/baseTerminalBackend.ts | 25 +- .../terminal/browser/detachedTerminal.ts | 32 +- .../browser/environmentVariableInfo.ts | 20 +- .../contrib/terminal/browser/remotePty.ts | 10 +- .../terminal/browser/remoteTerminalBackend.ts | 54 +- .../terminal/browser/terminal.contribution.ts | 125 +- .../contrib/terminal/browser/terminal.ts | 57 +- .../browser/terminal.web.contribution.ts | 12 +- .../terminal/browser/terminalActions.ts | 124 +- .../terminal/browser/terminalCommands.ts | 4 +- .../browser/terminalConfigurationService.ts | 22 +- .../terminal/browser/terminalContextMenu.ts | 20 +- .../browser/terminalContribExports.ts | 11 - .../terminal/browser/terminalEditor.ts | 52 +- .../terminal/browser/terminalEditorInput.ts | 40 +- .../browser/terminalEditorSerializer.ts | 10 +- .../terminal/browser/terminalEditorService.ts | 32 +- .../terminal/browser/terminalEvents.ts | 8 +- .../terminal/browser/terminalExtensions.ts | 10 +- .../contrib/terminal/browser/terminalGroup.ts | 26 +- .../terminal/browser/terminalGroupService.ts | 36 +- .../contrib/terminal/browser/terminalIcon.ts | 26 +- .../terminal/browser/terminalIconPicker.ts | 22 +- .../contrib/terminal/browser/terminalIcons.ts | 6 +- .../terminal/browser/terminalInstance.ts | 202 +- .../browser/terminalInstanceService.ts | 26 +- .../terminal/browser/terminalKeybindings.ts | 24 + .../browser/terminalMainContribution.ts | 24 +- .../contrib/terminal/browser/terminalMenus.ts | 28 +- .../browser/terminalProcessExtHostProxy.ts | 10 +- .../browser/terminalProcessManager.ts | 85 +- .../browser/terminalProfileQuickpick.ts | 30 +- .../browser/terminalProfileResolverService.ts | 40 +- .../browser/terminalProfileService.ts | 40 +- .../terminal/browser/terminalQuickAccess.ts | 30 +- .../browser/terminalResizeDebouncer.ts | 8 +- .../browser/terminalRunRecentQuickPick.ts | 50 +- .../terminal/browser/terminalService.ts | 108 +- .../terminal/browser/terminalStatusList.ts | 22 +- .../terminal/browser/terminalTabbedView.ts | 38 +- .../terminal/browser/terminalTabsList.ts | 111 +- .../terminal/browser/terminalTestHelpers.ts | 2 +- .../terminal/browser/terminalTooltip.ts | 12 +- .../contrib/terminal/browser/terminalUri.ts | 6 +- .../contrib/terminal/browser/terminalView.ts | 94 +- .../terminalWslRecommendationContribution.ts | 22 +- .../browser/widgets/terminalHoverWidget.ts | 20 +- .../terminal/browser/widgets/widgetManager.ts | 4 +- .../terminal/browser/widgets/widgets.ts | 2 +- .../terminal/browser/xterm/decorationAddon.ts | 44 +- .../browser/xterm/decorationStyles.ts | 22 +- .../browser/xterm/lineDataEventAddon.ts | 6 +- .../browser/xterm/markNavigationAddon.ts | 27 +- .../terminal/browser/xterm/xtermTerminal.ts | 71 +- .../contrib/terminal/common/basePty.ts | 12 +- .../environmentVariable.contribution.ts | 6 +- .../terminal/common/environmentVariable.ts | 8 +- .../common/environmentVariableService.ts | 20 +- .../contrib/terminal/common/history.ts | 26 +- .../common/remote/remoteTerminalChannel.ts | 42 +- .../terminal/common/remote/terminal.ts | 8 +- .../scripts}/CodeTabExpansion.psm1 | 0 .../scripts}/GitTabExpansion.psm1 | 0 .../media => common/scripts}/cgmanifest.json | 0 .../fish/vendor_conf.d/shellIntegration.fish | 6 +- .../scripts}/shellIntegration-bash.sh | 2 +- .../scripts}/shellIntegration-env.zsh | 0 .../scripts}/shellIntegration-login.zsh | 0 .../scripts}/shellIntegration-profile.zsh | 0 .../scripts}/shellIntegration-rc.zsh | 0 .../scripts}/shellIntegration.ps1 | 19 +- .../contrib/terminal/common/terminal.ts | 36 +- .../terminal/common/terminalClipboard.ts | 10 +- .../terminal/common/terminalColorRegistry.ts | 8 +- .../terminal/common/terminalConfiguration.ts | 32 +- .../terminal/common/terminalContextKey.ts | 8 +- .../terminal/common/terminalEnvironment.ts | 22 +- .../terminalExtensionPoints.contribution.ts | 4 +- .../common/terminalExtensionPoints.ts | 10 +- .../terminal/common/terminalStrings.ts | 2 +- .../terminal/electron-sandbox/localPty.ts | 4 +- .../electron-sandbox/localTerminalBackend.ts | 70 +- .../electron-sandbox/terminal.contribution.ts | 20 +- .../terminalNativeContribution.ts | 22 +- .../terminalProfileResolverService.ts | 20 +- .../electron-sandbox/terminalRemote.ts | 16 +- .../contrib/terminal/terminal.all.ts | 34 +- .../terminal/terminalContribExports.ts | 28 + .../commandDetectionCapability.test.ts | 12 +- .../partialCommandDetectionCapability.test.ts | 8 +- .../terminalCapabilityStore.test.ts | 8 +- .../test/browser/terminalActions.test.ts | 8 +- .../terminalConfigurationService.test.ts | 30 +- .../test/browser/terminalInstance.test.ts | 46 +- .../browser/terminalInstanceService.test.ts | 12 +- .../browser/terminalProcessManager.test.ts | 20 +- .../terminalProfileService.integrationTest.ts | 46 +- .../test/browser/terminalService.test.ts | 22 +- .../test/browser/terminalStatusList.test.ts | 16 +- .../terminal/test/browser/terminalUri.test.ts | 4 +- .../browser/xterm/decorationAddon.test.ts | 16 +- .../browser/xterm/lineDataEventAddon.test.ts | 10 +- .../xterm/shellIntegrationAddon.test.ts | 12 +- .../test/browser/xterm/xtermTerminal.test.ts | 34 +- .../environmentVariableCollection.test.ts | 12 +- .../common/environmentVariableService.test.ts | 22 +- .../common/environmentVariableShared.test.ts | 6 +- .../terminal/test/common/history.test.ts | 32 +- .../test/common/terminalClipboard.test.ts | 16 +- .../test/common/terminalColorRegistry.test.ts | 14 +- .../test/common/terminalDataBuffering.test.ts | 6 +- .../test/common/terminalEnvironment.test.ts | 12 +- .../test/node/terminalProfiles.test.ts | 12 +- .../browser/bufferContentTracker.ts | 8 +- .../terminal.accessibility.contribution.ts | 62 +- .../browser/terminalAccessibilityHelp.ts | 30 +- .../terminalAccessibleBufferProvider.ts | 24 +- .../browser/textAreaSyncAddon.ts | 14 +- .../terminalAccessibilityConfiguration.ts | 6 +- .../test/browser/bufferContentTracker.test.ts | 54 +- .../browser/terminal.chat.contribution.ts | 16 +- .../terminal.initialHint.contribution.ts | 67 +- .../chat/browser/terminalChat.ts | 6 +- .../browser/terminalChatAccessibilityHelp.ts | 18 +- .../browser/terminalChatAccessibleView.ts | 14 +- .../chat/browser/terminalChatActions.ts | 56 +- .../chat/browser/terminalChatController.ts | 124 +- .../chat/browser/terminalChatEnabler.ts | 8 +- .../chat/browser/terminalChatWidget.ts | 28 +- .../terminalInitialHintConfiguration.ts | 6 +- .../test/browser/terminalInitialHint.test.ts | 20 +- .../terminal.commandGuide.contribution.ts | 27 +- .../terminalCommandGuideConfiguration.ts | 6 +- .../terminal.developer.contribution.ts | 52 +- ...erminal.environmentChanges.contribution.ts | 22 +- .../browser/terminal.find.contribution.ts | 36 +- .../find/browser/terminalFindWidget.ts | 30 +- .../find/browser/textInputContextMenu.ts | 14 +- .../terminalContrib/links/browser/links.ts | 20 +- .../browser/terminal.links.contribution.ts | 46 +- .../browser/terminalExternalLinkDetector.ts | 6 +- .../links/browser/terminalLink.ts | 22 +- .../browser/terminalLinkDetectorAdapter.ts | 14 +- .../links/browser/terminalLinkHelpers.ts | 10 +- .../links/browser/terminalLinkManager.ts | 58 +- .../links/browser/terminalLinkOpeners.ts | 42 +- .../links/browser/terminalLinkParsing.ts | 4 +- .../browser/terminalLinkProviderService.ts | 8 +- .../links/browser/terminalLinkQuickpick.ts | 32 +- .../links/browser/terminalLinkResolver.ts | 20 +- .../browser/terminalLocalLinkDetector.ts | 20 +- .../browser/terminalMultiLineLinkDetector.ts | 14 +- .../links/browser/terminalUriLinkDetector.ts | 18 +- .../links/browser/terminalWordLinkDetector.ts | 20 +- .../links/test/browser/linkTestUtils.ts | 4 +- .../test/browser/terminalLinkHelpers.test.ts | 4 +- .../test/browser/terminalLinkManager.test.ts | 40 +- .../test/browser/terminalLinkOpeners.test.ts | 48 +- .../test/browser/terminalLinkParsing.test.ts | 6 +- .../browser/terminalLocalLinkDetector.test.ts | 36 +- .../terminalMultiLineLinkDetector.test.ts | 34 +- .../browser/terminalUriLinkDetector.test.ts | 30 +- .../browser/terminalWordLinkDetector.test.ts | 20 +- .../quickFix/browser/quickFix.ts | 16 +- .../quickFix/browser/quickFixAddon.ts | 58 +- .../browser/terminal.quickFix.contribution.ts | 36 +- .../browser/terminalQuickFixBuiltinActions.ts | 16 +- .../browser/terminalQuickFixService.ts | 16 +- .../test/browser/quickFixAddon.test.ts | 62 +- .../terminal.stickyScroll.contribution.ts | 20 +- .../terminalStickyScrollColorRegistry.ts | 4 +- .../terminalStickyScrollContribution.ts | 28 +- .../browser/terminalStickyScrollOverlay.ts | 46 +- .../terminalStickyScrollConfiguration.ts | 8 +- .../browser/terminal.suggest.contribution.ts | 94 +- .../suggest/browser/terminalSuggestAddon.ts | 70 +- .../common/terminalSuggestConfiguration.ts | 8 +- .../terminalSuggestAddon.integrationTest.ts | 56 +- .../terminal.typeAhead.contribution.ts | 18 +- .../browser/terminalTypeAheadAddon.ts | 22 +- .../common/terminalTypeAheadConfiguration.ts | 6 +- .../test/browser/terminalTypeAhead.test.ts | 16 +- .../browser/terminal.zoom.contribution.ts | 32 +- .../zoom/common/terminal.zoom.ts | 8 +- .../browser/codeCoverageDecorations.ts | 151 +- .../browser/codeCoverageDisplayUtils.ts | 22 +- .../browser/explorerProjections/index.ts | 22 +- .../explorerProjections/listProjection.ts | 26 +- .../testItemContextOverlay.ts | 8 +- .../explorerProjections/testingObjectTree.ts | 10 +- .../explorerProjections/testingViewState.ts | 2 +- .../explorerProjections/treeProjection.ts | 26 +- .../contrib/testing/browser/icons.ts | 14 +- .../testing/browser/testCoverageBars.ts | 36 +- .../testing/browser/testCoverageView.ts | 100 +- .../testing/browser/testExplorerActions.ts | 117 +- .../testing/browser/testMessageColorizer.ts | 16 +- .../testResultsView/testMessageStack.ts | 16 +- .../testResultsView/testResultsOutput.ts | 72 +- .../testResultsView/testResultsSubject.ts | 17 +- .../testResultsView/testResultsTree.ts | 105 +- .../testResultsView/testResultsViewContent.ts | 83 +- .../testing/browser/testing.contribution.ts | 101 +- .../testing/browser/testingConfigurationUi.ts | 24 +- .../testing/browser/testingDecorations.ts | 122 +- .../testing/browser/testingExplorerFilter.ts | 40 +- .../testing/browser/testingExplorerView.ts | 157 +- .../testing/browser/testingOutputPeek.ts | 194 +- .../browser/testingProgressUiService.ts | 26 +- .../browser/testingViewPaneContainer.ts | 26 +- .../contrib/testing/browser/theme.ts | 10 +- .../contrib/testing/common/configuration.ts | 8 +- .../contrib/testing/common/constants.ts | 6 +- .../testing/common/getComputedState.ts | 6 +- .../common/mainThreadTestCollection.ts | 12 +- .../contrib/testing/common/observableUtils.ts | 4 +- .../contrib/testing/common/observableValue.ts | 6 +- .../contrib/testing/common/storedValue.ts | 6 +- .../contrib/testing/common/testCoverage.ts | 20 +- .../testing/common/testCoverageService.ts | 32 +- .../contrib/testing/common/testExclusions.ts | 14 +- .../testing/common/testExplorerFilterState.ts | 16 +- .../testing/common/testItemCollection.ts | 14 +- .../testing/common/testProfileService.ts | 24 +- .../contrib/testing/common/testResult.ts | 32 +- .../testing/common/testResultService.ts | 28 +- .../testing/common/testResultStorage.ts | 28 +- .../contrib/testing/common/testService.ts | 36 +- .../contrib/testing/common/testServiceImpl.ts | 64 +- .../contrib/testing/common/testTypes.ts | 12 +- .../testing/common/testingContentProvider.ts | 26 +- .../testing/common/testingContextKeys.ts | 9 +- .../common/testingContinuousRunService.ts | 30 +- .../testing/common/testingDecorations.ts | 16 +- .../testing/common/testingPeekOpener.ts | 14 +- .../contrib/testing/common/testingStates.ts | 4 +- .../contrib/testing/common/testingUri.ts | 4 +- .../browser/codeCoverageDecorations.test.ts | 14 +- .../nameProjection.test.ts | 16 +- .../treeProjection.test.ts | 18 +- .../testing/test/browser/testObjectTree.ts | 24 +- .../testing/test/common/testCoverage.test.ts | 12 +- .../common/testExplorerFilterState.test.ts | 8 +- .../test/common/testProfileService.test.ts | 12 +- .../test/common/testResultService.test.ts | 34 +- .../test/common/testResultStorage.test.ts | 22 +- .../testing/test/common/testService.test.ts | 8 +- .../contrib/testing/test/common/testStubs.ts | 10 +- .../testing/test/common/testingUri.test.ts | 4 +- .../themes/browser/themes.contribution.ts | 114 +- .../browser/themes.test.contribution.ts | 32 +- .../test/node/colorRegistry.releaseTest.ts | 29 +- .../test/node/colorRegistryExport.test.ts | 8 +- .../timeline/browser/timeline.contribution.ts | 36 +- .../contrib/timeline/browser/timelinePane.ts | 108 +- .../contrib/timeline/common/timeline.ts | 20 +- .../timeline/common/timelineService.ts | 18 +- .../browser/typeHierarchy.contribution.ts | 42 +- .../browser/typeHierarchyPeek.ts | 62 +- .../browser/typeHierarchyTree.ts | 24 +- .../typeHierarchy/common/typeHierarchy.ts | 28 +- .../update/browser/releaseNotesEditor.ts | 75 +- .../update/browser/update.contribution.ts | 40 +- .../contrib/update/browser/update.ts | 54 +- .../url/browser/externalUriResolver.ts | 8 +- .../url/browser/trustedDomainService.ts | 16 +- .../contrib/url/browser/trustedDomains.ts | 18 +- .../trustedDomainsFileSystemProvider.ts | 22 +- .../url/browser/trustedDomainsValidator.ts | 36 +- .../contrib/url/browser/url.contribution.ts | 38 +- .../workbench/contrib/url/common/urlGlob.ts | 2 +- .../test/browser/mockTrustedDomainService.ts | 4 +- .../url/test/browser/trustedDomains.test.ts | 6 +- .../browser/media/userDataProfilesEditor.css | 123 +- .../browser/userDataProfile.contribution.ts | 6 +- .../browser/userDataProfile.ts | 73 +- .../browser/userDataProfileActions.ts | 12 +- .../browser/userDataProfilesEditor.ts | 783 +- .../browser/userDataProfilesEditorModel.ts | 315 +- .../userDataProfile/common/userDataProfile.ts | 6 +- .../browser/userDataSync.contribution.ts | 30 +- .../userDataSync/browser/userDataSync.ts | 106 +- .../browser/userDataSyncConflictsView.ts | 50 +- .../browser/userDataSyncTrigger.ts | 28 +- .../userDataSync/browser/userDataSyncViews.ts | 60 +- .../userDataSync.contribution.ts | 28 +- .../contrib/webview/browser/overlayWebview.ts | 24 +- .../webview/browser/resourceLoading.ts | 18 +- .../contrib/webview/browser/themeing.ts | 18 +- .../webview/browser/webview.contribution.ts | 18 +- .../contrib/webview/browser/webview.ts | 30 +- .../browser/webview.web.contribution.ts | 6 +- .../contrib/webview/browser/webviewElement.ts | 70 +- .../webview/browser/webviewFindWidget.ts | 14 +- .../contrib/webview/browser/webviewService.ts | 14 +- .../browser/webviewWindowDragMonitor.ts | 8 +- .../contrib/webview/common/webview.ts | 6 +- .../electron-sandbox/webview.contribution.ts | 10 +- .../electron-sandbox/webviewCommands.ts | 12 +- .../electron-sandbox/webviewElement.ts | 46 +- .../electron-sandbox/webviewService.ts | 6 +- .../windowIgnoreMenuShortcutsManager.ts | 14 +- .../webviewPanel/browser/webviewCommands.ts | 24 +- .../webviewPanel/browser/webviewEditor.ts | 44 +- .../browser/webviewEditorInput.ts | 18 +- .../browser/webviewEditorInputSerializer.ts | 16 +- .../browser/webviewIconManager.ts | 10 +- .../browser/webviewPanel.contribution.ts | 34 +- .../browser/webviewWorkbenchService.ts | 36 +- .../browser/webviewView.contribution.ts | 4 +- .../webviewView/browser/webviewViewPane.ts | 54 +- .../webviewView/browser/webviewViewService.ts | 14 +- .../browser/welcomeBanner.contribution.ts | 16 +- .../browser/welcomeDialog.contribution.ts | 38 +- .../welcomeDialog/browser/welcomeWidget.ts | 50 +- .../browser/gettingStarted.contribution.ts | 80 +- .../browser/gettingStarted.ts | 191 +- .../browser/gettingStartedAccessibleView.ts | 105 + .../browser/gettingStartedColors.ts | 4 +- .../browser/gettingStartedDetailsRenderer.ts | 38 +- .../browser/gettingStartedExtensionPoint.ts | 6 +- .../browser/gettingStartedIcons.ts | 4 +- .../browser/gettingStartedInput.ts | 18 +- .../browser/gettingStartedList.ts | 12 +- .../browser/gettingStartedService.ts | 62 +- .../browser/media/gettingStarted.css | 5 +- .../browser/startupPage.ts | 60 +- .../common/gettingStartedContent.ts | 134 +- .../common/media/notebookProfile.ts | 4 +- .../common/media/theme_picker.ts | 6 +- .../gettingStartedMarkdownRenderer.test.ts | 16 +- .../common/newFile.contribution.ts | 32 +- .../common/viewsWelcome.contribution.ts | 14 +- .../common/viewsWelcomeContribution.ts | 18 +- .../common/viewsWelcomeExtensionPoint.ts | 4 +- .../browser/editor/editorWalkThrough.ts | 22 +- .../editor/vs_code_editor_walkthrough.ts | 8 +- .../browser/walkThrough.contribution.ts | 26 +- .../browser/walkThroughActions.ts | 12 +- .../browser/walkThroughInput.ts | 32 +- .../browser/walkThroughPart.ts | 72 +- .../common/walkThroughContentProvider.ts | 44 +- .../common/walkThroughUtils.ts | 6 +- .../browser/workspace.contribution.ts | 94 +- .../workspace/browser/workspaceTrustEditor.ts | 114 +- .../contrib/workspace/common/workspace.ts | 4 +- .../browser/workspaces.contribution.ts | 38 +- .../actions/developerActions.ts | 28 +- .../actions/installActions.ts | 20 +- .../electron-sandbox/actions/windowActions.ts | 50 +- .../electron-sandbox/desktop.contribution.ts | 53 +- .../electron-sandbox/desktop.main.ts | 116 +- .../parts/dialogs/dialog.contribution.ts | 32 +- .../parts/dialogs/dialogHandler.ts | 20 +- .../parts/titlebar/menubarControl.ts | 46 +- .../parts/titlebar/titlebarPart.ts | 58 +- src/vs/workbench/electron-sandbox/window.ts | 156 +- .../accessibleViewInformationService.ts | 8 +- .../electron-sandbox/accessibilityService.ts | 24 +- .../actions/common/menusExtensionPoint.ts | 100 +- .../activity/browser/activityService.ts | 16 +- .../services/activity/common/activity.ts | 84 +- .../common/aiEmbeddingVectorService.ts | 14 +- .../common/aiRelatedInformation.ts | 6 +- .../common/aiRelatedInformationService.ts | 14 +- .../aiRelatedInformationService.test.ts | 10 +- .../assignment/common/assignmentService.ts | 30 +- .../test/common/nullAssignmentService.ts | 2 +- .../browser/authenticationAccessService.ts | 14 +- .../authenticationExtensionsService.ts | 107 +- .../browser/authenticationService.ts | 24 +- .../browser/authenticationUsageService.ts | 97 +- .../authentication/common/authentication.ts | 49 +- .../browser/authenticationService.test.ts | 14 +- .../browser/auxiliaryWindowService.ts | 44 +- .../auxiliaryWindowService.ts | 42 +- .../services/banner/browser/bannerService.ts | 10 +- .../electron-sandbox/checksumService.ts | 4 +- .../clipboard/browser/clipboardService.ts | 24 +- .../electron-sandbox/clipboardService.ts | 16 +- .../commands/common/commandService.ts | 16 +- .../test/common/commandService.test.ts | 12 +- .../configuration/browser/configuration.ts | 54 +- .../browser/configurationService.ts | 88 +- .../configuration/common/configuration.ts | 14 +- .../common/configurationCache.ts | 14 +- .../common/configurationEditing.ts | 52 +- .../common/configurationModels.ts | 20 +- .../configuration/common/jsonEditing.ts | 6 +- .../common/jsonEditingService.ts | 32 +- .../test/browser/configuration.test.ts | 24 +- .../test/browser/configurationEditing.test.ts | 84 +- .../test/browser/configurationService.test.ts | 94 +- .../test/common/configurationModels.test.ts | 20 +- .../configuration/test/common/testServices.ts | 4 +- .../baseConfigurationResolverService.ts | 42 +- .../browser/configurationResolverService.ts | 24 +- .../common/configurationResolver.ts | 12 +- .../common/configurationResolverSchema.ts | 4 +- .../common/configurationResolverUtils.ts | 4 +- .../common/variableResolver.ts | 26 +- .../configurationResolverService.ts | 28 +- .../configurationResolverService.test.ts | 46 +- .../electron-sandbox/contextmenuService.ts | 48 +- .../decorations/browser/decorationsService.ts | 40 +- .../decorations/common/decorations.ts | 14 +- .../test/browser/decorationsService.test.ts | 22 +- .../browser/abstractFileDialogService.ts | 58 +- .../dialogs/browser/fileDialogService.ts | 34 +- .../dialogs/browser/simpleFileDialog.ts | 163 +- .../services/dialogs/common/dialogService.ts | 14 +- .../electron-sandbox/fileDialogService.ts | 48 +- .../fileDialogService.test.ts | 64 +- .../services/driver/browser/driver.ts | 28 +- .../driver/electron-sandbox/driver.ts | 14 +- .../editor/browser/codeEditorService.ts | 24 +- .../editor/browser/editorPaneService.ts | 6 +- .../editor/browser/editorResolverService.ts | 52 +- .../services/editor/browser/editorService.ts | 64 +- .../editor/common/customEditorLabelService.ts | 22 +- .../editor/common/editorGroupColumn.ts | 8 +- .../editor/common/editorGroupFinder.ts | 14 +- .../editor/common/editorGroupsService.ts | 28 +- .../editor/common/editorPaneService.ts | 6 +- .../editor/common/editorResolverService.ts | 34 +- .../services/editor/common/editorService.ts | 20 +- .../browser/customEditorLabelService.test.ts | 14 +- .../test/browser/editorGroupsService.test.ts | 36 +- .../browser/editorResolverService.test.ts | 20 +- .../editor/test/browser/editorService.test.ts | 50 +- .../test/browser/editorsObserver.test.ts | 32 +- .../encryption/browser/encryptionService.ts | 4 +- .../electron-sandbox/encryptionService.ts | 4 +- .../environment/browser/environmentService.ts | 32 +- .../environment/common/environmentService.ts | 8 +- .../electron-sandbox/environmentService.ts | 22 +- .../shellEnvironmentService.ts | 8 +- .../builtinExtensionsScannerService.ts | 26 +- .../browser/extensionBisect.ts | 42 +- .../browser/extensionEnablementService.ts | 114 +- .../extensionsProfileScannerService.ts | 16 +- .../browser/webExtensionsScannerService.ts | 80 +- .../common/extensionFeatures.ts | 22 +- .../extensionFeaturesManagemetService.ts | 32 +- .../common/extensionManagement.ts | 34 +- .../extensionManagementChannelClient.ts | 91 +- .../extensionManagementServerService.ts | 24 +- .../common/extensionManagementService.ts | 89 +- .../remoteExtensionManagementService.ts | 18 +- .../common/webExtensionManagementService.ts | 40 +- .../extensionManagementServerService.ts | 26 +- .../extensionManagementService.ts | 44 +- .../electron-sandbox/extensionTipsService.ts | 18 +- .../nativeExtensionManagementService.ts | 30 +- .../remoteExtensionManagementService.ts | 57 +- .../extensionEnablementService.test.ts | 181 +- .../extensionIgnoredRecommendationsService.ts | 14 +- .../common/extensionRecommendations.ts | 8 +- .../common/workspaceExtensionsConfig.ts | 32 +- .../extensions/browser/extensionService.ts | 76 +- .../extensions/browser/extensionUrlHandler.ts | 48 +- .../browser/extensionsScannerService.ts | 22 +- .../browser/webWorkerExtensionHost.ts | 58 +- .../browser/webWorkerFileSystemProvider.ts | 10 +- .../common/abstractExtensionService.ts | 104 +- .../extensions/common/extHostCustomers.ts | 12 +- .../common/extensionDescriptionRegistry.ts | 10 +- .../extensions/common/extensionDevOptions.ts | 4 +- .../extensions/common/extensionHostEnv.ts | 2 +- .../extensions/common/extensionHostKind.ts | 4 +- .../extensions/common/extensionHostManager.ts | 54 +- .../common/extensionHostManagers.ts | 18 +- .../common/extensionHostProtocol.ts | 14 +- .../extensions/common/extensionHostProxy.ts | 12 +- .../extensionManifestPropertiesService.ts | 32 +- .../common/extensionRunningLocation.ts | 2 +- .../common/extensionRunningLocationTracker.ts | 22 +- .../common/extensionStorageMigration.ts | 22 +- .../services/extensions/common/extensions.ts | 30 +- .../common/extensionsProposedApi.ts | 26 +- .../extensions/common/extensionsRegistry.ts | 28 +- .../extensions/common/extensionsUtil.ts | 10 +- .../common/lazyCreateExtensionHostManager.ts | 32 +- .../services/extensions/common/lazyPromise.ts | 2 +- .../extensions/common/proxyIdentifier.ts | 4 +- .../extensions/common/remoteConsoleUtil.ts | 4 +- .../extensions/common/remoteExtensionHost.ts | 48 +- .../services/extensions/common/rpcProtocol.ts | 26 +- .../extensions/common/workspaceContains.ts | 22 +- .../cachedExtensionScanner.ts | 30 +- .../electron-sandbox/extensionHostProfiler.ts | 14 +- .../electron-sandbox/extensionHostStarter.ts | 4 +- .../extensionsScannerService.ts | 24 +- .../localProcessExtensionHost.ts | 70 +- .../nativeExtensionService.ts | 110 +- .../test/browser/extensionService.test.ts | 88 +- .../browser/extensionStorageMigration.test.ts | 38 +- .../extensionDescriptionRegistry.test.ts | 8 +- ...extensionManifestPropertiesService.test.ts | 24 +- .../test/common/rpcProtocol.test.ts | 16 +- .../extensions/worker/polyfillNestedWorker.ts | 2 +- .../webWorkerExtensionHostIframe.esm.html | 16 +- .../worker/webWorkerExtensionHostIframe.html | 4 +- .../files/browser/elevatedFileService.ts | 10 +- .../files/common/elevatedFileService.ts | 8 +- .../diskFileSystemProvider.ts | 30 +- .../electron-sandbox/elevatedFileService.ts | 18 +- .../files/electron-sandbox/watcherClient.ts | 10 +- .../common/filesConfigurationService.ts | 46 +- .../history/browser/historyService.ts | 62 +- .../services/history/common/history.ts | 10 +- .../test/browser/historyService.test.ts | 50 +- .../host/browser/browserHostService.ts | 76 +- .../workbench/services/host/browser/host.ts | 6 +- .../electron-sandbox/nativeHostService.ts | 30 +- .../integrity/browser/integrityService.ts | 4 +- .../services/integrity/common/integrity.ts | 4 +- .../electron-sandbox/integrityService.ts | 26 +- .../keybinding/browser/keybindingService.ts | 92 +- .../browser/keyboardLayoutService.ts | 58 +- .../browser/keyboardLayouts/_.contribution.ts | 2 +- .../browser/keyboardLayouts/cz.win.ts | 2 +- .../browser/keyboardLayouts/de-swiss.win.ts | 2 +- .../browser/keyboardLayouts/de.darwin.ts | 2 +- .../browser/keyboardLayouts/de.linux.ts | 2 +- .../browser/keyboardLayouts/de.win.ts | 2 +- .../browser/keyboardLayouts/dk.win.ts | 2 +- .../browser/keyboardLayouts/dvorak.darwin.ts | 2 +- .../browser/keyboardLayouts/en-belgian.win.ts | 2 +- .../browser/keyboardLayouts/en-ext.darwin.ts | 2 +- .../browser/keyboardLayouts/en-in.win.ts | 2 +- .../browser/keyboardLayouts/en-intl.darwin.ts | 2 +- .../browser/keyboardLayouts/en-intl.win.ts | 2 +- .../browser/keyboardLayouts/en-uk.darwin.ts | 2 +- .../browser/keyboardLayouts/en-uk.win.ts | 2 +- .../browser/keyboardLayouts/en.darwin.ts | 2 +- .../browser/keyboardLayouts/en.linux.ts | 2 +- .../browser/keyboardLayouts/en.win.ts | 2 +- .../browser/keyboardLayouts/es-latin.win.ts | 2 +- .../browser/keyboardLayouts/es.darwin.ts | 2 +- .../browser/keyboardLayouts/es.linux.ts | 2 +- .../browser/keyboardLayouts/es.win.ts | 2 +- .../browser/keyboardLayouts/fr.darwin.ts | 2 +- .../browser/keyboardLayouts/fr.linux.ts | 2 +- .../browser/keyboardLayouts/fr.win.ts | 2 +- .../browser/keyboardLayouts/hu.win.ts | 2 +- .../browser/keyboardLayouts/it.darwin.ts | 2 +- .../browser/keyboardLayouts/it.win.ts | 2 +- .../keyboardLayouts/jp-roman.darwin.ts | 2 +- .../browser/keyboardLayouts/jp.darwin.ts | 2 +- .../browser/keyboardLayouts/ko.darwin.ts | 2 +- .../layout.contribution.darwin.ts | 34 +- .../layout.contribution.linux.ts | 12 +- .../layout.contribution.win.ts | 46 +- .../browser/keyboardLayouts/no.win.ts | 2 +- .../browser/keyboardLayouts/pl.darwin.ts | 2 +- .../browser/keyboardLayouts/pl.win.ts | 2 +- .../browser/keyboardLayouts/pt-br.win.ts | 2 +- .../browser/keyboardLayouts/pt.darwin.ts | 2 +- .../browser/keyboardLayouts/pt.win.ts | 2 +- .../browser/keyboardLayouts/ru.darwin.ts | 2 +- .../browser/keyboardLayouts/ru.linux.ts | 2 +- .../browser/keyboardLayouts/ru.win.ts | 2 +- .../browser/keyboardLayouts/sv.darwin.ts | 2 +- .../browser/keyboardLayouts/sv.win.ts | 2 +- .../browser/keyboardLayouts/thai.win.ts | 2 +- .../browser/keyboardLayouts/tr.win.ts | 2 +- .../browser/keyboardLayouts/zh-hans.darwin.ts | 2 +- .../keybinding/browser/unboundCommands.ts | 8 +- .../common/fallbackKeyboardMapper.ts | 10 +- .../keybinding/common/keybindingEditing.ts | 40 +- .../keybinding/common/keybindingIO.ts | 8 +- .../services/keybinding/common/keymapInfo.ts | 4 +- .../common/macLinuxKeyboardMapper.ts | 16 +- .../common/windowsKeyboardMapper.ts | 20 +- .../electron-sandbox/nativeKeyboardLayout.ts | 26 +- .../nativeKeyboardLayoutService.ts | 16 +- .../browser/browserKeyboardMapper.test.ts | 28 +- .../test/browser/keybindingEditing.test.ts | 56 +- .../test/browser/keybindingIO.test.ts | 14 +- .../test/node/fallbackKeyboardMapper.test.ts | 12 +- .../test/node/keyboardMapperTestUtils.ts | 12 +- .../test/node/macLinuxKeyboardMapper.test.ts | 18 +- .../test/node/windowsKeyboardMapper.test.ts | 14 +- .../services/label/common/labelService.ts | 49 +- .../services/label/test/browser/label.test.ts | 28 +- .../label/test/common/mockLabelService.ts | 12 +- .../language/common/languageService.ts | 42 +- .../languageDetectionSimpleWorker.esm.ts | 4 +- .../browser/languageDetectionSimpleWorker.ts | 10 +- .../languageDetectionWorker.protocol.ts | 2 +- .../languageDetectionWorkerServiceImpl.ts | 44 +- .../common/languageDetectionWorkerService.ts | 4 +- .../common/languageStatusService.ts | 24 +- .../services/layout/browser/layoutService.ts | 24 +- .../lifecycle/browser/lifecycleService.ts | 23 +- .../services/lifecycle/common/lifecycle.ts | 6 +- .../lifecycle/common/lifecycleService.ts | 14 +- .../electron-sandbox/lifecycleService.ts | 22 +- .../electron-sandbox/lifecycleService.test.ts | 14 +- .../localization/browser/localeService.ts | 45 +- .../services/localization/common/locale.ts | 4 +- .../electron-sandbox/languagePackService.ts | 4 +- .../electron-sandbox/localeService.ts | 38 +- .../log/electron-sandbox/logService.ts | 14 +- .../electron-sandbox/menubarService.ts | 4 +- .../services/model/common/modelService.ts | 18 +- .../common/notebookDocumentService.ts | 12 +- .../common/notificationService.ts | 16 +- .../services/outline/browser/outline.ts | 22 +- .../outline/browser/outlineService.ts | 14 +- .../output/common/delayedLogChannel.ts | 4 +- .../services/output/common/output.ts | 10 +- .../panecomposite/browser/panecomposite.ts | 12 +- .../services/path/browser/pathService.ts | 17 +- .../services/path/common/pathService.ts | 22 +- .../path/electron-sandbox/pathService.ts | 10 +- .../browser/keybindingsEditorInput.ts | 18 +- .../browser/keybindingsEditorModel.ts | 36 +- .../preferences/browser/preferencesService.ts | 90 +- .../preferences/common/preferences.ts | 34 +- .../common/preferencesEditorInput.ts | 20 +- .../preferences/common/preferencesModels.ts | 40 +- .../common/preferencesValidation.ts | 10 +- .../browser/keybindingsEditorModel.test.ts | 34 +- .../test/browser/preferencesService.test.ts | 26 +- .../test/common/preferencesValidation.test.ts | 6 +- .../progress/browser/progressIndicator.ts | 12 +- .../progress/browser/progressService.ts | 50 +- .../test/browser/progressIndicator.test.ts | 6 +- .../quickinput/browser/quickInputService.ts | 22 +- .../browser/browserRemoteResourceHandler.ts | 12 +- .../remote/browser/remoteAgentService.ts | 28 +- .../common/abstractRemoteAgentService.ts | 34 +- .../common/remoteAgentEnvironmentChannel.ts | 20 +- .../remote/common/remoteAgentService.ts | 16 +- .../remote/common/remoteExplorerService.ts | 46 +- .../remote/common/remoteExtensionsScanner.ts | 28 +- .../common/remoteFileSystemProviderClient.ts | 18 +- .../services/remote/common/tunnelModel.ts | 60 +- .../electron-sandbox/remoteAgentService.ts | 32 +- .../request/browser/requestService.ts | 55 +- .../electron-sandbox/requestService.ts | 41 +- .../services/search/browser/searchService.ts | 52 +- .../search/common/fileSearchManager.ts | 60 +- .../services/search/common/getFileResults.ts | 4 +- .../services/search/common/ignoreFile.ts | 2 +- .../common/localFileSearchWorkerTypes.ts | 6 +- .../services/search/common/queryBuilder.ts | 73 +- .../services/search/common/replace.ts | 8 +- .../services/search/common/search.ts | 37 +- .../search/common/searchExtConversionTypes.ts | 23 +- .../services/search/common/searchExtTypes.ts | 12 +- .../search/common/searchExtTypesInternal.ts | 2 +- .../services/search/common/searchHelpers.ts | 6 +- .../services/search/common/searchService.ts | 48 +- .../search/common/textSearchManager.ts | 20 +- .../search/electron-sandbox/searchService.ts | 6 +- .../services/search/node/fileSearch.ts | 30 +- .../services/search/node/rawSearchService.ts | 28 +- .../services/search/node/ripgrepFileSearch.ts | 16 +- .../search/node/ripgrepSearchProvider.ts | 14 +- .../search/node/ripgrepSearchUtils.ts | 6 +- .../search/node/ripgrepTextSearchEngine.ts | 24 +- .../services/search/node/textSearchAdapter.ts | 10 +- .../services/search/node/textSearchManager.ts | 10 +- .../search/test/browser/queryBuilder.test.ts | 156 +- .../search/test/common/ignoreFile.test.ts | 4 +- .../search/test/common/queryBuilder.test.ts | 14 +- .../search/test/common/replace.test.ts | 4 +- .../search/test/common/search.test.ts | 4 +- .../search/test/common/searchHelpers.test.ts | 10 +- .../test/node/fileSearch.integrationTest.ts | 12 +- .../node/rawSearchService.integrationTest.ts | 18 +- .../test/node/ripgrepFileSearch.test.ts | 6 +- .../node/ripgrepTextSearchEngineUtils.test.ts | 14 +- .../test/node/search.integrationTest.ts | 16 +- .../test/node/textSearch.integrationTest.ts | 16 +- .../test/node/textSearchManager.test.ts | 14 +- .../search/worker/localFileSearch.esm.ts | 4 +- .../services/search/worker/localFileSearch.ts | 33 +- .../secrets/browser/secretStorageService.ts | 14 +- .../electron-sandbox/secretStorageService.ts | 28 +- .../electron-sandbox/sharedProcessService.ts | 18 +- .../services/statusbar/browser/statusbar.ts | 14 +- .../storage/browser/storageService.ts | 30 +- .../electron-sandbox/storageService.ts | 12 +- .../test/browser/storageService.test.ts | 32 +- .../suggest/browser/simpleCompletionItem.ts | 6 +- .../suggest/browser/simpleCompletionModel.ts | 10 +- .../suggest/browser/simpleSuggestWidget.ts | 32 +- .../browser/simpleSuggestWidgetRenderer.ts | 18 +- .../telemetry/browser/telemetryService.ts | 30 +- .../browser/workbenchCommonProperties.ts | 14 +- .../common/workbenchCommonProperties.ts | 10 +- .../electron-sandbox/telemetryService.ts | 28 +- .../test/browser/commonProperties.test.ts | 6 +- .../test/node/commonProperties.test.ts | 8 +- .../common/embedderTerminalService.ts | 10 +- .../textMate/browser/arrayOperation.ts | 2 +- .../textMateWorkerTokenizerController.ts | 32 +- .../threadedBackgroundTokenizerFactory.ts | 40 +- .../textMateTokenizationWorker.worker.esm.ts | 4 +- .../textMateTokenizationWorker.worker.ts | 18 +- .../worker/textMateWorkerHost.ts | 6 +- .../worker/textMateWorkerTokenizer.ts | 32 +- ...extMateTokenizationFeature.contribution.ts | 8 +- .../browser/textMateTokenizationFeature.ts | 2 +- .../textMateTokenizationFeatureImpl.ts | 70 +- .../textMateTokenizationSupport.ts | 12 +- .../tokenizationSupportWithLineLimit.ts | 12 +- .../textMate/common/TMGrammarFactory.ts | 6 +- .../services/textMate/common/TMGrammars.ts | 6 +- .../textMate/common/TMScopeRegistry.ts | 6 +- .../test/browser/arrayOperation.test.ts | 4 +- .../browser/browserTextFileService.ts | 40 +- .../textfile/browser/textFileService.ts | 85 +- .../services/textfile/common/encoding.ts | 12 +- .../textfile/common/textEditorService.ts | 40 +- .../textfile/common/textFileEditorModel.ts | 62 +- .../common/textFileEditorModelManager.ts | 44 +- .../common/textFileSaveParticipant.ts | 14 +- .../services/textfile/common/textfiles.ts | 32 +- .../electron-sandbox/nativeTextFileService.ts | 46 +- .../browser/browserTextFileService.io.test.ts | 40 +- .../test/browser/textEditorService.test.ts | 38 +- .../textFileEditorModel.integrationTest.ts | 20 +- .../test/browser/textFileEditorModel.test.ts | 32 +- .../textFileEditorModelManager.test.ts | 22 +- .../test/browser/textFileService.test.ts | 12 +- .../textfile/test/common/fixtures/files.ts | 6 +- .../test/common/textFileService.io.test.ts | 20 +- .../nativeTextFileService.io.test.ts | 40 +- .../nativeTextFileService.test.ts | 32 +- .../node/encoding/encoding.integrationTest.ts | 4 +- .../test/node/encoding/encoding.test.ts | 14 +- .../common/textModelResolverService.ts | 32 +- .../browser/textModelResolverService.test.ts | 30 +- .../common/textResourcePropertiesService.ts | 20 +- .../browser/browserHostColorSchemeService.ts | 12 +- .../themes/browser/fileIconThemeData.ts | 33 +- .../themes/browser/productIconThemeData.ts | 28 +- .../themes/browser/workbenchThemeService.ts | 78 +- .../themes/common/colorExtensionPoint.ts | 20 +- .../services/themes/common/colorThemeData.ts | 42 +- .../themes/common/colorThemeSchema.ts | 12 +- .../themes/common/fileIconThemeSchema.ts | 10 +- .../themes/common/hostColorSchemeService.ts | 4 +- .../themes/common/iconExtensionPoint.ts | 16 +- .../themes/common/productIconThemeSchema.ts | 10 +- .../themes/common/themeCompatibility.ts | 8 +- .../themes/common/themeConfiguration.ts | 28 +- .../themes/common/themeExtensionPoints.ts | 26 +- .../tokenClassificationExtensionPoint.ts | 6 +- .../themes/common/workbenchThemeService.ts | 16 +- .../nativeHostColorSchemeService.ts | 18 +- .../electron-sandbox/themes.contribution.ts | 12 +- .../test/node/tokenStyleResolving.test.ts | 34 +- .../services/timer/browser/timerService.ts | 36 +- .../timer/electron-sandbox/timerService.ts | 32 +- .../services/title/browser/titleService.ts | 6 +- .../title/electron-sandbox/titleService.ts | 6 +- ...eSitterTokenizationFeature.contribution.ts | 10 +- .../browser/treeSitterTokenizationFeature.ts | 97 +- .../services/tunnel/browser/tunnelService.ts | 14 +- .../tunnel/electron-sandbox/tunnelService.ts | 28 +- .../common/untitledTextEditorHandler.ts | 34 +- .../common/untitledTextEditorInput.ts | 36 +- .../common/untitledTextEditorModel.ts | 50 +- .../common/untitledTextEditorService.ts | 20 +- .../untitledTextEditor.integrationTest.ts | 12 +- .../test/browser/untitledTextEditor.test.ts | 38 +- .../services/update/browser/updateService.ts | 12 +- .../update/electron-sandbox/updateService.ts | 6 +- .../services/url/browser/urlService.ts | 18 +- .../url/electron-sandbox/urlService.ts | 24 +- .../browser/domActivityTracker.ts | 10 +- .../browser/userActivityBrowser.ts | 4 +- .../common/userActivityRegistry.ts | 8 +- .../common/userActivityService.ts | 12 +- .../test/browser/domActivityTracker.test.ts | 6 +- .../test/common/userActivityService.test.ts | 6 +- .../services/userData/browser/userDataInit.ts | 14 +- .../browser/extensionsResource.ts | 41 +- .../browser/globalStateResource.ts | 24 +- .../userDataProfile/browser/iconSelectBox.ts | 10 +- .../browser/keybindingsResource.ts | 22 +- .../browser/settingsResource.ts | 28 +- .../browser/snippetsResource.ts | 24 +- .../userDataProfile/browser/tasksResource.ts | 20 +- .../userDataProfileImportExportService.ts | 72 +- .../browser/userDataProfileInit.ts | 40 +- .../browser/userDataProfileManagement.ts | 108 +- .../browser/userDataProfileStorageService.ts | 20 +- .../common/remoteUserDataProfiles.ts | 24 +- .../userDataProfile/common/userDataProfile.ts | 28 +- .../common/userDataProfileIcons.ts | 6 +- .../common/userDataProfileService.ts | 14 +- .../browser/userDataSyncEnablementService.ts | 8 +- .../userDataSync/browser/userDataSyncInit.ts | 64 +- .../browser/userDataSyncWorkbenchService.ts | 78 +- .../webUserDataSyncEnablementService.ts | 6 +- .../userDataSync/common/userDataSync.ts | 24 +- .../userDataSync/common/userDataSyncUtil.ts | 16 +- .../userDataAutoSyncService.ts | 10 +- .../electron-sandbox/userDataSyncService.ts | 12 +- .../utilityProcessWorkerWorkbenchService.ts | 20 +- .../views/browser/viewDescriptorService.ts | 38 +- .../services/views/browser/viewsService.ts | 97 +- .../views/common/viewContainerModel.ts | 40 +- .../services/views/common/viewsService.ts | 11 +- .../test/browser/viewContainerModel.test.ts | 32 +- .../browser/viewDescriptorService.test.ts | 28 +- .../browser/workingCopyBackupService.ts | 20 +- .../browser/workingCopyBackupTracker.ts | 20 +- .../browser/workingCopyHistoryService.ts | 20 +- .../common/abstractFileWorkingCopyManager.ts | 18 +- .../workingCopy/common/fileWorkingCopy.ts | 12 +- .../common/fileWorkingCopyManager.ts | 72 +- .../workingCopy/common/resourceWorkingCopy.ts | 16 +- .../common/storedFileWorkingCopy.ts | 54 +- .../common/storedFileWorkingCopyManager.ts | 56 +- .../storedFileWorkingCopySaveParticipant.ts | 16 +- .../common/untitledFileWorkingCopy.ts | 26 +- .../common/untitledFileWorkingCopyManager.ts | 24 +- .../workingCopy/common/workingCopy.ts | 10 +- .../workingCopy/common/workingCopyBackup.ts | 8 +- .../common/workingCopyBackupService.ts | 34 +- .../common/workingCopyBackupTracker.ts | 28 +- .../common/workingCopyEditorService.ts | 16 +- .../workingCopyFileOperationParticipant.ts | 14 +- .../common/workingCopyFileService.ts | 36 +- .../workingCopy/common/workingCopyHistory.ts | 10 +- .../common/workingCopyHistoryService.ts | 56 +- .../common/workingCopyHistoryTracker.ts | 42 +- .../workingCopy/common/workingCopyService.ts | 14 +- .../workingCopyBackupService.ts | 22 +- .../workingCopyBackupTracker.ts | 44 +- .../workingCopyHistoryService.ts | 6 +- .../browser/fileWorkingCopyManager.test.ts | 24 +- .../test/browser/resourceWorkingCopy.test.ts | 24 +- .../browser/storedFileWorkingCopy.test.ts | 34 +- .../storedFileWorkingCopyManager.test.ts | 28 +- .../browser/untitledFileWorkingCopy.test.ts | 26 +- .../untitledFileWorkingCopyManager.test.ts | 22 +- .../untitledScratchpadWorkingCopy.test.ts | 24 +- .../browser/workingCopyBackupTracker.test.ts | 50 +- .../browser/workingCopyEditorService.test.ts | 18 +- .../browser/workingCopyFileService.test.ts | 26 +- .../test/common/workingCopyService.test.ts | 12 +- .../workingCopyBackupService.test.ts | 60 +- .../workingCopyBackupTracker.test.ts | 82 +- .../workingCopyHistoryService.test.ts | 45 +- .../workingCopyHistoryTracker.test.ts | 48 +- .../abstractWorkspaceEditingService.ts | 56 +- .../browser/workspaceEditingService.ts | 40 +- .../browser/workspaceTrustEditorInput.ts | 16 +- .../services/workspaces/browser/workspaces.ts | 6 +- .../workspaces/browser/workspacesService.ts | 32 +- .../workspaces/common/canonicalUriService.ts | 10 +- .../common/editSessionIdentityService.ts | 16 +- .../workspaces/common/workspaceEditing.ts | 8 +- .../common/workspaceIdentityService.ts | 22 +- .../workspaces/common/workspaceTrust.ts | 42 +- .../workspaceEditingService.ts | 62 +- .../electron-sandbox/workspacesService.ts | 10 +- .../test/browser/workspaces.test.ts | 6 +- .../test/common/workspaceTrust.test.ts | 38 +- .../workbench/test/browser/codeeditor.test.ts | 44 +- .../test/browser/contributions.test.ts | 28 +- src/vs/workbench/test/browser/part.test.ts | 20 +- .../parts/editor/breadcrumbModel.test.ts | 20 +- .../parts/editor/diffEditorInput.test.ts | 14 +- .../test/browser/parts/editor/editor.test.ts | 36 +- .../editor/editorCommandsContext.test.ts | 26 +- .../parts/editor/editorDiffModel.test.ts | 18 +- .../parts/editor/editorGroupModel.test.ts | 42 +- .../browser/parts/editor/editorInput.test.ts | 28 +- .../browser/parts/editor/editorModel.test.ts | 66 +- .../browser/parts/editor/editorPane.test.ts | 48 +- .../editor/filteredEditorGroupModel.test.ts | 40 +- .../parts/editor/resourceEditorInput.test.ts | 30 +- .../editor/sideBySideEditorInput.test.ts | 14 +- .../parts/editor/textEditorPane.test.ts | 24 +- .../editor/textResourceEditorInput.test.ts | 18 +- .../parts/statusbar/statusbarModel.test.ts | 10 +- .../test/browser/quickAccess.test.ts | 32 +- src/vs/workbench/test/browser/viewlet.test.ts | 10 +- src/vs/workbench/test/browser/webview.test.ts | 4 +- src/vs/workbench/test/browser/window.test.ts | 14 +- .../test/browser/workbenchTestServices.ts | 365 +- src/vs/workbench/test/common/memento.test.ts | 10 +- .../test/common/notifications.test.ts | 18 +- .../workbench/test/common/resources.test.ts | 14 +- src/vs/workbench/test/common/utils.ts | 2 +- .../test/common/workbenchTestServices.ts | 56 +- .../electron-sandbox/resolveExternal.test.ts | 16 +- .../electron-sandbox/workbenchTestServices.ts | 95 +- src/vs/workbench/workbench.common.main.ts | 425 +- src/vs/workbench/workbench.desktop.main.ts | 177 +- .../workbench/workbench.web.main.internal.ts | 240 + src/vs/workbench/workbench.web.main.ts | 302 +- src/vscode-dts/vscode.d.ts | 37 +- .../vscode.proposed.aiTextSearchProvider.d.ts | 6 + ...code.proposed.aiTextSearchProviderNew.d.ts | 5 + ...ode.proposed.chatParticipantAdditions.d.ts | 33 +- .../vscode.proposed.chatProvider.d.ts | 4 + ...posed.contribChatParticipantDetection.d.ts | 7 + ...tribSourceControlHistoryItemGroupMenu.d.ts | 10 - ...d.contribSourceControlHistoryItemMenu.d.ts | 3 +- ...scode.proposed.defaultChatParticipant.d.ts | 10 +- ...vscode.proposed.fileSearchProviderNew.d.ts | 5 +- ...e.proposed.inlineCompletionsAdditions.d.ts | 2 +- src/vscode-dts/vscode.proposed.lmTools.d.ts | 56 +- .../vscode.proposed.mappedEditsProvider.d.ts | 44 +- .../vscode.proposed.notebookReplDocument.d.ts | 21 +- .../vscode.proposed.scmHistoryProvider.d.ts | 68 +- test/automation/package-lock.json | 22 - test/automation/package.json | 2 - test/automation/src/activityBar.ts | 1 - test/automation/src/electron.ts | 4 +- test/automation/src/playwrightBrowser.ts | 4 +- test/integration/browser/package-lock.json | 10 - test/integration/browser/package.json | 1 - test/monaco/package-lock.json | 6 +- test/smoke/package-lock.json | 22 - test/smoke/package.json | 2 - test/smoke/src/main.ts | 9 +- .../browser/{index.esm.js => index.amd.js} | 60 +- test/unit/browser/index.js | 56 +- .../{renderer.esm.html => renderer.amd.html} | 140 +- test/unit/browser/renderer.html | 134 +- .../electron/{index.esm.js => index.amd.js} | 12 +- test/unit/electron/index.js | 14 +- test/unit/electron/renderer.amd.html | 35 + .../{renderer.esm.js => renderer.amd.js} | 251 +- test/unit/electron/renderer.esm.html | 136 - test/unit/electron/renderer.html | 98 +- test/unit/electron/renderer.js | 77 +- test/unit/node/{index.js => index.amd.js} | 8 +- test/unit/node/index.mjs | 7 +- 4296 files changed, 94254 insertions(+), 72231 deletions(-) delete mode 100644 .dependencygraph/setting.json delete mode 100644 .eslintplugin/code-no-look-behind-regex.ts create mode 100644 .vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json create mode 100644 .vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json create mode 100644 .vscode/extensions/vscode-selfhost-import-aid/package-lock.json create mode 100644 .vscode/extensions/vscode-selfhost-import-aid/package.json create mode 100644 .vscode/extensions/vscode-selfhost-import-aid/src/extension.ts create mode 100644 .vscode/extensions/vscode-selfhost-import-aid/tsconfig.json rename cglicenses.json => .yarnrc (96%) create mode 100644 build/azure-pipelines/linux/apt-retry.sh rename build/lib/{esm.js => amd.js} (59%) rename build/lib/{esm.ts => amd.ts} (58%) create mode 100644 build/loader.min create mode 100644 build/npm/gyp/package-lock.json create mode 100644 extensions/ipynb/src/ipynbMain.browser.ts create mode 100644 extensions/ipynb/src/ipynbMain.node.ts create mode 100644 extensions/ipynb/src/notebookSerializer.node.ts rename src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemChangesMenu.d.ts => extensions/ipynb/src/notebookSerializer.web.ts (70%) create mode 100644 extensions/ipynb/src/notebookSerializerWorker.ts create mode 100644 extensions/microsoft-authentication/src/browser/fetch.ts create mode 100644 extensions/microsoft-authentication/src/common/event.ts create mode 100644 extensions/microsoft-authentication/src/node/cachedPublicClientApplication.ts create mode 100644 extensions/microsoft-authentication/src/node/fetch.ts create mode 100644 extensions/vscode-colorize-tests/test/colorize-fixtures/issue-224862.yaml create mode 100644 extensions/vscode-colorize-tests/test/colorize-results/issue-224862_yaml.json delete mode 100644 product_original.js create mode 100644 remote/web/.npmrc rename scripts/{test-esm.bat => test-amd.bat} (91%) rename scripts/{test-esm.sh => test-amd.sh} (89%) rename scripts/{test-integration-esm.bat => test-integration-amd.bat} (98%) rename scripts/{test-integration-esm.sh => test-integration-amd.sh} (98%) create mode 100644 src/package.json create mode 100644 src/typings/editContext.d.ts delete mode 100644 src/typings/vscode-globals-modules.d.ts create mode 100644 src/vs/base/common/observableInternal/commonFacade/cancellation.ts create mode 100644 src/vs/base/common/observableInternal/commonFacade/deps.ts create mode 100644 src/vs/base/common/observableInternal/index.ts create mode 100644 src/vs/base/common/observableInternal/utilsCancellation.ts rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/codeCacheCleaner.ts (82%) rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/extensions.ts (67%) rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/languagePackCachedDataCleaner.ts (83%) rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/localizationsUpdater.ts (70%) rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/logsDataCleaner.ts (72%) rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/storageDataCleaner.ts (71%) rename src/vs/code/{node => electron-utility}/sharedProcess/contrib/userDataProfilesCleaner.ts (73%) rename src/vs/code/{node => electron-utility}/sharedProcess/sharedProcessMain.ts (67%) create mode 100644 src/vs/editor/browser/controller/editContext/clipboardUtils.ts create mode 100644 src/vs/editor/browser/controller/editContext/editContextUtils.ts create mode 100644 src/vs/editor/browser/controller/editContext/native/debugEditContext.ts create mode 100644 src/vs/editor/browser/controller/editContext/native/nativeEditContext.css create mode 100644 src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts create mode 100644 src/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.ts create mode 100644 src/vs/editor/browser/controller/editContext/native/screenReaderSupport.ts create mode 100644 src/vs/editor/browser/controller/editContext/screenReaderUtils.ts rename src/vs/editor/browser/controller/{textAreaHandler.css => editContext/textArea/textAreaEditContext.css} (100%) rename src/vs/editor/browser/controller/{textAreaHandler.ts => editContext/textArea/textAreaEditContext.ts} (85%) rename src/vs/editor/browser/controller/{textAreaInput.ts => editContext/textArea/textAreaEditContextInput.ts} (92%) rename src/vs/editor/browser/controller/{textAreaState.ts => editContext/textArea/textAreaEditContextState.ts} (66%) create mode 100644 src/vs/editor/browser/gpu/atlas/atlas.ts create mode 100644 src/vs/editor/browser/gpu/atlas/textureAtlas.ts create mode 100644 src/vs/editor/browser/gpu/atlas/textureAtlasPage.ts create mode 100644 src/vs/editor/browser/gpu/atlas/textureAtlasShelfAllocator.ts create mode 100644 src/vs/editor/browser/gpu/atlas/textureAtlasSlabAllocator.ts create mode 100644 src/vs/editor/browser/gpu/bufferDirtyTracker.ts create mode 100644 src/vs/editor/browser/gpu/fullFileRenderStrategy.ts create mode 100644 src/vs/editor/browser/gpu/fullFileRenderStrategy.wgsl.ts create mode 100644 src/vs/editor/browser/gpu/gpu.ts create mode 100644 src/vs/editor/browser/gpu/gpuDisposable.ts create mode 100644 src/vs/editor/browser/gpu/gpuUtils.ts create mode 100644 src/vs/editor/browser/gpu/objectCollectionBuffer.ts create mode 100644 src/vs/editor/browser/gpu/raster/glyphRasterizer.ts create mode 100644 src/vs/editor/browser/gpu/raster/raster.ts create mode 100644 src/vs/editor/browser/gpu/rectangleRenderer.ts create mode 100644 src/vs/editor/browser/gpu/rectangleRenderer.wgsl.ts create mode 100644 src/vs/editor/browser/gpu/taskQueue.ts create mode 100644 src/vs/editor/browser/gpu/viewGpuContext.ts create mode 100644 src/vs/editor/browser/viewParts/rulersGpu/rulersGpu.ts rename src/vs/editor/browser/viewParts/{lines => viewLines}/domReadingContext.ts (100%) rename src/vs/editor/browser/viewParts/{lines => viewLines}/rangeUtil.ts (96%) rename src/vs/editor/browser/viewParts/{lines => viewLines}/viewLine.ts (87%) create mode 100644 src/vs/editor/browser/viewParts/viewLines/viewLineOptions.ts rename src/vs/editor/browser/viewParts/{lines => viewLines}/viewLines.css (100%) rename src/vs/editor/browser/viewParts/{lines => viewLines}/viewLines.ts (95%) create mode 100644 src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts create mode 100644 src/vs/editor/common/core/offsetEdit.ts create mode 100644 src/vs/editor/common/tokens/tokenArray.ts delete mode 100644 src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerContribution.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParticipantUtils.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerBody.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerInsertButton.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerStrip.ts delete mode 100644 src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts rename src/vs/editor/contrib/colorPicker/browser/{colorContributions.ts => hoverColorPicker/hoverColorPickerContribution.ts} (60%) create mode 100644 src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerWidget.ts rename src/vs/editor/contrib/colorPicker/browser/{ => standaloneColorPicker}/standaloneColorPickerActions.ts (74%) create mode 100644 src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerController.ts create mode 100644 src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.ts rename src/vs/editor/contrib/colorPicker/browser/{ => standaloneColorPicker}/standaloneColorPickerWidget.ts (68%) create mode 100644 src/vs/editor/contrib/gpu/browser/gpuActions.ts rename src/vs/editor/contrib/hover/browser/{contentHoverController2.ts => contentHoverController.ts} (89%) rename src/vs/editor/contrib/hover/browser/{marginHoverComputer.ts => glyphHoverComputer.ts} (53%) rename src/vs/editor/contrib/hover/browser/{marginHoverController.ts => glyphHoverController.ts} (76%) rename src/vs/editor/contrib/hover/browser/{marginHoverWidget.ts => glyphHoverWidget.ts} (68%) rename src/vs/editor/contrib/inlineCompletions/browser/model/{singleTextEdit.ts => computeGhostText.ts} (74%) create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.ts create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/model/inlineEditsAdapter.ts create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEditHelpers.ts rename src/vs/editor/contrib/inlineCompletions/browser/view/{ => ghostText}/ghostTextView.css (90%) create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts delete mode 100644 src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.ts create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.css create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.ts create mode 100644 src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils.ts delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/commands.ts delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/consts.ts delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/inlineEdits.contribution.ts delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/inlineEditsController.ts delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/inlineEditsModel.ts delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.css delete mode 100644 src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.ts create mode 100644 src/vs/editor/test/browser/view/gpu/atlas/testUtil.ts create mode 100644 src/vs/editor/test/browser/view/gpu/atlas/textureAtlas.test.ts create mode 100644 src/vs/editor/test/browser/view/gpu/atlas/textureAtlasAllocator.test.ts create mode 100644 src/vs/editor/test/browser/view/gpu/bufferDirtyTracker.test.ts create mode 100644 src/vs/editor/test/browser/view/gpu/objectCollectionBuffer.test.ts rename src/vs/editor/test/common/{controller/cursorMoveHelper.test.ts => core/cursorColumns.test.ts} (77%) create mode 100644 src/vs/platform/actions/browser/actionViewItemService.ts rename src/vs/platform/files/test/node/{nodejsWatcher.integrationTest.ts => nodejsWatcher.test.ts} (91%) rename src/vs/platform/files/test/node/{parcelWatcher.integrationTest.ts => parcelWatcher.test.ts} (93%) create mode 100644 src/vs/platform/observable/common/wrapInHotClass.ts delete mode 100644 src/vs/platform/request/browser/requestService.ts rename src/vs/platform/request/{electron-main/requestMainService.ts => electron-utility/requestService.ts} (74%) create mode 100644 src/vs/workbench/api/browser/mainThreadChatCodeMapper.ts create mode 100644 src/vs/workbench/api/common/extHostCodeMapper.ts create mode 100644 src/vs/workbench/contrib/authentication/browser/actions/manageAccountPreferencesForExtensionAction.ts create mode 100644 src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatContentParts/chatToolInvocationPart.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatDragAndDrop.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatEditingService.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatGettingStarted.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatImagePaste.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatInlineAnchorWidget.ts create mode 100644 src/vs/workbench/contrib/chat/browser/chatPasteProviders.ts create mode 100644 src/vs/workbench/contrib/chat/browser/media/chatInlineAnchorWidget.css create mode 100644 src/vs/workbench/contrib/chat/common/chatCodeMapperService.ts create mode 100644 src/vs/workbench/contrib/chat/common/chatEditingService.ts create mode 100644 src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.ts create mode 100644 src/vs/workbench/contrib/debug/browser/debugExpressionRenderer.ts create mode 100644 src/vs/workbench/contrib/emergencyAlert/electron-sandbox/emergencyAlert.contribution.ts delete mode 100644 src/vs/workbench/contrib/inlineChat/browser/inlineChatContentWidget.ts delete mode 100644 src/vs/workbench/contrib/inlineChat/browser/media/inlineChatContentWidget.css create mode 100644 src/vs/workbench/contrib/inlineChat/test/browser/__snapshots__/InlineChatSession_Apply_Code_s_preview_should_be_easier_to_undo_esc__7537.1.snap create mode 100644 src/vs/workbench/contrib/inlineChat/test/browser/__snapshots__/InlineChatSession_Apply_Code_s_preview_should_be_easier_to_undo_esc__7537.2.snap delete mode 100644 src/vs/workbench/contrib/issue/browser/test/testReporterModel.test.ts create mode 100644 src/vs/workbench/contrib/markdown/browser/markedGfmHeadingIdPlugin.ts create mode 100644 src/vs/workbench/contrib/notebook/browser/diff/editorHeightCalculator.ts create mode 100644 src/vs/workbench/contrib/notebook/browser/diff/unchangedEditorRegions.ts create mode 100644 src/vs/workbench/contrib/notebook/common/model/notebookMetadataTextModel.ts create mode 100644 src/vs/workbench/contrib/notebook/test/browser/diff/editorHeightCalculator.test.ts rename src/vs/workbench/contrib/notebook/test/browser/{ => diff}/notebookDiff.test.ts (88%) create mode 100644 src/vs/workbench/contrib/replNotebook/browser/replEditorAccessibilityHelp.ts delete mode 100644 src/vs/workbench/contrib/terminal/browser/terminalContribExports.ts create mode 100644 src/vs/workbench/contrib/terminal/browser/terminalKeybindings.ts rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/CodeTabExpansion.psm1 (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/GitTabExpansion.psm1 (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/cgmanifest.json (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish (98%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/shellIntegration-bash.sh (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/shellIntegration-env.zsh (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/shellIntegration-login.zsh (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/shellIntegration-profile.zsh (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/shellIntegration-rc.zsh (100%) rename src/vs/workbench/contrib/terminal/{browser/media => common/scripts}/shellIntegration.ps1 (97%) create mode 100644 src/vs/workbench/contrib/terminal/terminalContribExports.ts create mode 100644 src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedAccessibleView.ts create mode 100644 src/vs/workbench/workbench.web.main.internal.ts create mode 100644 src/vscode-dts/vscode.proposed.contribChatParticipantDetection.d.ts delete mode 100644 src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemGroupMenu.d.ts rename test/unit/browser/{index.esm.js => index.amd.js} (89%) rename test/unit/browser/{renderer.esm.html => renderer.amd.html} (57%) rename test/unit/electron/{index.esm.js => index.amd.js} (95%) create mode 100644 test/unit/electron/renderer.amd.html rename test/unit/electron/{renderer.esm.js => renderer.amd.js} (56%) delete mode 100644 test/unit/electron/renderer.esm.html rename test/unit/node/{index.js => index.amd.js} (96%) diff --git a/.dependencygraph/setting.json b/.dependencygraph/setting.json deleted file mode 100644 index 0add7e661..000000000 --- a/.dependencygraph/setting.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "alias": false, - "resolveExtensions": [ - ".js", - ".jsx", - ".ts", - ".tsx", - ".vue", - ".scss", - ".less" - ], - "entryFilePath": "/src/vs/code/electron-main/main.ts" -} \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 88e150fc4..75076a0f8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "Void", + "name": "Code - OSS", "build": { "dockerfile": "Dockerfile" }, diff --git a/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts b/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts index ae3089036..9d3044f50 100644 --- a/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts +++ b/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts @@ -12,7 +12,8 @@ export = new class EnsureNoDisposablesAreLeakedInTestSuite implements eslint.Rul type: 'problem', messages: { ensure: 'Suites should include a call to `ensureNoDisposablesAreLeakedInTestSuite()` to ensure no disposables are leaked in tests.' - } + }, + fixable: 'code' }; create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { @@ -30,6 +31,10 @@ export = new class EnsureNoDisposablesAreLeakedInTestSuite implements eslint.Rul context.report({ node, messageId: 'ensure', + fix: (fixer) => { + const updatedSrc = src.replace(/(suite\(.*\n)/, '$1\n\tensureNoDisposablesAreLeakedInTestSuite();\n'); + return fixer.replaceText(node, updatedSrc); + } }); } }, diff --git a/.eslintplugin/code-import-patterns.ts b/.eslintplugin/code-import-patterns.ts index 1f08bb4a4..460409514 100644 --- a/.eslintplugin/code-import-patterns.ts +++ b/.eslintplugin/code-import-patterns.ts @@ -12,19 +12,19 @@ import { createImportRuleListener } from './utils'; const REPO_ROOT = path.normalize(path.join(__dirname, '../')); interface ConditionalPattern { - when?: 'hasBrowser' | 'hasNode' | 'test'; + when?: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test'; pattern: string; } interface RawImportPatternsConfig { target: string; - layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main'; + layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-utility' | 'electron-main'; test?: boolean; restrictions: string | (string | ConditionalPattern)[]; } interface LayerAllowRule { - when: 'hasBrowser' | 'hasNode' | 'test'; + when: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test'; allow: string[]; } @@ -44,7 +44,9 @@ export = new class implements eslint.Rule.RuleModule { readonly meta: eslint.Rule.RuleMetaData = { messages: { badImport: 'Imports violates \'{{restrictions}}\' restrictions. See https://github.com/microsoft/vscode/wiki/Source-Code-Organization', - badFilename: 'Missing definition in `code-import-patterns` for this file. Define rules at https://github.com/microsoft/vscode/blob/main/.eslintrc.json' + badFilename: 'Missing definition in `code-import-patterns` for this file. Define rules at https://github.com/microsoft/vscode/blob/main/.eslintrc.json', + badAbsolute: 'Imports have to be relative to support ESM', + badExtension: 'Imports have to end with `.js` or `.css` to support ESM', }, docs: { url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization' @@ -77,13 +79,14 @@ export = new class implements eslint.Rule.RuleModule { return this._optionsCache.get(options)!; } - type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main'; + type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-utility' | 'electron-main'; interface ILayerRule { layer: Layer; deps: string; isBrowser?: boolean; isNode?: boolean; + isElectron?: boolean; } function orSegment(variants: Layer[]): string { @@ -96,11 +99,13 @@ export = new class implements eslint.Rule.RuleModule { { layer: 'browser', deps: orSegment(['common', 'browser']), isBrowser: true }, { layer: 'electron-sandbox', deps: orSegment(['common', 'browser', 'electron-sandbox']), isBrowser: true }, { layer: 'node', deps: orSegment(['common', 'node']), isNode: true }, - { layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-main']), isNode: true }, + { layer: 'electron-utility', deps: orSegment(['common', 'node', 'electron-utility']), isNode: true, isElectron: true }, + { layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-utility', 'electron-main']), isNode: true, isElectron: true }, ]; let browserAllow: string[] = []; let nodeAllow: string[] = []; + let electronAllow: string[] = []; let testAllow: string[] = []; for (const option of options) { if (isLayerAllowRule(option)) { @@ -108,6 +113,8 @@ export = new class implements eslint.Rule.RuleModule { browserAllow = option.allow.slice(0); } else if (option.when === 'hasNode') { nodeAllow = option.allow.slice(0); + } else if (option.when === 'hasElectron') { + electronAllow = option.allow.slice(0); } else if (option.when === 'test') { testAllow = option.allow.slice(0); } @@ -135,9 +142,13 @@ export = new class implements eslint.Rule.RuleModule { restrictions.push(...nodeAllow); } + if (layerRule.isElectron) { + restrictions.push(...electronAllow); + } + for (const rawRestriction of rawRestrictions) { let importPattern: string; - let when: 'hasBrowser' | 'hasNode' | 'test' | undefined = undefined; + let when: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test' | undefined = undefined; if (typeof rawRestriction === 'string') { importPattern = rawRestriction; } else { @@ -147,6 +158,7 @@ export = new class implements eslint.Rule.RuleModule { if (typeof when === 'undefined' || (when === 'hasBrowser' && layerRule.isBrowser) || (when === 'hasNode' && layerRule.isNode) + || (when === 'hasElectron' && layerRule.isElectron) ) { restrictions.push(importPattern.replace(/\/\~$/, `/${layerRule.deps}/**`)); testRestrictions.push(importPattern.replace(/\/\~$/, `/test/${layerRule.deps}/**`)); @@ -181,8 +193,8 @@ export = new class implements eslint.Rule.RuleModule { if (targetIsVS) { // Always add "vs/nls" and "vs/amdX" - restrictions.push('vs/nls'); - restrictions.push('vs/amdX'); // TODO@jrieken remove after ESM is real + restrictions.push('vs/nls.js'); + restrictions.push('vs/amdX.js'); // TODO@jrieken remove after ESM is real } if (targetIsVS && option.layer) { @@ -212,6 +224,25 @@ export = new class implements eslint.Rule.RuleModule { } private _checkImport(context: eslint.Rule.RuleContext, config: ImportPatternsConfig, node: TSESTree.Node, importPath: string) { + const targetIsVS = /^src\/vs\//.test(getRelativeFilename(context)); + if (targetIsVS) { + + // ESM: check for import ending with ".js" or ".css" + if (importPath[0] === '.' && !importPath.endsWith('.js') && !importPath.endsWith('.css')) { + context.report({ + loc: node.loc, + messageId: 'badExtension', + }); + } + + // check for import being relative + if (importPath.startsWith('vs/')) { + context.report({ + loc: node.loc, + messageId: 'badAbsolute', + }); + } + } // resolve relative paths if (importPath[0] === '.') { diff --git a/.eslintplugin/code-no-look-behind-regex.ts b/.eslintplugin/code-no-look-behind-regex.ts deleted file mode 100644 index 800b59b64..000000000 --- a/.eslintplugin/code-no-look-behind-regex.ts +++ /dev/null @@ -1,50 +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 eslint from 'eslint'; -import { TSESTree } from '@typescript-eslint/experimental-utils'; -import * as ESTree from 'estree'; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const _positiveLookBehind = /\(\?<=.+/; -const _negativeLookBehind = /\(\? { - type RegexLiteral = TSESTree.Literal & { regex: { pattern: string; flags: string } }; - const pattern = (node).regex?.pattern; - if (_containsLookBehind(pattern)) { - context.report({ - node, - message: 'Look behind assertions are not yet supported in all browsers' - }); - } - }, - // new Regex("...") - ['NewExpression[callee.name="RegExp"] Literal']: (node: ESTree.Literal) => { - if (_containsLookBehind(node.value)) { - context.report({ - node, - message: 'Look behind assertions are not yet supported in all browsers' - }); - } - } - }; - } -}; diff --git a/.eslintrc.json b/.eslintrc.json index 601f7eb94..173412e7c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -92,22 +92,27 @@ "common", "browser" ], - "electron-main": [ + "electron-utility": [ "common", "node" + ], + "electron-main": [ + "common", + "node", + "electron-utility" ] } + ], + "header/header": [ + 2, + "block", + [ + "---------------------------------------------------------------------------------------------", + " * Copyright (c) Microsoft Corporation. All rights reserved.", + " * Licensed under the MIT License. See License.txt in the project root for license information.", + " *--------------------------------------------------------------------------------------------" + ] ] - // "header/header": [ - // 2, - // "block", - // [ - // "---------------------------------------------------------------------------------------------", - // " * Copyright (c) Microsoft Corporation. All rights reserved.", - // " * Licensed under the MIT License. See License.txt in the project root for license information.", - // " *--------------------------------------------------------------------------------------------" - // ] - // ] }, "overrides": [ { @@ -611,12 +616,64 @@ ] } }, + { + "files": [ + "src/**/electron-utility/**/*.ts" + ], + "rules": { + "no-restricted-imports": [ + "warn", + { + "paths": [ + { + "name": "electron", + "importNames": [ + "app", + "autoUpdater", + "BaseWindow", + "BrowserWindow", + "contentTracing", + "desktopCapturer", + "dialog", + "globalShortcut", + "inAppPurchase", + "ipcMain", + "Menu", + "MenuItem", + "MessageChannelMain", + "MessagePortMain", + "nativeTheme", + "netLog", + "Notification", + "powerMonitor", + "powerSaveBlocker", + "protocol", + "pushNotifications", + "safeStorage", + "screen", + "session", + "ShareMenu", + "TouchBar", + "Tray", + "utilityProcess", + "View", + "webContents", + "webFrameMain", + "webContentsView", + "default" + ], + "message": "Only net and system-preferences are allowed to be imported from electron" + } + ] + } + ] + } + }, { "files": [ "src/**/*.ts" ], "rules": { - "local/code-no-look-behind-regex": "warn", "local/code-import-patterns": [ "warn", { @@ -631,6 +688,7 @@ { // imports that are allowed in all files of layers: // - node + // - electron-utility // - electron-main "when": "hasNode", "allow": [ @@ -649,13 +707,13 @@ "cookie", "crypto", "dns", - "electron", "events", "fs", "fs/promises", "http", "https", "minimist", + "node:module", "native-keymap", "native-watchdog", "net", @@ -687,11 +745,21 @@ "zlib" ] }, + { + // imports that are allowed in all files of layers: + // - electron-utility + // - electron-main + "when": "hasElectron", + "allow": [ + "electron" + ] + }, { // imports that are allowed in all /test/ files "when": "test", "allow": [ "vs/css.build", + "vs/css.build.js", "assert", "sinon", "sinon-test" @@ -746,7 +814,8 @@ "vs/platform/*/~", "tas-client-umd", // node module allowed even in /common/ "@microsoft/1ds-core-js", // node module allowed even in /common/ - "@microsoft/1ds-post-js" // node module allowed even in /common/ + "@microsoft/1ds-post-js", // node module allowed even in /common/ + "@xterm/headless" // node module allowed even in /common/ ] }, { @@ -777,7 +846,8 @@ "vs/platform/*/~", "vs/editor/~", "vs/editor/contrib/*/~", - "vs/editor/standalone/~" + "vs/editor/standalone/~", + "@vscode/tree-sitter-wasm" // type import ] }, { @@ -863,6 +933,7 @@ "tas-client-umd", // node module allowed even in /common/ "vscode-textmate", // node module allowed even in /common/ "@vscode/vscode-languagedetection", // node module allowed even in /common/ + "@vscode/tree-sitter-wasm", // type import { "when": "hasBrowser", "pattern": "@xterm/xterm" @@ -880,6 +951,7 @@ "vs/workbench/~", "vs/workbench/services/*/~", "vs/workbench/contrib/*/~", + "vs/workbench/contrib/terminal/terminalContribExports*", "vscode-notebook-renderer", // Type only import { "when": "hasBrowser", @@ -909,6 +981,7 @@ // Only allow terminalContrib to import from itself, this works because // terminalContrib is one extra folder deep "vs/workbench/contrib/terminalContrib/*/~", + "vs/workbench/contrib/terminal/terminalContribExports*", "vscode-notebook-renderer", // Type only import { "when": "hasBrowser", @@ -921,7 +994,8 @@ { "when": "hasBrowser", "pattern": "vscode-textmate" - } // node module allowed even in /browser/ + }, // node module allowed even in /browser/ + "@xterm/headless" // node module allowed even in /common/ and /browser/ ] }, { @@ -937,6 +1011,18 @@ "when": "hasBrowser", "pattern": "vs/workbench/workbench.web.main" }, + { + "when": "hasBrowser", + "pattern": "vs/workbench/workbench.web.main.js" + }, + { + "when": "hasBrowser", + "pattern": "vs/workbench/workbench.web.main.internal" + }, + { + "when": "hasBrowser", + "pattern": "vs/workbench/workbench.web.main.internal.js" + }, { "when": "hasBrowser", "pattern": "vs/workbench/~" @@ -967,6 +1053,13 @@ "vs/workbench/contrib/**" ] }, + { + "target": "src/vs/workbench/contrib/terminal/terminalContribExports.ts", + "layer": "browser", + "restrictions": [ + "vs/workbench/contrib/terminalContrib/*/~" + ] + }, { "target": "src/vs/workbench/workbench.common.main.ts", "layer": "browser", @@ -977,11 +1070,13 @@ "vs/editor/~", "vs/editor/contrib/*/~", "vs/editor/editor.all", + "vs/editor/editor.all.js", "vs/workbench/~", "vs/workbench/api/~", "vs/workbench/services/*/~", "vs/workbench/contrib/*/~", - "vs/workbench/contrib/terminal/terminal.all" + "vs/workbench/contrib/terminal/terminal.all", + "vs/workbench/contrib/terminal/terminal.all.js" ] }, { @@ -994,11 +1089,32 @@ "vs/editor/~", "vs/editor/contrib/*/~", "vs/editor/editor.all", + "vs/editor/editor.all.js", + "vs/workbench/~", + "vs/workbench/api/~", + "vs/workbench/services/*/~", + "vs/workbench/contrib/*/~", + "vs/workbench/workbench.common.main", + "vs/workbench/workbench.common.main.js" + ] + }, + { + "target": "src/vs/workbench/workbench.web.main.internal.ts", + "layer": "browser", + "restrictions": [ + "vs/base/~", + "vs/base/parts/*/~", + "vs/platform/*/~", + "vs/editor/~", + "vs/editor/contrib/*/~", + "vs/editor/editor.all", + "vs/editor/editor.all.js", "vs/workbench/~", "vs/workbench/api/~", "vs/workbench/services/*/~", "vs/workbench/contrib/*/~", - "vs/workbench/workbench.common.main" + "vs/workbench/workbench.common.main", + "vs/workbench/workbench.common.main.js" ] }, { @@ -1011,11 +1127,13 @@ "vs/editor/~", "vs/editor/contrib/*/~", "vs/editor/editor.all", + "vs/editor/editor.all.js", "vs/workbench/~", "vs/workbench/api/~", "vs/workbench/services/*/~", "vs/workbench/contrib/*/~", - "vs/workbench/workbench.common.main" + "vs/workbench/workbench.common.main", + "vs/workbench/workbench.common.main.js" ] }, { @@ -1025,7 +1143,7 @@ ] }, { - "target": "src/vs/{loader.d.ts,css.ts,css.build.ts,monaco.d.ts,nls.messages.ts,nls.ts}", + "target": "src/vs/{loader.d.ts,css.ts,css.build.ts,monaco.d.ts,nls.ts,nls.messages.ts}", "restrictions": [] }, { diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index c0c9a5441..203e213b6 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -26,3 +26,6 @@ ee1655a82ebdfd38bf8792088a6602c69f7bbd94 # jrieken: new eslint-rule 4a130c40ed876644ed8af2943809d08221375408 + +# bpasero: ESM migration +6b924c51528e663dda5091a1493229a361676aca diff --git a/.npmrc b/.npmrc index 2f4cb22c9..87dc701a6 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,6 @@ disturl="https://electronjs.org/headers" -target="30.4.0" -ms_build_id="10073054" +target="30.5.1" +ms_build_id="10262041" runtime="electron" build_from_source="true" legacy-peer-deps="true" diff --git a/.nvmrc b/.nvmrc index b8e593f52..8ce703082 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.15.1 +20.16.0 diff --git a/.vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json new file mode 100644 index 000000000..50b8aedaf --- /dev/null +++ b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + "configurations": [ + { + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--enable-proposed-api=ms-vscode.vscode-selfhost-import-aid" + ], + "name": "Launch Extension", + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "request": "launch", + "type": "extensionHost" + } + ] +} diff --git a/.vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json new file mode 100644 index 000000000..e4429caee --- /dev/null +++ b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "vscode.typescript-language-features", + "editor.codeActionsOnSave": { + "source.organizeImports": "always" + } +} diff --git a/.vscode/extensions/vscode-selfhost-import-aid/package-lock.json b/.vscode/extensions/vscode-selfhost-import-aid/package-lock.json new file mode 100644 index 000000000..5f526aca3 --- /dev/null +++ b/.vscode/extensions/vscode-selfhost-import-aid/package-lock.json @@ -0,0 +1,31 @@ +{ + "name": "vscode-selfhost-import-aid", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vscode-selfhost-import-aid", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "typescript": "5.5.4" + }, + "engines": { + "vscode": "^1.88.0" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/.vscode/extensions/vscode-selfhost-import-aid/package.json b/.vscode/extensions/vscode-selfhost-import-aid/package.json new file mode 100644 index 000000000..30f09f9c8 --- /dev/null +++ b/.vscode/extensions/vscode-selfhost-import-aid/package.json @@ -0,0 +1,29 @@ +{ + "name": "vscode-selfhost-import-aid", + "displayName": "VS Code Selfhost Import Aid", + "description": "Util to improve dealing with imports", + "engines": { + "vscode": "^1.88.0" + }, + "version": "0.0.1", + "publisher": "ms-vscode", + "categories": [ + "Other" + ], + "activationEvents": [ + "onLanguage:typescript" + ], + "main": "./out/extension.js", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/vscode.git" + }, + "license": "MIT", + "scripts": { + "compile": "gulp compile-extension:vscode-selfhost-import-aid", + "watch": "gulp watch-extension:vscode-selfhost-import-aid" + }, + "dependencies": { + "typescript": "5.5.4" + } +} diff --git a/.vscode/extensions/vscode-selfhost-import-aid/src/extension.ts b/.vscode/extensions/vscode-selfhost-import-aid/src/extension.ts new file mode 100644 index 000000000..91627e69f --- /dev/null +++ b/.vscode/extensions/vscode-selfhost-import-aid/src/extension.ts @@ -0,0 +1,234 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import * as ts from 'typescript'; +import * as path from 'path'; + +export async function activate(context: vscode.ExtensionContext) { + + const fileIndex = new class { + + private _currentRun?: Thenable; + + private _disposables: vscode.Disposable[] = []; + + private readonly _index = new Map(); + + constructor() { + const watcher = vscode.workspace.createFileSystemWatcher('**/*.ts', false, true, false); + this._disposables.push(watcher.onDidChange(e => { this._index.set(e.toString(), e); })); + this._disposables.push(watcher.onDidDelete(e => { this._index.delete(e.toString()); })); + this._disposables.push(watcher); + + this._refresh(false); + } + + dispose(): void { + for (const disposable of this._disposables) { + disposable.dispose(); + } + this._disposables = []; + this._index.clear(); + } + + async all(token: vscode.CancellationToken) { + + await Promise.race([this._currentRun, new Promise(resolve => token.onCancellationRequested(resolve))]); + + if (token.isCancellationRequested) { + return undefined; + } + + return Array.from(this._index.values()); + } + + private _refresh(clear: boolean) { + // TODO@jrieken LATEST API! findFiles2New + this._currentRun = vscode.workspace.findFiles('src/vs/**/*.ts', '{**/node_modules/**,**/extensions/**}').then(all => { + if (clear) { + this._index.clear(); + } + for (const item of all) { + this._index.set(item.toString(), item); + } + }); + } + }; + + const selector: vscode.DocumentSelector = 'typescript'; + + function findNodeAtPosition(document: vscode.TextDocument, node: ts.Node, position: vscode.Position): ts.Node | undefined { + if (node.getStart() <= document.offsetAt(position) && node.getEnd() >= document.offsetAt(position)) { + return ts.forEachChild(node, child => findNodeAtPosition(document, child, position)) || node; + } + return undefined; + } + + function findImportAt(document: vscode.TextDocument, position: vscode.Position): ts.ImportDeclaration | undefined { + const sourceFile = ts.createSourceFile(document.fileName, document.getText(), ts.ScriptTarget.Latest, true); + const node = findNodeAtPosition(document, sourceFile, position); + if (node && ts.isStringLiteral(node) && ts.isImportDeclaration(node.parent)) { + return node.parent; + } + return undefined; + } + + const completionProvider = new class implements vscode.CompletionItemProvider { + async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise { + + const index = document.getText().lastIndexOf(' from \''); + if (index < 0 || document.positionAt(index).line < position.line) { + // line after last import is before position + // -> no completion, safe a parse call + return undefined; + } + + const node = findImportAt(document, position); + if (!node) { + return undefined; + } + + const range = new vscode.Range(document.positionAt(node.moduleSpecifier.pos), document.positionAt(node.moduleSpecifier.end)); + const uris = await fileIndex.all(token); + + if (!uris) { + return undefined; + } + + const result = new vscode.CompletionList(); + result.isIncomplete = true; + + for (const item of uris) { + + if (!item.path.endsWith('.ts')) { + continue; + } + + let relativePath = path.relative(path.dirname(document.uri.path), item.path); + relativePath = relativePath.startsWith('.') ? relativePath : `./${relativePath}`; + + const label = path.basename(item.path, path.extname(item.path)); + const insertText = ` '${relativePath.replace(/\.ts$/, '.js')}'`; + const filterText = ` '${label}'`; + + const completion = new vscode.CompletionItem({ + label: label, + description: vscode.workspace.asRelativePath(item), + }); + completion.kind = vscode.CompletionItemKind.File; + completion.insertText = insertText; + completion.filterText = filterText; + completion.range = range; + + result.items.push(completion); + } + + return result; + } + }; + + class ImportCodeActions implements vscode.CodeActionProvider { + + static FixKind = vscode.CodeActionKind.QuickFix.append('esmImport'); + + static SourceKind = vscode.CodeActionKind.SourceFixAll.append('esmImport'); + + async provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise { + + if (context.only && ImportCodeActions.SourceKind.intersects(context.only)) { + return this._provideFixAll(document, context, token); + } + + return this._provideFix(document, range, context, token); + } + + private async _provideFixAll(document: vscode.TextDocument, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise { + + const diagnostics = context.diagnostics + .filter(d => d.code === 2307) + .sort((a, b) => b.range.start.compareTo(a.range.start)); + + if (diagnostics.length === 0) { + return undefined; + } + + const uris = await fileIndex.all(token); + if (!uris) { + return undefined; + } + + const result = new vscode.CodeAction(`Fix All ESM Imports`, ImportCodeActions.SourceKind); + result.edit = new vscode.WorkspaceEdit(); + result.diagnostics = []; + + for (const diag of diagnostics) { + + const actions = this._provideFixesForDiag(document, diag, uris); + + if (actions.length === 0) { + console.log(`ESM: no fixes for "${diag.message}"`); + continue; + } + + if (actions.length > 1) { + console.log(`ESM: more than one fix for "${diag.message}", taking first`); + console.log(actions); + } + + const [first] = actions; + result.diagnostics.push(diag); + + for (const [uri, edits] of first.edit!.entries()) { + result.edit.set(uri, edits); + } + } + // console.log(result.edit.get(document.uri)); + return [result]; + } + + private async _provideFix(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise { + const uris = await fileIndex.all(token); + if (!uris) { + return []; + } + + const diag = context.diagnostics.find(d => d.code === 2307 && d.range.intersection(range)); + return diag && this._provideFixesForDiag(document, diag, uris); + } + + private _provideFixesForDiag(document: vscode.TextDocument, diag: vscode.Diagnostic, uris: Iterable): vscode.CodeAction[] { + + const node = findImportAt(document, diag.range.start)?.moduleSpecifier; + if (!node || !ts.isStringLiteral(node)) { + return []; + } + + const nodeRange = new vscode.Range(document.positionAt(node.pos), document.positionAt(node.end)); + const name = path.basename(node.text, path.extname(node.text)); + + const result: vscode.CodeAction[] = []; + + for (const item of uris) { + if (path.basename(item.path, path.extname(item.path)) === name) { + let relativePath = path.relative(path.dirname(document.uri.path), item.path).replace(/\.ts$/, '.js'); + relativePath = relativePath.startsWith('.') ? relativePath : `./${relativePath}`; + + const action = new vscode.CodeAction(`Fix to '${relativePath}'`, ImportCodeActions.FixKind); + action.edit = new vscode.WorkspaceEdit(); + action.edit.replace(document.uri, nodeRange, ` '${relativePath}'`); + action.diagnostics = [diag]; + result.push(action); + } + } + + return result; + } + } + + context.subscriptions.push(fileIndex); + context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, completionProvider)); + context.subscriptions.push(vscode.languages.registerCodeActionsProvider(selector, new ImportCodeActions(), { providedCodeActionKinds: [ImportCodeActions.FixKind, ImportCodeActions.SourceKind] })); +} diff --git a/.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json b/.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json new file mode 100644 index 000000000..bbca76708 --- /dev/null +++ b/.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../extensions/tsconfig.base.json", + "compilerOptions": { + "outDir": "./out", + "types": [ + "node", + "mocha", + ] + }, + "include": [ + "src/**/*", + "../../../src/vscode-dts/vscode.d.ts" + ] +} diff --git a/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json b/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json index 8f3938484..a71a68e4e 100644 --- a/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json +++ b/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json @@ -31,9 +31,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -50,18 +50,18 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/mocha": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", - "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true }, "node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", "dev": true, "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~5.26.4" } }, "node_modules/ansi-styles": { @@ -76,25 +76,25 @@ } }, "node_modules/cockatiel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", - "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.3.tgz", + "integrity": "sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==", "engines": { "node": ">=16" } }, "node_modules/istanbul-to-vscode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istanbul-to-vscode/-/istanbul-to-vscode-2.1.0.tgz", - "integrity": "sha512-Z5dUFUxYtVc2aCyp/ewCHdOF8v9cTEPFOgtAuZcMiAWDsjv9zgoKLYxd9Y6BvkoxK3Fc+ihc4qd7zfmHsmOo0w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-to-vscode/-/istanbul-to-vscode-2.0.1.tgz", + "integrity": "sha512-V9Hhr7kX3UvkvkaT1lK3AmCRPkaIAIogQBrduTpNiLTkp1eVsybnJhWiDSVeCQap/3aGeZ2019oIivhX9MNsCQ==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.6" } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true } } diff --git a/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts b/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts index 56b26cafd..3ed21cf58 100644 --- a/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts +++ b/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts @@ -8,6 +8,7 @@ import * as vscode from 'vscode'; import { TestCase, TestConstruct, TestSuite, VSCodeTest } from './testTree'; const suiteNames = new Set(['suite', 'flakySuite']); +const testNames = new Set(['test']); export const enum Action { Skip, @@ -19,22 +20,19 @@ export const extractTestFromNode = (src: ts.SourceFile, node: ts.Node, parent: V return Action.Recurse; } - let lhs = node.expression; - if (isSkipCall(lhs)) { + const asSuite = identifyCall(node.expression, suiteNames); + const asTest = identifyCall(node.expression, testNames); + const either = asSuite || asTest; + if (either === IdentifiedCall.Skipped) { return Action.Skip; } - - if (isPropertyCall(lhs) && lhs.name.text === 'only') { - lhs = lhs.expression; + if (either === IdentifiedCall.Nothing) { + return Action.Recurse; } const name = node.arguments[0]; const func = node.arguments[1]; - if (!name || !ts.isIdentifier(lhs) || !ts.isStringLiteralLike(name)) { - return Action.Recurse; - } - - if (!func) { + if (!name || !ts.isStringLiteralLike(name) || !func) { return Action.Recurse; } @@ -46,23 +44,45 @@ export const extractTestFromNode = (src: ts.SourceFile, node: ts.Node, parent: V ); const cparent = parent instanceof TestConstruct ? parent : undefined; - if (lhs.escapedText === 'test') { + + // we know this is either a suite or a test because we checked for skipped/nothing above + + if (asTest) { return new TestCase(name.text, range, cparent); } - if (suiteNames.has(lhs.escapedText.toString())) { + if (asSuite) { return new TestSuite(name.text, range, cparent); } - return Action.Recurse; + throw new Error('unreachable'); +}; + +const enum IdentifiedCall { + Nothing, + Skipped, + IsThing, +} + +const identifyCall = (lhs: ts.Node, needles: ReadonlySet): IdentifiedCall => { + if (ts.isIdentifier(lhs)) { + return needles.has(lhs.escapedText || lhs.text) ? IdentifiedCall.IsThing : IdentifiedCall.Nothing; + } + + if (isPropertyCall(lhs) && lhs.name.text === 'skip') { + return needles.has(lhs.expression.text) ? IdentifiedCall.Skipped : IdentifiedCall.Nothing; + } + + if (ts.isParenthesizedExpression(lhs) && ts.isConditionalExpression(lhs.expression)) { + return Math.max(identifyCall(lhs.expression.whenTrue, needles), identifyCall(lhs.expression.whenFalse, needles)); + } + + return IdentifiedCall.Nothing; }; const isPropertyCall = ( - lhs: ts.LeftHandSideExpression + lhs: ts.Node ): lhs is ts.PropertyAccessExpression & { expression: ts.Identifier; name: ts.Identifier } => ts.isPropertyAccessExpression(lhs) && ts.isIdentifier(lhs.expression) && ts.isIdentifier(lhs.name); - -const isSkipCall = (lhs: ts.LeftHandSideExpression) => - isPropertyCall(lhs) && suiteNames.has(lhs.expression.text) && lhs.name.text === 'skip'; diff --git a/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts b/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts index 954b847f4..b5ffd440b 100644 --- a/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts +++ b/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts @@ -63,7 +63,7 @@ export abstract class VSCodeTestRunner { const cp = spawn(await this.binaryPath(), args, { cwd: this.repoLocation.uri.fsPath, stdio: 'pipe', - env: this.getEnvironment(), + env: this.getEnvironment(port), }); // Register a descriptor factory that signals the server when any @@ -139,7 +139,7 @@ export abstract class VSCodeTestRunner { }); } - protected getEnvironment(): NodeJS.ProcessEnv { + protected getEnvironment(_remoteDebugPort?: number): NodeJS.ProcessEnv { return { ...process.env, ELECTRON_RUN_AS_NODE: undefined, @@ -261,9 +261,10 @@ export class BrowserTestRunner extends VSCodeTestRunner { } /** @override */ - protected override getEnvironment() { + protected override getEnvironment(remoteDebugPort?: number) { return { - ...super.getEnvironment(), + ...super.getEnvironment(remoteDebugPort), + PLAYWRIGHT_CHROMIUM_DEBUG_PORT: remoteDebugPort ? String(remoteDebugPort) : undefined, ELECTRON_RUN_AS_NODE: '1', }; } diff --git a/.vscode/notebooks/api.github-issues b/.vscode/notebooks/api.github-issues index c402cca38..6b6a41f51 100644 --- a/.vscode/notebooks/api.github-issues +++ b/.vscode/notebooks/api.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPO=repo:microsoft/vscode\n$MILESTONE=milestone:\"August 2024\"" + "value": "$REPO=repo:microsoft/vscode\n$MILESTONE=milestone:\"September 2024\"" }, { "kind": 1, diff --git a/.vscode/notebooks/endgame.github-issues b/.vscode/notebooks/endgame.github-issues index 450ba4183..9f6624a13 100644 --- a/.vscode/notebooks/endgame.github-issues +++ b/.vscode/notebooks/endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"August 2024\"" + "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"September 2024\"" }, { "kind": 1, diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues index df0f8a929..f17345ed7 100644 --- a/.vscode/notebooks/my-endgame.github-issues +++ b/.vscode/notebooks/my-endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"August 2024\"\n\n$MINE=assignee:@me" + "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"September 2024\"\n\n$MINE=assignee:@me" }, { "kind": 1, diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues index 979180e75..5f54a2e5d 100644 --- a/.vscode/notebooks/my-work.github-issues +++ b/.vscode/notebooks/my-work.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "// list of repos we work in\n$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n// current milestone name\n$MILESTONE=milestone:\"August 2024\"\n" + "value": "// list of repos we work in\n$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n// current milestone name\n$MILESTONE=milestone:\"September 2024\"\n" }, { "kind": 1, diff --git a/.vscode/settings.json b/.vscode/settings.json index 6236fc01c..910e0becf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -34,6 +34,7 @@ "src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true, "src/vs/base/test/node/uri.test.data.txt": true, "src/vs/editor/test/node/diffing/fixtures/**": true, + "build/loader.min": true }, "files.readonlyInclude": { "**/node_modules/**/*.*": true, @@ -76,7 +77,7 @@ "typescript.tsdk": "node_modules/typescript/lib", "npm.exclude": "**/extensions/**", "emmet.excludeLanguages": [], - "typescript.preferences.importModuleSpecifier": "non-relative", + "typescript.preferences.importModuleSpecifier": "relative", "typescript.preferences.quoteStyle": "single", "json.schemas": [ { @@ -93,7 +94,7 @@ } ], "git.ignoreLimitWarning": true, - // we removed this for Void: + // Removing this for Void: // "git.branchProtection": [ // "main", // "distro", @@ -163,7 +164,7 @@ "@xterm/headless", "node-pty", "vscode-notebook-renderer", - "src/vs/workbench/workbench.web.main.ts" + "src/vs/workbench/workbench.web.main.internal.ts" ], "[github-issues]": { "editor.wordWrap": "on" diff --git a/cglicenses.json b/.yarnrc similarity index 96% rename from cglicenses.json rename to .yarnrc index d75a53bf1..0b4e03e50 100644 --- a/cglicenses.json +++ b/.yarnrc @@ -241,33 +241,6 @@ "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." ] }, - { - // Reason: The substack org has been deleted on GH - "name": "mkdirp", - "fullLicenseText": [ - "Copyright 2010 James Halliday (mail@substack.net)", - "", - "This project is free software released under the MIT/X11 license:", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and associated documentation files (the \"Software\"), to deal", - "in the Software without restriction, including without limitation the rights", - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", - "copies of the Software, and to permit persons to whom the Software is", - "furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN", - "THE SOFTWARE." - ] - }, { // Reason: repo URI is wrong on crate, pending https://github.com/warp-tech/russh/pull/53 "name": "russh-cryptovec", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 19b8c9d89..d7da29db9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ We use a [VSCode extension](https://code.visualstudio.com/api/get-started/your-f For some useful links we've compiled see [`VOID_USEFUL_LINKS.md`](https://github.com/voideditor/void/blob/main/VOID_USEFUL_LINKS.md). ## 1. Building the Extension -Here's how you can start contributing to the Void extension. This is where you should get started if you're new. +Here's how you can start contributing to the Void extension. This is where you should get started if you're new. 1. Clone the repository: @@ -50,7 +50,7 @@ Now that you're set up, feel free to check out our [Issues](https://github.com/v Beyond the extension, we very occasionally edit the IDE when we need to access more functionality. If you want to work on the full IDE, please follow the steps below, or see VS Code's full [how to contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute) page. -Before starting, make sure you've built the extension (by running `cd .\extensions\void\` and `npm run build`). +Before starting, make sure you've built the extension (by running `cd .\extensions\void\` and `npm run build`). Make sure you're on the correct NodeJS version as per `.nvmrc`. @@ -125,3 +125,26 @@ Please don't make big refactors without speaking with us first. We'd like to kee # Submitting a Pull Request When you've made changes and want to submit them, please submit a pull request. + + +# Relevant files + +We keep track of all the files we've changed with Void so it's easy to rebase: + + +- README.md +- CONTRIBUTING.md +- VOID_USEFUL_LINKS.md +- product.json + +- src/vs/workbench/api/common/{extHost.api.impl.ts | extHostApiCommands.ts} +- src/vs/workbench/workbench.common.main.ts +- src/vs/workbench/contrib/void +- extensions/void + +- .github/ +- .vscode/settings +- .eslintrc.json +- build/hygiene.js +- build/lib/i18n.resources.json +- build/npm/dirs.js diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt index 664f2b000..da3989dd3 100644 --- a/ThirdPartyNotices.txt +++ b/ThirdPartyNotices.txt @@ -440,6 +440,580 @@ Title to copyright in this work will at all times remain with copyright holders. --------------------------------------------------------- +dompurify 3.0.5 - Apache 2.0 +https://github.com/cure53/DOMPurify + +DOMPurify +Copyright 2024 Dr.-Ing. Mario Heiderich, Cure53 + +DOMPurify is free software; you can redistribute it and/or modify it under the +terms of either: + +a) the Apache License Version 2.0, or +b) the Mozilla Public License Version 2.0 + +----------------------------------------------------------------------------- + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +----------------------------------------------------------------------------- +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. +--------------------------------------------------------- + +--------------------------------------------------------- + dotnet/csharp-tmLanguage 0.1.0 - MIT https://github.com/dotnet/csharp-tmLanguage @@ -545,7 +1119,7 @@ to the base-name name of the original file, and an extension of txt, html, or si --------------------------------------------------------- -go-syntax 0.7.5 - MIT +go-syntax 0.7.6 - MIT https://github.com/worlpaker/go-syntax MIT License @@ -1534,7 +2108,7 @@ SOFTWARE. --------------------------------------------------------- -RedCMD/YAML-Syntax-Highlighter 1.1.1 - MIT +RedCMD/YAML-Syntax-Highlighter 1.1.2 - MIT https://github.com/RedCMD/YAML-Syntax-Highlighter MIT License diff --git a/build/.moduleignore b/build/.moduleignore index 97b504d85..3f573e060 100644 --- a/build/.moduleignore +++ b/build/.moduleignore @@ -163,7 +163,7 @@ typescript/lib/tsserverlibrary.js jschardet/index.js jschardet/src/** -jschardet/dist/jschardet.js +# TODO@esm uncomment when we can use jschardet.min.js again jschardet/dist/jschardet.js es6-promise/lib/** diff --git a/build/.webignore b/build/.webignore index d42f9775b..837366b67 100644 --- a/build/.webignore +++ b/build/.webignore @@ -14,7 +14,7 @@ jschardet/index.js jschardet/src/** -jschardet/dist/jschardet.js +# TODO@esm uncomment when we can use jschardet.min.js again jschardet/dist/jschardet.js vscode-textmate/webpack.config.js diff --git a/build/azure-pipelines/alpine/product-build-alpine.yml b/build/azure-pipelines/alpine/product-build-alpine.yml index cfa76f15a..077ec0ba1 100644 --- a/build/azure-pipelines/alpine/product-build-alpine.yml +++ b/build/azure-pipelines/alpine/product-build-alpine.yml @@ -7,7 +7,7 @@ steps: - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/cli/cli-darwin-sign.yml b/build/azure-pipelines/cli/cli-darwin-sign.yml index 75a8235ff..b6dc424d6 100644 --- a/build/azure-pipelines/cli/cli-darwin-sign.yml +++ b/build/azure-pipelines/cli/cli-darwin-sign.yml @@ -4,7 +4,7 @@ parameters: default: [] steps: - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/cli/cli-win32-sign.yml b/build/azure-pipelines/cli/cli-win32-sign.yml index f8d11e806..e39df13c9 100644 --- a/build/azure-pipelines/cli/cli-win32-sign.yml +++ b/build/azure-pipelines/cli/cli-win32-sign.yml @@ -4,7 +4,7 @@ parameters: default: [] steps: - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/cli/install-rust-posix.yml b/build/azure-pipelines/cli/install-rust-posix.yml index 898671439..fee56e028 100644 --- a/build/azure-pipelines/cli/install-rust-posix.yml +++ b/build/azure-pipelines/cli/install-rust-posix.yml @@ -1,7 +1,7 @@ parameters: - name: channel type: string - default: 1.77 + default: 1.81 - name: targets default: [] type: object diff --git a/build/azure-pipelines/cli/install-rust-win32.yml b/build/azure-pipelines/cli/install-rust-win32.yml index 22fba8d7f..45a1cfd18 100644 --- a/build/azure-pipelines/cli/install-rust-win32.yml +++ b/build/azure-pipelines/cli/install-rust-win32.yml @@ -1,7 +1,7 @@ parameters: - name: channel type: string - default: 1.77 + default: 1.81 - name: targets default: [] type: object diff --git a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml index d9c817fd2..32615c584 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml @@ -49,6 +49,6 @@ steps: parameters: VSCODE_CLI_ARTIFACTS: - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: - - unsigned_vscode_cli_darwin_x64_cli + - unsigned_vscode_cli_darwin_x64_cli - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: - - unsigned_vscode_cli_darwin_arm64_cli + - unsigned_vscode_cli_darwin_arm64_cli diff --git a/build/azure-pipelines/darwin/product-build-darwin-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-sign.yml index fb8cf8341..82a1e89f2 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-sign.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-sign.yml @@ -13,7 +13,7 @@ steps: continueOnError: true displayName: Download ESRPClient - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/darwin/product-build-darwin-test.yml b/build/azure-pipelines/darwin/product-build-darwin-test.yml index a9d64b6bc..937d9d70c 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-test.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-test.yml @@ -7,7 +7,7 @@ parameters: type: boolean - name: VSCODE_RUN_SMOKE_TESTS type: boolean - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false @@ -19,230 +19,230 @@ steps: retryCountOnTaskFailure: 3 - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}: - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: ./scripts/test-esm.sh --tfs "Unit Tests" - displayName: Run unit tests (Electron) [ESM] - timeoutInMinutes: 15 - - script: npm run test-node-amd - displayName: Run unit tests (node.js) [AMD] - timeoutInMinutes: 15 - - script: npm run test-browser-amd-no-install -- --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium & Webkit) [ESM] - timeoutInMinutes: 30 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: ./scripts/test.sh --tfs "Unit Tests" - displayName: Run unit tests (Electron) - timeoutInMinutes: 15 - - script: npm run test-node - displayName: Run unit tests (node.js) - timeoutInMinutes: 15 - - script: npm run test-browser-no-install -- --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium & Webkit) - timeoutInMinutes: 30 - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: ./scripts/test-esm.sh --build --tfs "Unit Tests" - displayName: Run unit tests (Electron) [ESM] - timeoutInMinutes: 15 - - script: npm run test-node-amd -- --build - displayName: Run unit tests (node.js) [AMD] - timeoutInMinutes: 15 - - script: npm run test-browser-amd-no-install -- --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium & Webkit) [ESM] - timeoutInMinutes: 30 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: ./scripts/test.sh --build --tfs "Unit Tests" - displayName: Run unit tests (Electron) - timeoutInMinutes: 15 - - script: npm run test-node -- --build - displayName: Run unit tests (node.js) - timeoutInMinutes: 15 - - script: npm run test-browser-no-install -- --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium & Webkit) - timeoutInMinutes: 30 + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: ./scripts/test-amd.sh --tfs "Unit Tests" + displayName: Run unit tests (Electron) [AMD] + timeoutInMinutes: 15 + - script: npm run test-node-amd + displayName: Run unit tests (node.js) [AMD] + timeoutInMinutes: 15 + - script: npm run test-browser-amd-no-install -- --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium & Webkit) [AMD] + timeoutInMinutes: 30 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: ./scripts/test.sh --tfs "Unit Tests" + displayName: Run unit tests (Electron) + timeoutInMinutes: 15 + - script: npm run test-node + displayName: Run unit tests (node.js) + timeoutInMinutes: 15 + - script: npm run test-browser-no-install -- --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium & Webkit) + timeoutInMinutes: 30 + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: ./scripts/test-amd.sh --build --tfs "Unit Tests" + displayName: Run unit tests (Electron) [AMD] + timeoutInMinutes: 15 + - script: npm run test-node-amd -- --build + displayName: Run unit tests (node.js) [AMD] + timeoutInMinutes: 15 + - script: npm run test-browser-amd-no-install -- --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium & Webkit) [AMD] + timeoutInMinutes: 30 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: ./scripts/test.sh --build --tfs "Unit Tests" + displayName: Run unit tests (Electron) + timeoutInMinutes: 15 + - script: npm run test-node -- --build + displayName: Run unit tests (node.js) + timeoutInMinutes: 15 + - script: npm run test-browser-no-install -- --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium & Webkit) + timeoutInMinutes: 30 - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: + - script: | + set -e + npm run gulp \ + compile-extension:configuration-editing \ + compile-extension:css-language-features-server \ + compile-extension:emmet \ + compile-extension:git \ + compile-extension:github-authentication \ + compile-extension:html-language-features-server \ + compile-extension:ipynb \ + compile-extension:notebook-renderers \ + compile-extension:json-language-features-server \ + compile-extension:markdown-language-features \ + compile-extension-media \ + compile-extension:microsoft-authentication \ + compile-extension:typescript-language-features \ + compile-extension:vscode-api-tests \ + compile-extension:vscode-colorize-tests \ + compile-extension:vscode-test-resolver + displayName: Build integration tests + + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: ./scripts/test-integration-amd.sh --tfs "Integration Tests" + displayName: Run integration tests (Electron) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: ./scripts/test-integration --tfs "Integration Tests" + displayName: Run integration tests (Electron) + timeoutInMinutes: 20 + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: | + # Figure out the full absolute path of the product we just built + # including the remote server and configure the integration tests + # to run with these builds instead of running out of sources. + set -e + APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)" + APP_NAME="`ls $APP_ROOT | head -n 1`" + INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ + ./scripts/test-integration-amd.sh --build --tfs "Integration Tests" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) + displayName: Run integration tests (Electron) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: | + # Figure out the full absolute path of the product we just built + # including the remote server and configure the integration tests + # to run with these builds instead of running out of sources. + set -e + APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)" + APP_NAME="`ls $APP_ROOT | head -n 1`" + INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ + ./scripts/test-integration.sh --build --tfs "Integration Tests" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) + displayName: Run integration tests (Electron) + timeoutInMinutes: 20 + + - script: ./scripts/test-web-integration.sh --browser webkit + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web + displayName: Run integration tests (Browser, Webkit) + timeoutInMinutes: 20 + - script: | set -e - npm run gulp \ - compile-extension:configuration-editing \ - compile-extension:css-language-features-server \ - compile-extension:emmet \ - compile-extension:git \ - compile-extension:github-authentication \ - compile-extension:html-language-features-server \ - compile-extension:ipynb \ - compile-extension:notebook-renderers \ - compile-extension:json-language-features-server \ - compile-extension:markdown-language-features \ - compile-extension-media \ - compile-extension:microsoft-authentication \ - compile-extension:typescript-language-features \ - compile-extension:vscode-api-tests \ - compile-extension:vscode-colorize-tests \ - compile-extension:vscode-test-resolver - displayName: Build integration tests - - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: ./scripts/test-integration-esm.sh --tfs "Integration Tests" - displayName: Run integration tests (Electron) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: ./scripts/test-integration --tfs "Integration Tests" - displayName: Run integration tests (Electron) - timeoutInMinutes: 20 - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: | - # Figure out the full absolute path of the product we just built - # including the remote server and configure the integration tests - # to run with these builds instead of running out of sources. - set -e - APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)" - APP_NAME="`ls $APP_ROOT | head -n 1`" - INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ - ./scripts/test-integration-esm.sh --build --tfs "Integration Tests" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) - displayName: Run integration tests (Electron) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: | - # Figure out the full absolute path of the product we just built - # including the remote server and configure the integration tests - # to run with these builds instead of running out of sources. - set -e - APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)" - APP_NAME="`ls $APP_ROOT | head -n 1`" - INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ - ./scripts/test-integration.sh --build --tfs "Integration Tests" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) - displayName: Run integration tests (Electron) - timeoutInMinutes: 20 - - - script: ./scripts/test-web-integration.sh --browser webkit - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web - displayName: Run integration tests (Browser, Webkit) - timeoutInMinutes: 20 - - - script: | - set -e - APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) - APP_NAME="`ls $APP_ROOT | head -n 1`" - INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ - ./scripts/test-remote-integration.sh - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) - displayName: Run integration tests (Remote) - timeoutInMinutes: 20 + APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) + APP_NAME="`ls $APP_ROOT | head -n 1`" + INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ + ./scripts/test-remote-integration.sh + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) + displayName: Run integration tests (Remote) + timeoutInMinutes: 20 - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: - - script: ps -ef - displayName: Diagnostics before smoke test run - continueOnError: true - condition: succeededOrFailed() - - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: npm run compile - workingDirectory: test/smoke - displayName: Compile smoke tests - - - script: npm run gulp compile-extension-media - displayName: Compile extensions for smoke tests - - - script: npm run smoketest-no-compile -- --tracing - timeoutInMinutes: 20 - displayName: Run smoke tests (Electron) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) - APP_NAME="`ls $APP_ROOT | head -n 1`" - npm run smoketest-no-compile -- --tracing --build "$APP_ROOT/$APP_NAME" - timeoutInMinutes: 20 - displayName: Run smoke tests (Electron) - - - script: npm run smoketest-no-compile -- --web --tracing --headless - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web - timeoutInMinutes: 20 - displayName: Run smoke tests (Browser, Chromium) - - - script: | - set -e - npm run gulp compile-extension:vscode-test-resolver - APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) - APP_NAME="`ls $APP_ROOT | head -n 1`" - npm run smoketest-no-compile -- --tracing --remote --build "$APP_ROOT/$APP_NAME" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) - timeoutInMinutes: 20 - displayName: Run smoke tests (Remote) - - - script: ps -ef - displayName: Diagnostics after smoke test run - continueOnError: true - condition: succeededOrFailed() + - script: ps -ef + displayName: Diagnostics before smoke test run + continueOnError: true + condition: succeededOrFailed() + + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - script: npm run compile + workingDirectory: test/smoke + displayName: Compile smoke tests + + - script: npm run gulp compile-extension-media + displayName: Compile extensions for smoke tests + + - script: npm run smoketest-no-compile -- --tracing + timeoutInMinutes: 20 + displayName: Run smoke tests (Electron) + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: | + set -e + APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) + APP_NAME="`ls $APP_ROOT | head -n 1`" + npm run smoketest-no-compile -- --tracing --build "$APP_ROOT/$APP_NAME" + timeoutInMinutes: 20 + displayName: Run smoke tests (Electron) + + - script: npm run smoketest-no-compile -- --web --tracing --headless + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web + timeoutInMinutes: 20 + displayName: Run smoke tests (Browser, Chromium) + + - script: | + set -e + npm run gulp compile-extension:vscode-test-resolver + APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) + APP_NAME="`ls $APP_ROOT | head -n 1`" + npm run smoketest-no-compile -- --tracing --remote --build "$APP_ROOT/$APP_NAME" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) + timeoutInMinutes: 20 + displayName: Run smoke tests (Remote) + + - script: ps -ef + displayName: Diagnostics after smoke test run + continueOnError: true + condition: succeededOrFailed() - ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: .build/crashes - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: crash-dump-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: crash-dump-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: crash-dump-macos-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Crash Reports" - continueOnError: true - condition: failed() - - # In order to properly symbolify above crash reports - # (if any), we need the compiled native modules too - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: node_modules - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: node-modules-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: node-modules-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: node-modules-macos-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Node Modules" - continueOnError: true - condition: failed() - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: .build/logs - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: logs-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: logs-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Log Files" - continueOnError: true - condition: succeededOrFailed() + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: .build/crashes + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: crash-dump-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: crash-dump-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: crash-dump-macos-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Crash Reports" + continueOnError: true + condition: failed() + + # In order to properly symbolify above crash reports + # (if any), we need the compiled native modules too + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: node_modules + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: node-modules-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: node-modules-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: node-modules-macos-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Node Modules" + continueOnError: true + condition: failed() + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: .build/logs + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: logs-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: logs-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Log Files" + continueOnError: true + condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Tests Results diff --git a/build/azure-pipelines/darwin/product-build-darwin-universal.yml b/build/azure-pipelines/darwin/product-build-darwin-universal.yml index dd5c86e0e..f8c10a03c 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-universal.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-universal.yml @@ -7,7 +7,7 @@ steps: - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index d779f6457..a76ab27b5 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -9,15 +9,15 @@ parameters: type: boolean - name: VSCODE_RUN_SMOKE_TESTS type: boolean - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false steps: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - checkout: self - fetchDepth: 1 - retryCountOnTaskFailure: 3 + - checkout: self + fetchDepth: 1 + retryCountOnTaskFailure: 3 - task: NodeTool@0 inputs: @@ -26,23 +26,23 @@ steps: nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - template: ../distro/download-distro.yml@self + - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key" + - task: AzureKeyVault@2 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key" - - task: DownloadPipelineArtifact@2 - inputs: - artifact: Compilation - path: $(Build.ArtifactStagingDirectory) - displayName: Download compilation output + - task: DownloadPipelineArtifact@2 + inputs: + artifact: Compilation + path: $(Build.ArtifactStagingDirectory) + displayName: Download compilation output - - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz - displayName: Extract compilation output + - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz + displayName: Extract compilation output - script: node build/setup-npm-registry.js $NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) @@ -112,9 +112,9 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/azure-pipelines/distro/mixin-npm - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Mixin distro node modules + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - script: | set -e @@ -125,43 +125,43 @@ steps: displayName: Create node_modules archive - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/azure-pipelines/distro/mixin-quality - displayName: Mixin distro quality + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality - template: ../common/install-builtin-extensions.yml@self - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - npm run gulp vscode-darwin-$(VSCODE_ARCH)-min-ci - echo "##vso[task.setvariable variable=BUILT_CLIENT]true" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Build client - - - script: | - set -e - npm run gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci - mv ../vscode-reh-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH) # TODO@joaomoreno - ARCHIVE_PATH=".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH).zip" - mkdir -p $(dirname $ARCHIVE_PATH) - (cd .. && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH vscode-server-darwin-$(VSCODE_ARCH)) - echo "##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Build server - - - script: | - set -e - npm run gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci - mv ../vscode-reh-web-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH)-web # TODO@joaomoreno - ARCHIVE_PATH=".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH)-web.zip" - mkdir -p $(dirname $ARCHIVE_PATH) - (cd .. && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH vscode-server-darwin-$(VSCODE_ARCH)-web) - echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Build server (web) + - script: | + set -e + npm run gulp vscode-darwin-$(VSCODE_ARCH)-min-ci + echo "##vso[task.setvariable variable=BUILT_CLIENT]true" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build client + + - script: | + set -e + npm run gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci + mv ../vscode-reh-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH) # TODO@joaomoreno + ARCHIVE_PATH=".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH).zip" + mkdir -p $(dirname $ARCHIVE_PATH) + (cd .. && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH vscode-server-darwin-$(VSCODE_ARCH)) + echo "##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server + + - script: | + set -e + npm run gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci + mv ../vscode-reh-web-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH)-web # TODO@joaomoreno + ARCHIVE_PATH=".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH)-web.zip" + mkdir -p $(dirname $ARCHIVE_PATH) + (cd .. && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH vscode-server-darwin-$(VSCODE_ARCH)-web) + echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server (web) - ${{ else }}: - script: npm run gulp transpile-client-swc transpile-extensions @@ -170,87 +170,87 @@ steps: displayName: Transpile - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - template: product-build-darwin-test.yml@self - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} - VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} - VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }} + - template: product-build-darwin-test.yml@self + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} + VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} + VSCODE_BUILD_AMD: ${{ parameters.VSCODE_BUILD_AMD }} - ${{ elseif and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: unsigned_vscode_cli_darwin_$(VSCODE_ARCH)_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - - - script: | - set -e - APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)" - APP_NAME="`ls $APP_ROOT | head -n 1`" - APP_PATH="$APP_ROOT/$APP_NAME" - unzip $(Build.ArtifactStagingDirectory)/cli/*.zip -d $(Build.ArtifactStagingDirectory)/cli - CLI_APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").tunnelApplicationName") - APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").applicationName") - mv "$(Build.ArtifactStagingDirectory)/cli/$APP_NAME" "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME" - chmod +x "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME" - displayName: Make CLI executable - - # Setting hardened entitlements is a requirement for: - # * Apple notarization - # * Running tests on Big Sur (because Big Sur has additional security precautions) - - script: | - set -e - security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain - security default-keychain -s $(agent.tempdirectory)/buildagent.keychain - security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain - echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12 - security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign - export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1) - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain - DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory) - displayName: Set Hardened Entitlements - - - script: | - set -e - ARCHIVE_PATH=".build/darwin/client/VSCode-darwin-$(VSCODE_ARCH).zip" - mkdir -p $(dirname $ARCHIVE_PATH) - (cd ../VSCode-darwin-$(VSCODE_ARCH) && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH *) - echo "##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH" - condition: and(succeededOrFailed(), eq(variables['BUILT_CLIENT'], 'true')) - displayName: Package client - - - script: echo "##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_" - condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')) - displayName: Generate artifact prefix - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(CLIENT_PATH) - artifactName: $(ARTIFACT_PREFIX)unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive - sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH) - sbomPackageName: "VS Code macOS $(VSCODE_ARCH) (unsigned)" - sbomPackageVersion: $(Build.SourceVersion) - displayName: Publish client archive - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(SERVER_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned - sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH) - sbomPackageName: "VS Code macOS $(VSCODE_ARCH) Server" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], '')) - displayName: Publish server archive - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(WEB_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned - sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web - sbomPackageName: "VS Code macOS $(VSCODE_ARCH) Web" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], '')) - displayName: Publish web server archive + - task: DownloadPipelineArtifact@2 + inputs: + artifact: unsigned_vscode_cli_darwin_$(VSCODE_ARCH)_cli + patterns: "**" + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI + + - script: | + set -e + APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)" + APP_NAME="`ls $APP_ROOT | head -n 1`" + APP_PATH="$APP_ROOT/$APP_NAME" + unzip $(Build.ArtifactStagingDirectory)/cli/*.zip -d $(Build.ArtifactStagingDirectory)/cli + CLI_APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").tunnelApplicationName") + APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").applicationName") + mv "$(Build.ArtifactStagingDirectory)/cli/$APP_NAME" "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME" + chmod +x "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME" + displayName: Make CLI executable + + # Setting hardened entitlements is a requirement for: + # * Apple notarization + # * Running tests on Big Sur (because Big Sur has additional security precautions) + - script: | + set -e + security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain + security default-keychain -s $(agent.tempdirectory)/buildagent.keychain + security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain + echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12 + security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign + export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1) + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain + DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory) + displayName: Set Hardened Entitlements + + - script: | + set -e + ARCHIVE_PATH=".build/darwin/client/VSCode-darwin-$(VSCODE_ARCH).zip" + mkdir -p $(dirname $ARCHIVE_PATH) + (cd ../VSCode-darwin-$(VSCODE_ARCH) && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH *) + echo "##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH" + condition: and(succeededOrFailed(), eq(variables['BUILT_CLIENT'], 'true')) + displayName: Package client + + - script: echo "##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_" + condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')) + displayName: Generate artifact prefix + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(CLIENT_PATH) + artifactName: $(ARTIFACT_PREFIX)unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive + sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH) + sbomPackageName: "VS Code macOS $(VSCODE_ARCH) (unsigned)" + sbomPackageVersion: $(Build.SourceVersion) + displayName: Publish client archive + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(SERVER_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned + sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH) + sbomPackageName: "VS Code macOS $(VSCODE_ARCH) Server" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], '')) + displayName: Publish server archive + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(WEB_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned + sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web + sbomPackageName: "VS Code macOS $(VSCODE_ARCH) Web" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], '')) + displayName: Publish web server archive diff --git a/build/azure-pipelines/distro/download-distro.yml b/build/azure-pipelines/distro/download-distro.yml index 65e64a87c..92325762a 100644 --- a/build/azure-pipelines/distro/download-distro.yml +++ b/build/azure-pipelines/distro/download-distro.yml @@ -1,5 +1,5 @@ steps: - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/linux/apt-retry.sh b/build/azure-pipelines/linux/apt-retry.sh new file mode 100644 index 000000000..358f34cd3 --- /dev/null +++ b/build/azure-pipelines/linux/apt-retry.sh @@ -0,0 +1,42 @@ +#!/bin/sh +################################################################################ +## Copied from https://github.com/actions/runner-images/blob/ubuntu22/20240825.1/images/ubuntu/scripts/build/configure-apt-mock.sh +################################################################################ + +i=1 +while [ $i -le 30 ];do + err=$(mktemp) + "$@" 2>$err + + # no errors, break the loop and continue normal flow + test -f $err || break + cat $err >&2 + + retry=false + + if grep -q 'Could not get lock' $err;then + # apt db locked needs retry + retry=true + elif grep -q 'Could not open file /var/lib/apt/lists' $err;then + # apt update is not completed, needs retry + retry=true + elif grep -q 'IPC connect call failed' $err;then + # the delay should help with gpg-agent not ready + retry=true + elif grep -q 'Temporary failure in name resolution' $err;then + # It looks like DNS is not updated with random generated hostname yet + retry=true + elif grep -q 'dpkg frontend is locked by another process' $err;then + # dpkg process is busy by another process + retry=true + fi + + rm $err + if [ $retry = false ]; then + break + fi + + sleep 5 + echo "...retry $i" + i=$((i + 1)) +done diff --git a/build/azure-pipelines/linux/cli-build-linux.yml b/build/azure-pipelines/linux/cli-build-linux.yml index 53fe35593..89bc8a39e 100644 --- a/build/azure-pipelines/linux/cli-build-linux.yml +++ b/build/azure-pipelines/linux/cli-build-linux.yml @@ -22,7 +22,7 @@ steps: nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - template: ../cli/cli-apply-patches.yml@self + - template: ../cli/cli-apply-patches.yml@self - task: Npm@1 displayName: Download openssl prebuilt @@ -40,25 +40,25 @@ steps: displayName: Extract openssl prebuilt - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/setup-npm-registry.js $NPM_REGISTRY build - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Registry - - - script: | - set -e - # Set the private NPM registry to the global npmrc file - # so that authentication works for subfolders like build/, remote/, extensions/ etc - # which does not have their own .npmrc file - npm config set registry "$NPM_REGISTRY" - echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)" - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM - - - task: npmAuthenticate@0 - inputs: - workingFile: $(NPMRC_PATH) - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Authentication + - script: node build/setup-npm-registry.js $NPM_REGISTRY build + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Registry + + - script: | + set -e + # Set the private NPM registry to the global npmrc file + # so that authentication works for subfolders like build/, remote/, extensions/ etc + # which does not have their own .npmrc file + npm config set registry "$NPM_REGISTRY" + echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)" + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM + + - task: npmAuthenticate@0 + inputs: + workingFile: $(NPMRC_PATH) + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Authentication - script: | set -e @@ -83,75 +83,75 @@ steps: parameters: targets: - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - - aarch64-unknown-linux-gnu + - aarch64-unknown-linux-gnu - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: - - x86_64-unknown-linux-gnu + - x86_64-unknown-linux-gnu - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}: - - armv7-unknown-linux-gnueabihf + - armv7-unknown-linux-gnueabihf - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - - template: ../cli/cli-compile.yml@self - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_CLI_TARGET: aarch64-unknown-linux-gnu - VSCODE_CLI_ARTIFACT: vscode_cli_linux_arm64_cli - VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} - VSCODE_CLI_ENV: - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/include - SYSROOT_ARCH: arm64 + - template: ../cli/cli-compile.yml@self + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_CLI_TARGET: aarch64-unknown-linux-gnu + VSCODE_CLI_ARTIFACT: vscode_cli_linux_arm64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} + VSCODE_CLI_ENV: + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/include + SYSROOT_ARCH: arm64 - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: - - template: ../cli/cli-compile.yml@self - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_CLI_TARGET: x86_64-unknown-linux-gnu - VSCODE_CLI_ARTIFACT: vscode_cli_linux_x64_cli - VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} - VSCODE_CLI_ENV: - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/include - SYSROOT_ARCH: amd64 + - template: ../cli/cli-compile.yml@self + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_CLI_TARGET: x86_64-unknown-linux-gnu + VSCODE_CLI_ARTIFACT: vscode_cli_linux_x64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} + VSCODE_CLI_ENV: + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/include + SYSROOT_ARCH: amd64 - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}: - - template: ../cli/cli-compile.yml@self - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_CLI_TARGET: armv7-unknown-linux-gnueabihf - VSCODE_CLI_ARTIFACT: vscode_cli_linux_armhf_cli - VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} - VSCODE_CLI_ENV: - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/include - SYSROOT_ARCH: armhf + - template: ../cli/cli-compile.yml@self + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_CLI_TARGET: armv7-unknown-linux-gnueabihf + VSCODE_CLI_ARTIFACT: vscode_cli_linux_armhf_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} + VSCODE_CLI_ENV: + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/include + SYSROOT_ARCH: armhf - ${{ if not(parameters.VSCODE_CHECK_ONLY) }}: - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}: - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_armhf_cli.tar.gz - artifactName: vscode_cli_linux_armhf_cli - sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli - sbomPackageName: "VS Code Linux armhf CLI" - sbomPackageVersion: $(Build.SourceVersion) - displayName: Publish vscode_cli_linux_armhf_cli artifact - - - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_x64_cli.tar.gz - artifactName: vscode_cli_linux_x64_cli - sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli - sbomPackageName: "VS Code Linux x64 CLI" - sbomPackageVersion: $(Build.SourceVersion) - displayName: Publish vscode_cli_linux_x64_cli artifact - - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_arm64_cli.tar.gz - artifactName: vscode_cli_linux_arm64_cli - sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli - sbomPackageName: "VS Code Linux arm64 CLI" - sbomPackageVersion: $(Build.SourceVersion) - displayName: Publish vscode_cli_linux_arm64_cli artifact + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}: + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_armhf_cli.tar.gz + artifactName: vscode_cli_linux_armhf_cli + sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli + sbomPackageName: "VS Code Linux armhf CLI" + sbomPackageVersion: $(Build.SourceVersion) + displayName: Publish vscode_cli_linux_armhf_cli artifact + + - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_x64_cli.tar.gz + artifactName: vscode_cli_linux_x64_cli + sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli + sbomPackageName: "VS Code Linux x64 CLI" + sbomPackageVersion: $(Build.SourceVersion) + displayName: Publish vscode_cli_linux_x64_cli artifact + + - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_arm64_cli.tar.gz + artifactName: vscode_cli_linux_arm64_cli + sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli + sbomPackageName: "VS Code Linux arm64 CLI" + sbomPackageVersion: $(Build.SourceVersion) + displayName: Publish vscode_cli_linux_arm64_cli artifact diff --git a/build/azure-pipelines/linux/product-build-linux-legacy-server.yml b/build/azure-pipelines/linux/product-build-linux-legacy-server.yml index d9c69e697..ce9d71a52 100644 --- a/build/azure-pipelines/linux/product-build-linux-legacy-server.yml +++ b/build/azure-pipelines/linux/product-build-linux-legacy-server.yml @@ -5,7 +5,7 @@ parameters: type: boolean - name: VSCODE_ARCH type: string - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false @@ -18,7 +18,7 @@ steps: - template: ../distro/download-distro.yml - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" @@ -37,8 +37,8 @@ steps: - script: | set -e # Start X server - sudo apt-get update - sudo apt-get install -y pkg-config \ + ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update + ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y pkg-config \ dbus \ xvfb \ libgtk-3-0 \ @@ -77,14 +77,14 @@ steps: displayName: Setup NPM Authentication - ${{ if or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64')) }}: - - task: Docker@1 - displayName: "Pull Docker image" - inputs: - azureSubscriptionEndpoint: "vscode-builds-subscription" - azureContainerRegistry: vscodehub.azurecr.io - command: "Run an image" - imageName: vscode-linux-build-agent:centos7-devtoolset8-$(VSCODE_ARCH) - containerCommand: uname + - task: Docker@1 + displayName: "Pull Docker image" + inputs: + azureSubscriptionEndpoint: "vscode-builds-subscription" + azureContainerRegistry: vscodehub.azurecr.io + command: "Run an image" + imageName: vscode-linux-build-agent:centos7-devtoolset8-$(VSCODE_ARCH) + containerCommand: uname - script: | set -e @@ -180,35 +180,35 @@ steps: displayName: Build server (web) - ${{ if or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64')) }}: - - script: | - set -e - EXPECTED_GLIBC_VERSION="2.17" \ - EXPECTED_GLIBCXX_VERSION="3.4.19" \ - ./build/azure-pipelines/linux/verify-glibc-requirements.sh - env: - SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) - displayName: Check GLIBC and GLIBCXX dependencies in server archive + - script: | + set -e + EXPECTED_GLIBC_VERSION="2.17" \ + EXPECTED_GLIBCXX_VERSION="3.4.19" \ + ./build/azure-pipelines/linux/verify-glibc-requirements.sh + env: + SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) + displayName: Check GLIBC and GLIBCXX dependencies in server archive - ${{ else }}: - - script: | - set -e - EXPECTED_GLIBC_VERSION="2.17" \ - EXPECTED_GLIBCXX_VERSION="3.4.22" \ - ./build/azure-pipelines/linux/verify-glibc-requirements.sh - env: - SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) - displayName: Check GLIBC and GLIBCXX dependencies in server archive + - script: | + set -e + EXPECTED_GLIBC_VERSION="2.17" \ + EXPECTED_GLIBCXX_VERSION="3.4.22" \ + ./build/azure-pipelines/linux/verify-glibc-requirements.sh + env: + SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) + displayName: Check GLIBC and GLIBCXX dependencies in server archive - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: - - template: product-build-linux-test.yml - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} - VSCODE_RUN_SMOKE_TESTS: false - VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }} - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1 + - template: product-build-linux-test.yml + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} + VSCODE_RUN_SMOKE_TESTS: false + VSCODE_BUILD_AMD: ${{ parameters.VSCODE_BUILD_AMD }} + ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1 - task: 1ES.PublishPipelineArtifact@1 inputs: diff --git a/build/azure-pipelines/linux/product-build-linux-test.yml b/build/azure-pipelines/linux/product-build-linux-test.yml index fe2020e51..2443e2b12 100644 --- a/build/azure-pipelines/linux/product-build-linux-test.yml +++ b/build/azure-pipelines/linux/product-build-linux-test.yml @@ -10,7 +10,7 @@ parameters: - name: PUBLISH_TASK_NAME type: string default: PublishPipelineArtifact@0 - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false @@ -22,277 +22,278 @@ steps: retryCountOnTaskFailure: 3 - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - ELECTRON_ROOT=.build/electron - sudo chown root $APP_ROOT/chrome-sandbox - sudo chown root $ELECTRON_ROOT/chrome-sandbox - sudo chmod 4755 $APP_ROOT/chrome-sandbox - sudo chmod 4755 $ELECTRON_ROOT/chrome-sandbox - stat $APP_ROOT/chrome-sandbox - stat $ELECTRON_ROOT/chrome-sandbox - displayName: Change setuid helper binary permission + - script: | + set -e + APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) + ELECTRON_ROOT=.build/electron + sudo chown root $APP_ROOT/chrome-sandbox + sudo chown root $ELECTRON_ROOT/chrome-sandbox + sudo chmod 4755 $APP_ROOT/chrome-sandbox + sudo chmod 4755 $ELECTRON_ROOT/chrome-sandbox + stat $APP_ROOT/chrome-sandbox + stat $ELECTRON_ROOT/chrome-sandbox + displayName: Change setuid helper binary permission - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}: - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: ./scripts/test-esm.sh --tfs "Unit Tests" - env: - DISPLAY: ":10" - displayName: Run unit tests (Electron) [ESM] - timeoutInMinutes: 15 - - script: npm run test-node-amd - displayName: Run unit tests (node.js) [AMD] - timeoutInMinutes: 15 - - script: npm run test-browser-amd-no-install -- --browser chromium --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium) [ESM] - timeoutInMinutes: 15 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: ./scripts/test.sh --tfs "Unit Tests" - env: - DISPLAY: ":10" - displayName: Run unit tests (Electron) - timeoutInMinutes: 15 - - script: npm run test-node - displayName: Run unit tests (node.js) - timeoutInMinutes: 15 - - script: npm run test-browser-no-install -- --browser chromium --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium) - timeoutInMinutes: 15 + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: ./scripts/test-amd.sh --tfs "Unit Tests" + env: + DISPLAY: ":10" + displayName: Run unit tests (Electron) [AMD] + timeoutInMinutes: 15 + - script: npm run test-node-amd + displayName: Run unit tests (node.js) [AMD] + timeoutInMinutes: 15 + - script: npm run test-browser-amd-no-install -- --browser chromium --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium) [AMD] + timeoutInMinutes: 15 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: ./scripts/test.sh --tfs "Unit Tests" + env: + DISPLAY: ":10" + displayName: Run unit tests (Electron) + timeoutInMinutes: 15 + - script: npm run test-node + displayName: Run unit tests (node.js) + timeoutInMinutes: 15 + - script: npm run test-browser-no-install -- --browser chromium --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium) + timeoutInMinutes: 15 - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: ./scripts/test-esm.sh --build --tfs "Unit Tests" - displayName: Run unit tests (Electron) [ESM] - timeoutInMinutes: 15 - - script: npm run test-node-amd -- --build - displayName: Run unit tests (node.js) [AMD] - timeoutInMinutes: 15 - - script: npm run test-browser-amd-no-install -- --build --browser chromium --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium) [ESM] - timeoutInMinutes: 15 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: ./scripts/test.sh --build --tfs "Unit Tests" - displayName: Run unit tests (Electron) - timeoutInMinutes: 15 - - script: npm run test-node -- --build - displayName: Run unit tests (node.js) - timeoutInMinutes: 15 - - script: npm run test-browser-no-install -- --build --browser chromium --tfs "Browser Unit Tests" - env: - DEBUG: "*browser*" - displayName: Run unit tests (Browser, Chromium) - timeoutInMinutes: 15 - - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: - - script: | - set -e - npm run gulp \ - compile-extension:configuration-editing \ - compile-extension:css-language-features-server \ - compile-extension:emmet \ - compile-extension:git \ - compile-extension:github-authentication \ - compile-extension:html-language-features-server \ - compile-extension:ipynb \ - compile-extension:notebook-renderers \ - compile-extension:json-language-features-server \ - compile-extension:markdown-language-features \ - compile-extension-media \ - compile-extension:microsoft-authentication \ - compile-extension:typescript-language-features \ - compile-extension:vscode-api-tests \ - compile-extension:vscode-colorize-tests \ - compile-extension:vscode-test-resolver - displayName: Build integration tests + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: ./scripts/test-amd.sh --build --tfs "Unit Tests" + displayName: Run unit tests (Electron) [AMD] + timeoutInMinutes: 15 + - script: npm run test-node-amd -- --build + displayName: Run unit tests (node.js) [AMD] + timeoutInMinutes: 15 + - script: npm run test-browser-amd-no-install -- --build --browser chromium --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium) [AMD] + timeoutInMinutes: 15 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: ./scripts/test.sh --build --tfs "Unit Tests" + displayName: Run unit tests (Electron) + timeoutInMinutes: 15 + - script: npm run test-node -- --build + displayName: Run unit tests (node.js) + timeoutInMinutes: 15 + - script: npm run test-browser-no-install -- --build --browser chromium --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" + displayName: Run unit tests (Browser, Chromium) + timeoutInMinutes: 15 - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: ./scripts/test-integration-esm.sh --tfs "Integration Tests" - env: - DISPLAY: ":10" - displayName: Run integration tests (Electron) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: ./scripts/test-integration.sh --tfs "Integration Tests" - env: - DISPLAY: ":10" - displayName: Run integration tests (Electron) - timeoutInMinutes: 20 + - script: | + set -e + npm run gulp \ + compile-extension:configuration-editing \ + compile-extension:css-language-features-server \ + compile-extension:emmet \ + compile-extension:git \ + compile-extension:github-authentication \ + compile-extension:html-language-features-server \ + compile-extension:ipynb \ + compile-extension:notebook-renderers \ + compile-extension:json-language-features-server \ + compile-extension:markdown-language-features \ + compile-extension-media \ + compile-extension:microsoft-authentication \ + compile-extension:typescript-language-features \ + compile-extension:vscode-api-tests \ + compile-extension:vscode-colorize-tests \ + compile-extension:vscode-test-resolver + displayName: Build integration tests - - script: ./scripts/test-web-integration.sh --browser chromium - displayName: Run integration tests (Browser, Chromium) - timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: ./scripts/test-integration-amd.sh --tfs "Integration Tests" + env: + DISPLAY: ":10" + displayName: Run integration tests (Electron) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: ./scripts/test-integration.sh --tfs "Integration Tests" + env: + DISPLAY: ":10" + displayName: Run integration tests (Electron) + timeoutInMinutes: 20 - - script: ./scripts/test-remote-integration.sh - displayName: Run integration tests (Remote) - timeoutInMinutes: 20 + - script: ./scripts/test-web-integration.sh --browser chromium + displayName: Run integration tests (Browser, Chromium) + timeoutInMinutes: 20 - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: | - # Figure out the full absolute path of the product we just built - # including the remote server and configure the integration tests - # to run with these builds instead of running out of sources. - set -e - APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") - INTEGRATION_TEST_APP_NAME="$APP_NAME" \ - INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ - ./scripts/test-integration-esm.sh --build --tfs "Integration Tests" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) - displayName: Run integration tests (Electron) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - script: | - # Figure out the full absolute path of the product we just built - # including the remote server and configure the integration tests - # to run with these builds instead of running out of sources. - set -e - APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") - INTEGRATION_TEST_APP_NAME="$APP_NAME" \ - INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ - ./scripts/test-integration.sh --build --tfs "Integration Tests" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) - displayName: Run integration tests (Electron) - timeoutInMinutes: 20 + - script: ./scripts/test-remote-integration.sh + displayName: Run integration tests (Remote) + timeoutInMinutes: 20 - - script: ./scripts/test-web-integration.sh --browser chromium - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web - displayName: Run integration tests (Browser, Chromium) - timeoutInMinutes: 20 + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: | + # Figure out the full absolute path of the product we just built + # including the remote server and configure the integration tests + # to run with these builds instead of running out of sources. + set -e + APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) + APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") + INTEGRATION_TEST_APP_NAME="$APP_NAME" \ + INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ + ./scripts/test-integration-amd.sh --build --tfs "Integration Tests" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) + displayName: Run integration tests (Electron) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - script: | + # Figure out the full absolute path of the product we just built + # including the remote server and configure the integration tests + # to run with these builds instead of running out of sources. + set -e + APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) + APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") + INTEGRATION_TEST_APP_NAME="$APP_NAME" \ + INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ + ./scripts/test-integration.sh --build --tfs "Integration Tests" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) + displayName: Run integration tests (Electron) + timeoutInMinutes: 20 - - script: | - set -e - APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") - INTEGRATION_TEST_APP_NAME="$APP_NAME" \ - INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ - ./scripts/test-remote-integration.sh - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) - displayName: Run integration tests (Remote) - timeoutInMinutes: 20 + - script: ./scripts/test-web-integration.sh --browser chromium + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web + displayName: Run integration tests (Browser, Chromium) + timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: - script: | set -e - ps -ef - cat /proc/sys/fs/inotify/max_user_watches - lsof | wc -l - displayName: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles) - continueOnError: true - condition: succeededOrFailed() + APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) + APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") + INTEGRATION_TEST_APP_NAME="$APP_NAME" \ + INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ + ./scripts/test-remote-integration.sh + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) + displayName: Run integration tests (Remote) + timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: npm run compile - workingDirectory: test/smoke - displayName: Compile smoke tests + - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: + - script: | + set -e + ps -ef + cat /proc/sys/fs/inotify/max_user_watches + lsof | wc -l + displayName: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles) + continueOnError: true + condition: succeededOrFailed() - - script: npm run gulp compile-extension:markdown-language-features compile-extension:ipynb compile-extension-media compile-extension:vscode-test-resolver - displayName: Build extensions for smoke tests + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - script: npm run compile + workingDirectory: test/smoke + displayName: Compile smoke tests - - script: npm run gulp node - displayName: Download node.js for remote smoke tests - retryCountOnTaskFailure: 3 + - script: npm run gulp compile-extension:markdown-language-features compile-extension:ipynb compile-extension-media compile-extension:vscode-test-resolver + displayName: Build extensions for smoke tests - - script: npm run smoketest-no-compile -- --tracing - timeoutInMinutes: 20 - displayName: Run smoke tests (Electron) + - script: npm run gulp node + displayName: Download node.js for remote smoke tests + retryCountOnTaskFailure: 3 - - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs="--disable-dev-shm-usage" - timeoutInMinutes: 20 - displayName: Run smoke tests (Browser, Chromium) + - script: npm run smoketest-no-compile -- --tracing + timeoutInMinutes: 20 + displayName: Run smoke tests (Electron) - - script: npm run smoketest-no-compile -- --remote --tracing - timeoutInMinutes: 20 - displayName: Run smoke tests (Remote) + - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs="--disable-dev-shm-usage" + timeoutInMinutes: 20 + displayName: Run smoke tests (Browser, Chromium) - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)" - timeoutInMinutes: 20 - displayName: Run smoke tests (Electron) + - script: npm run smoketest-no-compile -- --remote --tracing + timeoutInMinutes: 20 + displayName: Run smoke tests (Remote) - - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs="--disable-dev-shm-usage" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web - timeoutInMinutes: 20 - displayName: Run smoke tests (Browser, Chromium) + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)" + timeoutInMinutes: 20 + displayName: Run smoke tests (Electron) - - script: | - set -e - npm run gulp compile-extension:vscode-test-resolver - APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)" \ - npm run smoketest-no-compile -- --tracing --remote --build "$APP_PATH" - timeoutInMinutes: 20 - displayName: Run smoke tests (Remote) + - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs="--disable-dev-shm-usage" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web + timeoutInMinutes: 20 + displayName: Run smoke tests (Browser, Chromium) - script: | set -e - ps -ef - cat /proc/sys/fs/inotify/max_user_watches - lsof | wc -l - displayName: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles) - continueOnError: true - condition: succeededOrFailed() + npm run gulp compile-extension:vscode-test-resolver + APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) + VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)" \ + npm run smoketest-no-compile -- --tracing --remote --build "$APP_PATH" + timeoutInMinutes: 20 + displayName: Run smoke tests (Remote) + + - script: | + set -e + ps -ef + cat /proc/sys/fs/inotify/max_user_watches + lsof | wc -l + displayName: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles) + continueOnError: true + condition: succeededOrFailed() - ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - task: ${{ parameters.PUBLISH_TASK_NAME }} - inputs: - targetPath: .build/crashes - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: crash-dump-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: crash-dump-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: crash-dump-linux-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Crash Reports" - continueOnError: true - condition: failed() + - task: ${{ parameters.PUBLISH_TASK_NAME }} + inputs: + targetPath: .build/crashes + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: crash-dump-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: crash-dump-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: crash-dump-linux-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Crash Reports" + continueOnError: true + condition: failed() - # In order to properly symbolify above crash reports - # (if any), we need the compiled native modules too - - task: ${{ parameters.PUBLISH_TASK_NAME }} - inputs: - targetPath: node_modules - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: node-modules-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: node-modules-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: node-modules-linux-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Node Modules" - continueOnError: true - condition: failed() + # In order to properly symbolify above crash reports + # (if any), we need the compiled native modules too + - task: ${{ parameters.PUBLISH_TASK_NAME }} + inputs: + targetPath: node_modules + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: node-modules-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: node-modules-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: node-modules-linux-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Node Modules" + continueOnError: true + condition: failed() - - task: ${{ parameters.PUBLISH_TASK_NAME }} - inputs: - targetPath: .build/logs - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: logs-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: logs-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: logs-linux-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Log Files" - continueOnError: true - condition: succeededOrFailed() + - task: ${{ parameters.PUBLISH_TASK_NAME }} + inputs: + targetPath: .build/logs + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: logs-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: logs-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: logs-linux-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Log Files" + continueOnError: true + condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Tests Results diff --git a/build/azure-pipelines/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml index 2ef820f9f..3f53731b7 100644 --- a/build/azure-pipelines/linux/product-build-linux.yml +++ b/build/azure-pipelines/linux/product-build-linux.yml @@ -11,15 +11,15 @@ parameters: type: boolean - name: VSCODE_ARCH type: string - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false steps: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - checkout: self - fetchDepth: 1 - retryCountOnTaskFailure: 3 + - checkout: self + fetchDepth: 1 + retryCountOnTaskFailure: 3 - task: NodeTool@0 inputs: @@ -28,29 +28,29 @@ steps: nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - template: ../distro/download-distro.yml@self + - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" + - task: AzureKeyVault@2 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" - - task: DownloadPipelineArtifact@2 - inputs: - artifact: Compilation - path: $(Build.ArtifactStagingDirectory) - displayName: Download compilation output + - task: DownloadPipelineArtifact@2 + inputs: + artifact: Compilation + path: $(Build.ArtifactStagingDirectory) + displayName: Download compilation output - - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz - displayName: Extract compilation output + - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz + displayName: Extract compilation output - script: | set -e # Start X server - sudo apt-get update - sudo apt-get install -y pkg-config \ + ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update + ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y pkg-config \ dbus \ xvfb \ libgtk-3-0 \ @@ -155,23 +155,23 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/azure-pipelines/distro/mixin-npm - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Mixin distro node modules + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - ${{ else }}: - # Ref https://github.com/microsoft/vscode/issues/189019 - # for the node-gyp rebuild step - - script: | - set -e - - cd node_modules/native-keymap && npx node-gyp@9.4.0 -y rebuild --debug - cd ../.. && ./.github/workflows/check-clean-git-state.sh - env: - npm_config_arch: $(NPM_ARCH) - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Rebuild debug version of native modules (OSS) - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + # Ref https://github.com/microsoft/vscode/issues/189019 + # for the node-gyp rebuild step + - script: | + set -e + + cd node_modules/native-keymap && npx node-gyp@9.4.0 -y rebuild --debug + cd ../.. && ./.github/workflows/check-clean-git-state.sh + env: + npm_config_arch: $(NPM_ARCH) + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Rebuild debug version of native modules (OSS) + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - script: | set -e @@ -182,236 +182,236 @@ steps: displayName: Create node_modules archive - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/azure-pipelines/distro/mixin-quality - displayName: Mixin distro quality + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality - template: ../common/install-builtin-extensions.yml@self - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - npm run gulp vscode-linux-$(VSCODE_ARCH)-min-ci - ARCHIVE_PATH=".build/linux/client/code-${{ parameters.VSCODE_QUALITY }}-$(VSCODE_ARCH)-$(date +%s).tar.gz" - mkdir -p $(dirname $ARCHIVE_PATH) - echo "##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Build client - - - ${{ if ne(parameters.VSCODE_CIBUILD, true) }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: $(ARTIFACT_PREFIX)vscode_cli_linux_$(VSCODE_ARCH)_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - - - script: | - set -e - tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(Build.ArtifactStagingDirectory)/cli - CLI_APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").tunnelApplicationName") - APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").applicationName") - mv $(Build.ArtifactStagingDirectory)/cli/$APP_NAME $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/$CLI_APP_NAME - displayName: Mix in CLI + - script: | + set -e + npm run gulp vscode-linux-$(VSCODE_ARCH)-min-ci + ARCHIVE_PATH=".build/linux/client/code-${{ parameters.VSCODE_QUALITY }}-$(VSCODE_ARCH)-$(date +%s).tar.gz" + mkdir -p $(dirname $ARCHIVE_PATH) + echo "##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build client + + - ${{ if ne(parameters.VSCODE_CIBUILD, true) }}: + - task: DownloadPipelineArtifact@2 + inputs: + artifact: $(ARTIFACT_PREFIX)vscode_cli_linux_$(VSCODE_ARCH)_cli + patterns: "**" + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI - script: | set -e - tar -czf $CLIENT_PATH -C .. VSCode-linux-$(VSCODE_ARCH) - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Archive client - + tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(Build.ArtifactStagingDirectory)/cli + CLI_APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").tunnelApplicationName") + APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").applicationName") + mv $(Build.ArtifactStagingDirectory)/cli/$APP_NAME $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/$CLI_APP_NAME + displayName: Mix in CLI + + - script: | + set -e + tar -czf $CLIENT_PATH -C .. VSCode-linux-$(VSCODE_ARCH) + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Archive client + + - script: | + set -e + npm run gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci + mv ../vscode-reh-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH) # TODO@joaomoreno + ARCHIVE_PATH=".build/linux/server/vscode-server-linux-$(VSCODE_ARCH).tar.gz" + UNARCHIVE_PATH="`pwd`/../vscode-server-linux-$(VSCODE_ARCH)" + mkdir -p $(dirname $ARCHIVE_PATH) + tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-linux-$(VSCODE_ARCH) + echo "##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH" + echo "##vso[task.setvariable variable=SERVER_UNARCHIVE_PATH]$UNARCHIVE_PATH" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server + + - script: | + set -e + npm run gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci + mv ../vscode-reh-web-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH)-web # TODO@joaomoreno + ARCHIVE_PATH=".build/linux/web/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz" + mkdir -p $(dirname $ARCHIVE_PATH) + tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-linux-$(VSCODE_ARCH)-web + echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server (web) + + - ${{ if or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64')) }}: - script: | set -e - npm run gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci - mv ../vscode-reh-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH) # TODO@joaomoreno - ARCHIVE_PATH=".build/linux/server/vscode-server-linux-$(VSCODE_ARCH).tar.gz" - UNARCHIVE_PATH="`pwd`/../vscode-server-linux-$(VSCODE_ARCH)" - mkdir -p $(dirname $ARCHIVE_PATH) - tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-linux-$(VSCODE_ARCH) - echo "##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH" - echo "##vso[task.setvariable variable=SERVER_UNARCHIVE_PATH]$UNARCHIVE_PATH" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Build server - - script: | - set -e - npm run gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci - mv ../vscode-reh-web-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH)-web # TODO@joaomoreno - ARCHIVE_PATH=".build/linux/web/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz" - mkdir -p $(dirname $ARCHIVE_PATH) - tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-linux-$(VSCODE_ARCH)-web - echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Build server (web) - - - ${{ if or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64')) }}: - - script: | - set -e - - source ./build/azure-pipelines/linux/setup-env.sh - - EXPECTED_GLIBC_VERSION="2.28" \ - EXPECTED_GLIBCXX_VERSION="3.4.25" \ - ./build/azure-pipelines/linux/verify-glibc-requirements.sh - env: - SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) - npm_config_arch: $(NPM_ARCH) - VSCODE_ARCH: $(VSCODE_ARCH) - displayName: Check GLIBC and GLIBCXX dependencies in server archive - - - ${{ else }}: - - script: | - set -e - - source ./build/azure-pipelines/linux/setup-env.sh - - EXPECTED_GLIBC_VERSION="2.28" \ - EXPECTED_GLIBCXX_VERSION="3.4.26" \ - ./build/azure-pipelines/linux/verify-glibc-requirements.sh - env: - SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) - npm_config_arch: $(NPM_ARCH) - VSCODE_ARCH: $(VSCODE_ARCH) - displayName: Check GLIBC and GLIBCXX dependencies in server archive + source ./build/azure-pipelines/linux/setup-env.sh - - ${{ else }}: - - script: npm run gulp "transpile-client-swc" "transpile-extensions" + EXPECTED_GLIBC_VERSION="2.28" \ + EXPECTED_GLIBCXX_VERSION="3.4.25" \ + ./build/azure-pipelines/linux/verify-glibc-requirements.sh env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Transpile client and extensions - - - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - template: product-build-linux-test.yml@self - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} - VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} - VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }} - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1 + SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) + npm_config_arch: $(NPM_ARCH) + VSCODE_ARCH: $(VSCODE_ARCH) + displayName: Check GLIBC and GLIBCXX dependencies in server archive - - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}: + - ${{ else }}: - script: | set -e - npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-deb" - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Prepare deb package - - script: | - set -e - npm run gulp "vscode-linux-$(VSCODE_ARCH)-build-deb" - echo "##vso[task.setvariable variable=DEB_PATH]$(ls .build/linux/deb/*/deb/*.deb)" - displayName: Build deb package + source ./build/azure-pipelines/linux/setup-env.sh - - script: | - set -e - TRIPLE="" - if [ "$VSCODE_ARCH" == "x64" ]; then - TRIPLE="x86_64-linux-gnu" - elif [ "$VSCODE_ARCH" == "arm64" ]; then - TRIPLE="aarch64-linux-gnu" - elif [ "$VSCODE_ARCH" == "armhf" ]; then - TRIPLE="arm-rpi-linux-gnueabihf" - fi - export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots - export STRIP="$VSCODE_SYSROOT_DIR/$TRIPLE/$TRIPLE/bin/strip" - npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-rpm" + EXPECTED_GLIBC_VERSION="2.28" \ + EXPECTED_GLIBCXX_VERSION="3.4.26" \ + ./build/azure-pipelines/linux/verify-glibc-requirements.sh env: + SEARCH_PATH: $(SERVER_UNARCHIVE_PATH) + npm_config_arch: $(NPM_ARCH) VSCODE_ARCH: $(VSCODE_ARCH) - displayName: Prepare rpm package - - - script: | - set -e - npm run gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm" - echo "##vso[task.setvariable variable=RPM_PATH]$(ls .build/linux/rpm/*/*.rpm)" - displayName: Build rpm package - - - script: | - set -e - npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap" - ARCHIVE_PATH=".build/linux/snap-tarball/snap-$(VSCODE_ARCH).tar.gz" - mkdir -p $(dirname $ARCHIVE_PATH) - tar -czf $ARCHIVE_PATH -C .build/linux snap - echo "##vso[task.setvariable variable=SNAP_PATH]$ARCHIVE_PATH" - displayName: Prepare snap package - - - task: UseDotNet@2 - inputs: - version: 6.x + displayName: Check GLIBC and GLIBCXX dependencies in server archive - - task: EsrpClientTool@1 - continueOnError: true - displayName: Download ESRPClient - - - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll sign-pgp $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/deb '*.deb' - displayName: Codesign deb - - - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll sign-pgp $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm' - displayName: Codesign rpm + - ${{ else }}: + - script: npm run gulp "transpile-client-swc" "transpile-extensions" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Transpile client and extensions - - script: echo "##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_" - condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')) - displayName: Generate artifact prefix + - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + - template: product-build-linux-test.yml@self + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} + VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} + VSCODE_BUILD_AMD: ${{ parameters.VSCODE_BUILD_AMD }} + ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1 - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(CLIENT_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned - sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-linux-$(VSCODE_ARCH) - sbomPackageName: "VS Code Linux $(VSCODE_ARCH) (unsigned)" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['CLIENT_PATH'], '')) - displayName: Publish client archive - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(SERVER_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned - sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH) - sbomPackageName: "VS Code Linux $(VSCODE_ARCH) Server" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], '')) - displayName: Publish server archive - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(WEB_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned - sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web - sbomPackageName: "VS Code Linux $(VSCODE_ARCH) Web" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], '')) - displayName: Publish web server archive - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(DEB_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_deb-package - sbomBuildDropPath: .build/linux/deb - sbomPackageName: "VS Code Linux $(VSCODE_ARCH) DEB" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['DEB_PATH'], '')) - displayName: Publish deb package - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(RPM_PATH) - artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_rpm-package - sbomBuildDropPath: .build/linux/rpm - sbomPackageName: "VS Code Linux $(VSCODE_ARCH) RPM" - sbomPackageVersion: $(Build.SourceVersion) - condition: and(succeededOrFailed(), ne(variables['RPM_PATH'], '')) - displayName: Publish rpm package - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(SNAP_PATH) - artifactName: $(ARTIFACT_PREFIX)snap-$(VSCODE_ARCH) - sbomEnabled: false - condition: and(succeededOrFailed(), ne(variables['SNAP_PATH'], '')) - displayName: Publish snap pre-package + - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}: + - script: | + set -e + npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-deb" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Prepare deb package + + - script: | + set -e + npm run gulp "vscode-linux-$(VSCODE_ARCH)-build-deb" + echo "##vso[task.setvariable variable=DEB_PATH]$(ls .build/linux/deb/*/deb/*.deb)" + displayName: Build deb package + + - script: | + set -e + TRIPLE="" + if [ "$VSCODE_ARCH" == "x64" ]; then + TRIPLE="x86_64-linux-gnu" + elif [ "$VSCODE_ARCH" == "arm64" ]; then + TRIPLE="aarch64-linux-gnu" + elif [ "$VSCODE_ARCH" == "armhf" ]; then + TRIPLE="arm-rpi-linux-gnueabihf" + fi + export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots + export STRIP="$VSCODE_SYSROOT_DIR/$TRIPLE/$TRIPLE/bin/strip" + npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-rpm" + env: + VSCODE_ARCH: $(VSCODE_ARCH) + displayName: Prepare rpm package + + - script: | + set -e + npm run gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm" + echo "##vso[task.setvariable variable=RPM_PATH]$(ls .build/linux/rpm/*/*.rpm)" + displayName: Build rpm package + + - script: | + set -e + npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap" + ARCHIVE_PATH=".build/linux/snap-tarball/snap-$(VSCODE_ARCH).tar.gz" + mkdir -p $(dirname $ARCHIVE_PATH) + tar -czf $ARCHIVE_PATH -C .build/linux snap + echo "##vso[task.setvariable variable=SNAP_PATH]$ARCHIVE_PATH" + displayName: Prepare snap package + + - task: UseDotNet@2 + inputs: + version: 6.x + + - task: EsrpClientTool@1 + continueOnError: true + displayName: Download ESRPClient + + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll sign-pgp $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/deb '*.deb' + displayName: Codesign deb + + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll sign-pgp $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm' + displayName: Codesign rpm + + - script: echo "##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_" + condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues')) + displayName: Generate artifact prefix + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(CLIENT_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned + sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-linux-$(VSCODE_ARCH) + sbomPackageName: "VS Code Linux $(VSCODE_ARCH) (unsigned)" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['CLIENT_PATH'], '')) + displayName: Publish client archive + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(SERVER_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned + sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH) + sbomPackageName: "VS Code Linux $(VSCODE_ARCH) Server" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], '')) + displayName: Publish server archive + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(WEB_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned + sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web + sbomPackageName: "VS Code Linux $(VSCODE_ARCH) Web" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], '')) + displayName: Publish web server archive + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(DEB_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_deb-package + sbomBuildDropPath: .build/linux/deb + sbomPackageName: "VS Code Linux $(VSCODE_ARCH) DEB" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['DEB_PATH'], '')) + displayName: Publish deb package + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(RPM_PATH) + artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_rpm-package + sbomBuildDropPath: .build/linux/rpm + sbomPackageName: "VS Code Linux $(VSCODE_ARCH) RPM" + sbomPackageVersion: $(Build.SourceVersion) + condition: and(succeededOrFailed(), ne(variables['RPM_PATH'], '')) + displayName: Publish rpm package + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(SNAP_PATH) + artifactName: $(ARTIFACT_PREFIX)snap-$(VSCODE_ARCH) + sbomEnabled: false + condition: and(succeededOrFailed(), ne(variables['SNAP_PATH'], '')) + displayName: Publish snap pre-package diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh index 949b5f371..1ce3ba742 100644 --- a/build/azure-pipelines/linux/setup-env.sh +++ b/build/azure-pipelines/linux/setup-env.sh @@ -8,7 +8,12 @@ if [ "$SYSROOT_ARCH" == "x64" ]; then fi export VSCODE_SYSROOT_DIR=$PWD/.build/sysroots -SYSROOT_ARCH="$SYSROOT_ARCH" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' +if [ -d "$VSCODE_SYSROOT_DIR" ]; then + echo "Using cached sysroot" +else + echo "Downloading sysroot" + SYSROOT_ARCH="$SYSROOT_ARCH" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' +fi if [ "$npm_config_arch" == "x64" ]; then if [ "$(echo "$@" | grep -c -- "--only-remote")" -eq 0 ]; then diff --git a/build/azure-pipelines/linux/snap-build-linux.yml b/build/azure-pipelines/linux/snap-build-linux.yml index 3c0cf726f..3582be07c 100644 --- a/build/azure-pipelines/linux/snap-build-linux.yml +++ b/build/azure-pipelines/linux/snap-build-linux.yml @@ -5,11 +5,11 @@ steps: versionFilePath: .nvmrc nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download - - task: DownloadPipelineArtifact@0 + - task: DownloadPipelineArtifact@2 displayName: "Download Pipeline Artifact" inputs: - artifactName: snap-$(VSCODE_ARCH) - targetPath: .build/linux/snap-tarball + artifact: snap-$(VSCODE_ARCH) + path: .build/linux/snap-tarball - script: | set -e diff --git a/build/azure-pipelines/product-build-pr.yml b/build/azure-pipelines/product-build-pr.yml index 09fe2a5d1..025a1eeac 100644 --- a/build/azure-pipelines/product-build-pr.yml +++ b/build/azure-pipelines/product-build-pr.yml @@ -21,118 +21,125 @@ variables: value: oss - name: VSCODE_STEP_ON_IT value: false + - name: VSCODE_BUILD_AMD + value: false jobs: - ${{ if ne(variables['VSCODE_CIBUILD'], true) }}: - - job: Compile - displayName: Compile & Hygiene - pool: 1es-oss-ubuntu-20.04-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - steps: - - template: product-compile.yml@self - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + - job: Compile + displayName: Compile & Hygiene + pool: 1es-oss-ubuntu-22.04-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + steps: + - template: product-compile.yml@self + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - - job: Linuxx64UnitTest - displayName: Linux (Unit Tests) - pool: 1es-oss-ubuntu-20.04-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux.yml@self - parameters: - VSCODE_ARCH: x64 - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} - VSCODE_RUN_UNIT_TESTS: true - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false + - job: Linuxx64UnitTest + displayName: Linux (Unit Tests) + pool: 1es-oss-ubuntu-22.04-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" + steps: + - template: linux/product-build-linux.yml@self + parameters: + VSCODE_ARCH: x64 + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: true + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - - job: Linuxx64IntegrationTest - displayName: Linux (Integration Tests) - pool: 1es-oss-ubuntu-20.04-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux.yml@self - parameters: - VSCODE_ARCH: x64 - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: true - VSCODE_RUN_SMOKE_TESTS: false + - job: Linuxx64IntegrationTest + displayName: Linux (Integration Tests) + pool: 1es-oss-ubuntu-22.04-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" + steps: + - template: linux/product-build-linux.yml@self + parameters: + VSCODE_ARCH: x64 + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: true + VSCODE_RUN_SMOKE_TESTS: false - - job: Linuxx64SmokeTest - displayName: Linux (Smoke Tests) - pool: 1es-oss-ubuntu-20.04-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux.yml@self - parameters: - VSCODE_ARCH: x64 - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: true + - job: Linuxx64SmokeTest + displayName: Linux (Smoke Tests) + pool: 1es-oss-ubuntu-22.04-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" + steps: + - template: linux/product-build-linux.yml@self + parameters: + VSCODE_ARCH: x64 + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: true - - job: LinuxCLI - displayName: Linux (CLI) - pool: 1es-oss-ubuntu-20.04-x64 - timeoutInMinutes: 30 - steps: - - template: cli/test.yml@self + - job: LinuxCLI + displayName: Linux (CLI) + pool: 1es-oss-ubuntu-22.04-x64 + timeoutInMinutes: 30 + steps: + - template: cli/test.yml@self - - job: Windowsx64UnitTests - displayName: Windows (Unit Tests) - pool: 1es-oss-windows-2019-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - steps: - - template: win32/product-build-win32.yml@self - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_ARCH: x64 - VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} - VSCODE_RUN_UNIT_TESTS: true - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false + - job: Windowsx64UnitTests + displayName: Windows (Unit Tests) + pool: 1es-oss-windows-2022-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + steps: + - template: win32/product-build-win32.yml@self + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} + VSCODE_ARCH: x64 + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: true + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - - job: Windowsx64IntegrationTests - displayName: Windows (Integration Tests) - pool: 1es-oss-windows-2022-x64 - timeoutInMinutes: 60 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - steps: - - template: win32/product-build-win32.yml@self - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_ARCH: x64 - VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: true - VSCODE_RUN_SMOKE_TESTS: false + - job: Windowsx64IntegrationTests + displayName: Windows (Integration Tests) + pool: 1es-oss-windows-2022-x64 + timeoutInMinutes: 60 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + steps: + - template: win32/product-build-win32.yml@self + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} + VSCODE_ARCH: x64 + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: true + VSCODE_RUN_SMOKE_TESTS: false # - job: Windowsx64SmokeTests # displayName: Windows (Smoke Tests) - # pool: 1es-oss-windows-2019-x64 + # pool: 1es-oss-windows-2022-x64 # timeoutInMinutes: 30 # variables: # VSCODE_ARCH: x64 @@ -147,23 +154,23 @@ jobs: # VSCODE_RUN_SMOKE_TESTS: true - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: - - job: Linuxx64MaintainNodeModulesCache - displayName: Linux (Maintain node_modules cache) - pool: 1es-oss-ubuntu-20.04-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - steps: - - template: oss/product-build-pr-cache-linux.yml@self + - job: Linuxx64MaintainNodeModulesCache + displayName: Linux (Maintain node_modules cache) + pool: 1es-oss-ubuntu-22.04-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + steps: + - template: oss/product-build-pr-cache-linux.yml@self - - job: Windowsx64MaintainNodeModulesCache - displayName: Windows (Maintain node_modules cache) - pool: 1es-oss-windows-2019-x64 - timeoutInMinutes: 30 - variables: - VSCODE_ARCH: x64 - steps: - - template: oss/product-build-pr-cache-win32.yml@self + - job: Windowsx64MaintainNodeModulesCache + displayName: Windows (Maintain node_modules cache) + pool: 1es-oss-windows-2022-x64 + timeoutInMinutes: 30 + variables: + VSCODE_ARCH: x64 + steps: + - template: oss/product-build-pr-cache-win32.yml@self # - job: macOSUnitTest # displayName: macOS (Unit Tests) diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml index b0e495b7b..d4038dced 100644 --- a/build/azure-pipelines/product-build.yml +++ b/build/azure-pipelines/product-build.yml @@ -100,8 +100,8 @@ parameters: displayName: "Skip tests" type: boolean default: false - - name: VSCODE_BUILD_ESM # TODO@bpasero TODO@esm remove me once ESM is shipped - displayName: "️❗ Build as ESM (!FOR TESTING ONLY!) ️❗" + - name: VSCODE_BUILD_AMD # TODO@bpasero TODO@esm remove me once AMD is removed + displayName: "️❗ Build as AMD (!FOR EMERGENCY ONLY!) ️❗" type: boolean default: false @@ -114,8 +114,8 @@ variables: value: ${{ parameters.CARGO_REGISTRY }} - name: VSCODE_QUALITY value: ${{ parameters.VSCODE_QUALITY }} - - name: VSCODE_BUILD_ESM - value: ${{ parameters.VSCODE_BUILD_ESM }} + - name: VSCODE_BUILD_AMD + value: ${{ parameters.VSCODE_BUILD_AMD }} - name: VSCODE_BUILD_STAGE_WINDOWS value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }} - name: VSCODE_BUILD_STAGE_LINUX @@ -201,6 +201,7 @@ extends: enableExclusions: true exclusionsFilePath: $(Build.SourcesDirectory)/.eslintignore sourceAnalysisPool: 1es-windows-2022-x64 + createAdoIssuesForJustificationsForDisablement: false containers: snapcraft: image: vscodehub.azurecr.io/vscode-linux-build-agent:snapcraft-x64 @@ -216,7 +217,7 @@ extends: - job: Compile timeoutInMinutes: 90 pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux variables: VSCODE_ARCH: x64 @@ -224,7 +225,7 @@ extends: - template: build/azure-pipelines/product-compile.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}: - stage: CompileCLI @@ -233,7 +234,7 @@ extends: - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: - job: CLILinuxX64 pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux steps: - template: build/azure-pipelines/linux/cli-build-linux.yml@self @@ -245,7 +246,7 @@ extends: - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}: - job: CLILinuxGnuARM pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux steps: - template: build/azure-pipelines/linux/cli-build-linux.yml@self @@ -257,7 +258,7 @@ extends: - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}: - job: CLIAlpineX64 pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux steps: - template: build/azure-pipelines/alpine/cli-build-alpine.yml@self @@ -362,7 +363,7 @@ extends: - template: build/azure-pipelines/win32/product-build-win32.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_ARCH: x64 VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: true @@ -377,7 +378,7 @@ extends: - template: build/azure-pipelines/win32/product-build-win32.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_ARCH: x64 VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false @@ -392,7 +393,7 @@ extends: - template: build/azure-pipelines/win32/product-build-win32.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_ARCH: x64 VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false @@ -408,7 +409,7 @@ extends: - template: build/azure-pipelines/win32/product-build-win32.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_ARCH: x64 VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} @@ -432,7 +433,7 @@ extends: - template: build/azure-pipelines/win32/product-build-win32.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_ARCH: arm64 VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false @@ -446,7 +447,7 @@ extends: - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}: - CompileCLI pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux jobs: - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: @@ -461,7 +462,7 @@ extends: parameters: VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: true VSCODE_RUN_INTEGRATION_TESTS: false @@ -477,7 +478,7 @@ extends: parameters: VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: true @@ -493,7 +494,7 @@ extends: parameters: VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false @@ -511,7 +512,7 @@ extends: parameters: VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} @@ -537,7 +538,7 @@ extends: parameters: VSCODE_ARCH: armhf VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false @@ -553,7 +554,7 @@ extends: parameters: VSCODE_ARCH: arm64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false @@ -578,7 +579,7 @@ extends: parameters: VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF_LEGACY_SERVER, true) }}: @@ -591,7 +592,7 @@ extends: parameters: VSCODE_ARCH: armhf VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_RUN_INTEGRATION_TESTS: false - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64_LEGACY_SERVER, true) }}: @@ -604,7 +605,7 @@ extends: parameters: VSCODE_ARCH: arm64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_RUN_INTEGRATION_TESTS: false - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_ALPINE'], true)) }}: @@ -614,7 +615,7 @@ extends: - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}: - CompileCLI pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux jobs: - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: @@ -657,7 +658,7 @@ extends: - template: build/azure-pipelines/darwin/product-build-darwin.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: true VSCODE_RUN_INTEGRATION_TESTS: false @@ -671,7 +672,7 @@ extends: - template: build/azure-pipelines/darwin/product-build-darwin.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: true @@ -685,7 +686,7 @@ extends: - template: build/azure-pipelines/darwin/product-build-darwin.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false @@ -700,7 +701,7 @@ extends: - template: build/azure-pipelines/darwin/product-build-darwin.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false @@ -715,7 +716,7 @@ extends: - template: build/azure-pipelines/darwin/product-build-darwin.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} @@ -747,7 +748,7 @@ extends: - template: build/azure-pipelines/darwin/product-build-darwin.yml@self parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ variables.VSCODE_BUILD_AMD }} VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false @@ -787,7 +788,7 @@ extends: dependsOn: - Compile pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux jobs: - ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}: @@ -817,7 +818,7 @@ extends: - stage: ApproveRelease dependsOn: [] # run in parallel to compile stage pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux jobs: - deployment: ApproveRelease @@ -838,7 +839,7 @@ extends: - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}: - ApproveRelease pool: - name: 1es-ubuntu-20.04-x64 + name: 1es-ubuntu-22.04-x64 os: linux jobs: - job: ReleaseBuild diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml index 49c0f20af..ca8b6a7b3 100644 --- a/build/azure-pipelines/product-compile.yml +++ b/build/azure-pipelines/product-compile.yml @@ -1,7 +1,7 @@ parameters: - name: VSCODE_QUALITY type: string - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false @@ -13,14 +13,14 @@ steps: nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - template: ./distro/download-distro.yml@self + - template: ./distro/download-distro.yml@self - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password" + - task: AzureKeyVault@2 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password" - script: node build/setup-npm-registry.js $NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) @@ -79,9 +79,9 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/azure-pipelines/distro/mixin-npm - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Mixin distro node modules + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - script: | set -e @@ -92,100 +92,100 @@ steps: displayName: Create node_modules archive - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: npm run compile - workingDirectory: build - displayName: Compile /build/ folder + - script: npm run compile + workingDirectory: build + displayName: Compile /build/ folder - - script: .github/workflows/check-clean-git-state.sh - displayName: Check /build/ folder + - script: .github/workflows/check-clean-git-state.sh + displayName: Check /build/ folder - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: node build/azure-pipelines/distro/mixin-quality - displayName: Mixin distro quality + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - script: node migrate.mjs --disable-watch - displayName: Migrate to ESM + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - script: node migrate.mjs --disable-watch --enable-esm-to-amd + displayName: Migrate ESM -> AMD - template: common/install-builtin-extensions.yml@self - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: npm exec -- npm-run-all -lp core-ci-pr extensions-ci-pr hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Compile & Hygiene (OSS) + - script: npm exec -- npm-run-all -lp core-ci-pr extensions-ci-pr hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Compile & Hygiene (OSS) - ${{ else }}: - - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Compile & Hygiene (non-OSS) + - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Compile & Hygiene (non-OSS) - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - npm run compile - displayName: Compile smoke test suites (non-OSS) - workingDirectory: test/smoke - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) - - - script: | - set -e - npm run compile - displayName: Compile integration test suites (non-OSS) - workingDirectory: test/integration/browser - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) - - - task: AzureCLI@2 - displayName: Fetch secrets - inputs: - azureSubscription: "vscode-builds-subscription" - scriptType: pscore - scriptLocation: inlineScript - addSpnToEnvironment: true - inlineScript: | - Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId" - Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId" - Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey" - - - script: | - set -e - AZURE_STORAGE_ACCOUNT="vscodeweb" \ - AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ - AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ - AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ - node build/azure-pipelines/upload-sourcemaps - displayName: Upload sourcemaps to Azure - - - script: | - set -e - AZURE_STORAGE_ACCOUNT="ticino" \ - AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ - AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ - AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ - node build/azure-pipelines/upload-sourcemaps - displayName: Upload sourcemaps to Azure (Deprecated) - - - script: ./build/azure-pipelines/common/extract-telemetry.sh - displayName: Generate lists of telemetry events - - - script: tar -cz --ignore-failed-read --exclude='.build/node_modules_cache' --exclude='.build/node_modules_list.txt' --exclude='.build/distro' -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out - displayName: Compress compilation artifact - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz - artifactName: Compilation - sbomEnabled: false - displayName: Publish compilation artifact - - - script: npm run download-builtin-extensions-cg - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download component details of built-in extensions - - - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - displayName: "Component Detection" - inputs: - sourceScanPath: $(Build.SourcesDirectory) - alertWarningLevel: Medium - continueOnError: true + - script: | + set -e + npm run compile + displayName: Compile smoke test suites (non-OSS) + workingDirectory: test/smoke + condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + + - script: | + set -e + npm run compile + displayName: Compile integration test suites (non-OSS) + workingDirectory: test/integration/browser + condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + + - task: AzureCLI@2 + displayName: Fetch secrets + inputs: + azureSubscription: "vscode-builds-subscription" + scriptType: pscore + scriptLocation: inlineScript + addSpnToEnvironment: true + inlineScript: | + Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId" + Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId" + Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey" + + - script: | + set -e + AZURE_STORAGE_ACCOUNT="vscodeweb" \ + AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ + AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ + AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ + node build/azure-pipelines/upload-sourcemaps + displayName: Upload sourcemaps to Azure + + - script: | + set -e + AZURE_STORAGE_ACCOUNT="ticino" \ + AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ + AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ + AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ + node build/azure-pipelines/upload-sourcemaps + displayName: Upload sourcemaps to Azure (Deprecated) + + - script: ./build/azure-pipelines/common/extract-telemetry.sh + displayName: Generate lists of telemetry events + + - script: tar -cz --ignore-failed-read --exclude='.build/node_modules_cache' --exclude='.build/node_modules_list.txt' --exclude='.build/distro' -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out + displayName: Compress compilation artifact + + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz + artifactName: Compilation + sbomEnabled: false + displayName: Publish compilation artifact + + - script: npm run download-builtin-extensions-cg + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Download component details of built-in extensions + + - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 + displayName: "Component Detection" + inputs: + sourceScanPath: $(Build.SourcesDirectory) + alertWarningLevel: Medium + continueOnError: true diff --git a/build/azure-pipelines/product-publish.yml b/build/azure-pipelines/product-publish.yml index 10039ab95..59012a938 100644 --- a/build/azure-pipelines/product-publish.yml +++ b/build/azure-pipelines/product-publish.yml @@ -8,14 +8,14 @@ steps: - task: SFP.build-tasks.esrpclient-tools-task.EsrpClientTool@2 displayName: "Use EsrpClient" - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" KeyVaultName: vscode-build-secrets SecretsFilter: "github-distro-mixin-password,esrp-aad-username,esrp-aad-password" - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/upload-sourcemaps.js b/build/azure-pipelines/upload-sourcemaps.js index 83c1cae59..2a01ab79d 100644 --- a/build/azure-pipelines/upload-sourcemaps.js +++ b/build/azure-pipelines/upload-sourcemaps.js @@ -8,6 +8,7 @@ const path = require("path"); const es = require("event-stream"); const vfs = require("vinyl-fs"); const util = require("../lib/util"); +const amd_1 = require("../lib/amd"); // @ts-ignore const deps = require("../lib/dependencies"); const identity_1 = require("@azure/identity"); @@ -25,6 +26,9 @@ function src(base, maps = `${base}/**/*.map`) { })); } function main() { + if ((0, amd_1.isAMD)()) { + return Promise.resolve(); // in AMD we run into some issues, but we want to unblock the build for recovery + } const sources = []; // vscode client maps (default) if (!base) { diff --git a/build/azure-pipelines/upload-sourcemaps.ts b/build/azure-pipelines/upload-sourcemaps.ts index 8e148c609..aed6446d7 100644 --- a/build/azure-pipelines/upload-sourcemaps.ts +++ b/build/azure-pipelines/upload-sourcemaps.ts @@ -8,6 +8,7 @@ import * as es from 'event-stream'; import * as Vinyl from 'vinyl'; import * as vfs from 'vinyl-fs'; import * as util from '../lib/util'; +import { isAMD } from '../lib/amd'; // @ts-ignore import * as deps from '../lib/dependencies'; import { ClientSecretCredential } from '@azure/identity'; @@ -29,6 +30,9 @@ function src(base: string, maps = `${base}/**/*.map`) { } function main(): Promise { + if (isAMD()) { + return Promise.resolve(); // in AMD we run into some issues, but we want to unblock the build for recovery + } const sources: any[] = []; // vscode client maps (default) diff --git a/build/azure-pipelines/web/product-build-web.yml b/build/azure-pipelines/web/product-build-web.yml index 515677a55..75cf20bfc 100644 --- a/build/azure-pipelines/web/product-build-web.yml +++ b/build/azure-pipelines/web/product-build-web.yml @@ -7,7 +7,7 @@ steps: - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/azure-pipelines/win32/product-build-win32-test.yml b/build/azure-pipelines/win32/product-build-win32-test.yml index 26c812925..6c6a0949d 100644 --- a/build/azure-pipelines/win32/product-build-win32-test.yml +++ b/build/azure-pipelines/win32/product-build-win32-test.yml @@ -12,7 +12,7 @@ parameters: - name: PUBLISH_TASK_NAME type: string default: PublishPipelineArtifact@0 - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false @@ -24,242 +24,242 @@ steps: retryCountOnTaskFailure: 3 - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}: - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - powershell: .\scripts\test-esm.bat --tfs "Unit Tests" - displayName: Run unit tests (Electron) [ESM] - timeoutInMinutes: 15 - - powershell: npm run test-node-amd - displayName: Run unit tests (node.js) [AMD] - timeoutInMinutes: 15 - - powershell: node test/unit/browser/index.esm.js --sequential --browser chromium --tfs "Browser Unit Tests" - displayName: Run unit tests (Browser, Chromium) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - powershell: .\scripts\test.bat --tfs "Unit Tests" - displayName: Run unit tests (Electron) - timeoutInMinutes: 15 - - powershell: npm run test-node - displayName: Run unit tests (node.js) - timeoutInMinutes: 15 - - powershell: node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests" - displayName: Run unit tests (Browser, Chromium) - timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - powershell: .\scripts\test-amd.bat --tfs "Unit Tests" + displayName: Run unit tests (Electron) [AMD] + timeoutInMinutes: 15 + - powershell: npm run test-node-amd + displayName: Run unit tests (node.js) [AMD] + timeoutInMinutes: 15 + - powershell: node test/unit/browser/index.amd.js --sequential --browser chromium --tfs "Browser Unit Tests" + displayName: Run unit tests (Browser, Chromium) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - powershell: .\scripts\test.bat --tfs "Unit Tests" + displayName: Run unit tests (Electron) + timeoutInMinutes: 15 + - powershell: npm run test-node + displayName: Run unit tests (node.js) + timeoutInMinutes: 15 + - powershell: node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests" + displayName: Run unit tests (Browser, Chromium) + timeoutInMinutes: 20 - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - powershell: .\scripts\test-esm.bat --build --tfs "Unit Tests" - displayName: Run unit tests (Electron) [ESM] - timeoutInMinutes: 15 - - script: npm run test-node-amd -- --build - displayName: Run unit tests (node.js) [AMD] - timeoutInMinutes: 15 - - powershell: npm run test-browser-amd-no-install -- --sequential --build --browser chromium --tfs "Browser Unit Tests" - displayName: Run unit tests (Browser, Chromium) [AMD] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - powershell: .\scripts\test.bat --build --tfs "Unit Tests" - displayName: Run unit tests (Electron) - timeoutInMinutes: 15 - - powershell: npm run test-node -- --build - displayName: Run unit tests (node.js) - timeoutInMinutes: 15 - - powershell: npm run test-browser-no-install -- --sequential --build --browser chromium --tfs "Browser Unit Tests" - displayName: Run unit tests (Browser, Chromium) - timeoutInMinutes: 20 + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - powershell: .\scripts\test-amd.bat --build --tfs "Unit Tests" + displayName: Run unit tests (Electron) [AMD] + timeoutInMinutes: 15 + - script: npm run test-node-amd -- --build + displayName: Run unit tests (node.js) [AMD] + timeoutInMinutes: 15 + - powershell: npm run test-browser-amd-no-install -- --sequential --build --browser chromium --tfs "Browser Unit Tests" + displayName: Run unit tests (Browser, Chromium) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - powershell: .\scripts\test.bat --build --tfs "Unit Tests" + displayName: Run unit tests (Electron) + timeoutInMinutes: 15 + - powershell: npm run test-node -- --build + displayName: Run unit tests (node.js) + timeoutInMinutes: 15 + - powershell: npm run test-browser-no-install -- --sequential --build --browser chromium --tfs "Browser Unit Tests" + displayName: Run unit tests (Browser, Chromium) + timeoutInMinutes: 20 - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { npm run gulp ` - compile-extension:configuration-editing ` - compile-extension:css-language-features-server ` - compile-extension:emmet ` - compile-extension:git ` - compile-extension:github-authentication ` - compile-extension:html-language-features-server ` - compile-extension:ipynb ` - compile-extension:notebook-renderers ` - compile-extension:json-language-features-server ` - compile-extension:markdown-language-features ` - compile-extension-media ` - compile-extension:microsoft-authentication ` - compile-extension:typescript-language-features ` - compile-extension:vscode-api-tests ` - compile-extension:vscode-colorize-tests ` - compile-extension:vscode-test-resolver ` - } - displayName: Build integration tests - - - powershell: .\build\azure-pipelines\win32\listprocesses.bat - displayName: Diagnostics before integration test runs - continueOnError: true - condition: succeededOrFailed() + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { npm run gulp ` + compile-extension:configuration-editing ` + compile-extension:css-language-features-server ` + compile-extension:emmet ` + compile-extension:git ` + compile-extension:github-authentication ` + compile-extension:html-language-features-server ` + compile-extension:ipynb ` + compile-extension:notebook-renderers ` + compile-extension:json-language-features-server ` + compile-extension:markdown-language-features ` + compile-extension-media ` + compile-extension:microsoft-authentication ` + compile-extension:typescript-language-features ` + compile-extension:vscode-api-tests ` + compile-extension:vscode-colorize-tests ` + compile-extension:vscode-test-resolver ` + } + displayName: Build integration tests - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - powershell: .\scripts\test-integration-esm.bat --tfs "Integration Tests" - displayName: Run integration tests (Electron) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - powershell: .\scripts\test-integration.bat --tfs "Integration Tests" - displayName: Run integration tests (Electron) - timeoutInMinutes: 20 + - powershell: .\build\azure-pipelines\win32\listprocesses.bat + displayName: Diagnostics before integration test runs + continueOnError: true + condition: succeededOrFailed() - - powershell: .\scripts\test-web-integration.bat --browser firefox - displayName: Run integration tests (Browser, Firefox) - timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - powershell: .\scripts\test-integration-amd.bat --tfs "Integration Tests" + displayName: Run integration tests (Electron) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - powershell: .\scripts\test-integration.bat --tfs "Integration Tests" + displayName: Run integration tests (Electron) + timeoutInMinutes: 20 - - powershell: .\scripts\test-remote-integration.bat - displayName: Run integration tests (Remote) - timeoutInMinutes: 20 + - powershell: .\scripts\test-web-integration.bat --browser chromium + displayName: Run integration tests (Browser, Chromium) + timeoutInMinutes: 20 - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}: - - powershell: | - # Figure out the full absolute path of the product we just built - # including the remote server and configure the integration tests - # to run with these builds instead of running out of sources. - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json - $AppNameShort = $AppProductJson.nameShort - $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe" - $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)" - exec { .\scripts\test-integration-esm.bat --build --tfs "Integration Tests" } - displayName: Run integration tests (Electron) [ESM] - timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}: - - powershell: | - # Figure out the full absolute path of the product we just built - # including the remote server and configure the integration tests - # to run with these builds instead of running out of sources. - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json - $AppNameShort = $AppProductJson.nameShort - $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe" - $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)" - exec { .\scripts\test-integration.bat --build --tfs "Integration Tests" } - displayName: Run integration tests (Electron) - timeoutInMinutes: 20 + - powershell: .\scripts\test-remote-integration.bat + displayName: Run integration tests (Remote) + timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)-web" - exec { .\scripts\test-web-integration.bat --browser firefox } - displayName: Run integration tests (Browser, Firefox) - timeoutInMinutes: 20 + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - ${{ if eq(parameters.VSCODE_BUILD_AMD, true) }}: + - powershell: | + # Figure out the full absolute path of the product we just built + # including the remote server and configure the integration tests + # to run with these builds instead of running out of sources. + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" + $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json + $AppNameShort = $AppProductJson.nameShort + $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe" + $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)" + exec { .\scripts\test-integration-amd.bat --build --tfs "Integration Tests" } + displayName: Run integration tests (Electron) [AMD] + timeoutInMinutes: 20 + - ${{ if eq(parameters.VSCODE_BUILD_AMD, false) }}: + - powershell: | + # Figure out the full absolute path of the product we just built + # including the remote server and configure the integration tests + # to run with these builds instead of running out of sources. + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" + $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json + $AppNameShort = $AppProductJson.nameShort + $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe" + $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)" + exec { .\scripts\test-integration.bat --build --tfs "Integration Tests" } + displayName: Run integration tests (Electron) + timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json - $AppNameShort = $AppProductJson.nameShort - $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe" - $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)" - exec { .\scripts\test-remote-integration.bat } - displayName: Run integration tests (Remote) - timeoutInMinutes: 20 + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)-web" + exec { .\scripts\test-web-integration.bat --browser firefox } + displayName: Run integration tests (Browser, Firefox) + timeoutInMinutes: 20 - - powershell: .\build\azure-pipelines\win32\listprocesses.bat - displayName: Diagnostics after integration test runs - continueOnError: true - condition: succeededOrFailed() + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" + $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json + $AppNameShort = $AppProductJson.nameShort + $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe" + $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)" + exec { .\scripts\test-remote-integration.bat } + displayName: Run integration tests (Remote) + timeoutInMinutes: 20 - - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: - powershell: .\build\azure-pipelines\win32\listprocesses.bat - displayName: Diagnostics before smoke test run + displayName: Diagnostics after integration test runs continueOnError: true condition: succeededOrFailed() - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: npm run compile - workingDirectory: test/smoke - displayName: Compile smoke tests + - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: + - powershell: .\build\azure-pipelines\win32\listprocesses.bat + displayName: Diagnostics before smoke test run + continueOnError: true + condition: succeededOrFailed() - - powershell: npm run gulp compile-extension-media - displayName: Build extensions for smoke tests + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - powershell: npm run compile + workingDirectory: test/smoke + displayName: Compile smoke tests - - powershell: npm run smoketest-no-compile -- --tracing - displayName: Run smoke tests (Electron) - timeoutInMinutes: 20 + - powershell: npm run gulp compile-extension-media + displayName: Build extensions for smoke tests - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - displayName: Run smoke tests (Electron) - timeoutInMinutes: 20 + - powershell: npm run smoketest-no-compile -- --tracing + displayName: Run smoke tests (Electron) + timeoutInMinutes: 20 - - powershell: npm run smoketest-no-compile -- --web --tracing --headless - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)-web - displayName: Run smoke tests (Browser, Chromium) - timeoutInMinutes: 20 + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - powershell: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" + displayName: Run smoke tests (Electron) + timeoutInMinutes: 20 - - powershell: npm run gulp compile-extension:vscode-test-resolver - displayName: Compile test resolver extension - timeoutInMinutes: 20 + - powershell: npm run smoketest-no-compile -- --web --tracing --headless + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)-web + displayName: Run smoke tests (Browser, Chromium) + timeoutInMinutes: 20 - - powershell: npm run smoketest-no-compile -- --tracing --remote --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - env: - VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH) - displayName: Run smoke tests (Remote) - timeoutInMinutes: 20 + - powershell: npm run gulp compile-extension:vscode-test-resolver + displayName: Compile test resolver extension + timeoutInMinutes: 20 - - powershell: .\build\azure-pipelines\win32\listprocesses.bat - displayName: Diagnostics after smoke test run - continueOnError: true - condition: succeededOrFailed() + - powershell: npm run smoketest-no-compile -- --tracing --remote --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH) + displayName: Run smoke tests (Remote) + timeoutInMinutes: 20 + + - powershell: .\build\azure-pipelines\win32\listprocesses.bat + displayName: Diagnostics after smoke test run + continueOnError: true + condition: succeededOrFailed() - ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - task: ${{ parameters.PUBLISH_TASK_NAME }} - inputs: - targetPath: .build\crashes - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: crash-dump-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: crash-dump-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: crash-dump-windows-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Crash Reports" - continueOnError: true - condition: failed() + - task: ${{ parameters.PUBLISH_TASK_NAME }} + inputs: + targetPath: .build\crashes + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: crash-dump-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: crash-dump-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: crash-dump-windows-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Crash Reports" + continueOnError: true + condition: failed() - # In order to properly symbolify above crash reports - # (if any), we need the compiled native modules too - - task: ${{ parameters.PUBLISH_TASK_NAME }} - inputs: - targetPath: node_modules - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: node-modules-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: node-modules-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: node-modules-windows-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Node Modules" - continueOnError: true - condition: failed() + # In order to properly symbolify above crash reports + # (if any), we need the compiled native modules too + - task: ${{ parameters.PUBLISH_TASK_NAME }} + inputs: + targetPath: node_modules + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: node-modules-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: node-modules-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: node-modules-windows-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Node Modules" + continueOnError: true + condition: failed() - - task: ${{ parameters.PUBLISH_TASK_NAME }} - inputs: - targetPath: .build\logs - ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - artifactName: logs-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt) - ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - artifactName: logs-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) - ${{ else }}: - artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt) - sbomEnabled: false - displayName: "Publish Log Files" - continueOnError: true - condition: succeededOrFailed() + - task: ${{ parameters.PUBLISH_TASK_NAME }} + inputs: + targetPath: .build\logs + ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: + artifactName: logs-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt) + ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + artifactName: logs-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt) + ${{ else }}: + artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt) + sbomEnabled: false + displayName: "Publish Log Files" + continueOnError: true + condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Tests Results diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml index 0496c6416..dddcb34a8 100644 --- a/build/azure-pipelines/win32/product-build-win32.yml +++ b/build/azure-pipelines/win32/product-build-win32.yml @@ -11,7 +11,7 @@ parameters: type: boolean - name: VSCODE_RUN_SMOKE_TESTS type: boolean - - name: VSCODE_BUILD_ESM + - name: VSCODE_BUILD_AMD type: boolean default: false @@ -35,7 +35,7 @@ steps: - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" @@ -182,7 +182,7 @@ steps: VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} - VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }} + VSCODE_BUILD_AMD: ${{ parameters.VSCODE_BUILD_AMD }} ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1 diff --git a/build/azure-pipelines/win32/sdl-scan-win32.yml b/build/azure-pipelines/win32/sdl-scan-win32.yml index 9476a2dc3..fc40b9a0e 100644 --- a/build/azure-pipelines/win32/sdl-scan-win32.yml +++ b/build/azure-pipelines/win32/sdl-scan-win32.yml @@ -18,7 +18,7 @@ steps: - template: ../distro/download-distro.yml@self - - task: AzureKeyVault@1 + - task: AzureKeyVault@2 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" diff --git a/build/buildfile.js b/build/buildfile.js index 74ac8436c..0e323ac0f 100644 --- a/build/buildfile.js +++ b/build/buildfile.js @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -const { isESM } = require('./lib/esm'); +const { isAMD } = require('./lib/amd'); /** * @param {string} name @@ -71,7 +71,7 @@ exports.workerOutputLinks = createEditorWorkerModuleDescription('vs/workbench/co exports.workerBackgroundTokenization = createEditorWorkerModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.worker'); exports.workbenchDesktop = function () { - return isESM() ? [ + return !isAMD() ? [ createModuleDescription('vs/workbench/contrib/debug/node/telemetryApp'), createModuleDescription('vs/platform/files/node/watcher/watcherMain'), createModuleDescription('vs/platform/terminal/node/ptyHostMain'), @@ -90,12 +90,12 @@ exports.workbenchDesktop = function () { }; exports.workbenchWeb = function () { - return isESM() ? [ + return !isAMD() ? [ createModuleDescription('vs/workbench/workbench.web.main') ] : [ ...createEditorWorkerModuleDescription('vs/workbench/contrib/output/common/outputLinkComputer'), ...createEditorWorkerModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.worker'), - createModuleDescription('vs/code/browser/workbench/workbench', ['vs/workbench/workbench.web.main']) + createModuleDescription('vs/code/browser/workbench/workbench', ['vs/workbench/workbench.web.main.internal']) ]; }; @@ -109,7 +109,7 @@ exports.code = [ createModuleDescription('vs/code/electron-main/main'), createModuleDescription('vs/code/node/cli'), createModuleDescription('vs/code/node/cliProcessMain', ['vs/code/node/cli']), - createModuleDescription('vs/code/node/sharedProcess/sharedProcessMain'), + createModuleDescription('vs/code/electron-utility/sharedProcess/sharedProcessMain'), createModuleDescription('vs/code/electron-sandbox/processExplorer/processExplorerMain') ]; diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt index aecf657e5..536542138 100644 --- a/build/checksums/electron.txt +++ b/build/checksums/electron.txt @@ -1,75 +1,75 @@ -3e432bd550279c2d58c6a02b0bda048fa2a9a89aef9752e22c39a518a83fe96f *chromedriver-v30.4.0-darwin-arm64.zip -4d38f40ec33955dd0aef5cc0053b2b07c4744abb9f2614a44780280c4678aca9 *chromedriver-v30.4.0-darwin-x64.zip -338f2a361448e78aa8c319cd582f2dd6d891d6c0c66b676c628e50511c27514f *chromedriver-v30.4.0-linux-arm64.zip -8cffae19618fe5f0eaff40378c40084e18f9747bbbe2d87390203a3012c98367 *chromedriver-v30.4.0-linux-armv7l.zip -7ff1b75defc522f327c0f1bf6f4d13938b041cf5de1d7417b9dc5d1e7026e93c *chromedriver-v30.4.0-linux-x64.zip -8e93b0892d7d01c38608fa7907f28da1da27de09bb382f261d81a676f8c2ba64 *chromedriver-v30.4.0-mas-arm64.zip -d306ef0bc651bef046b21ba2e4745e2768be9df1b6c2fc2e7b1a0368f7e10d76 *chromedriver-v30.4.0-mas-x64.zip -bb7c5db2a20f437e0b398846ecc8111e7e51e2021b78f60db021262daacf7d7c *chromedriver-v30.4.0-win32-arm64.zip -df4acaa6684e7db07468c6dc8102cb49746884e8db2b53648431b2b61e8debb2 *chromedriver-v30.4.0-win32-ia32.zip -7a207b29977e52ba052037f00f4ea6284177fdd93e0774dfc39e83ee5a86513d *chromedriver-v30.4.0-win32-x64.zip -8c876662fd46c37b2dd9487ea8e62fde3f20a729dc95e42f12f7db4986138edc *electron-api.json -a36786c7d4e30887a6aa1f2adbc23e721266a31ffe84191bf4caddb731cfb973 *electron-v30.4.0-darwin-arm64-dsym-snapshot.zip -e5edcad107307e97bdd6f69ccab0368df4c3270213f2f42f259f3723d24ca611 *electron-v30.4.0-darwin-arm64-dsym.zip -cc522e772a1d80f7ec73ce2077dae93de76cd4f6767c467b6a8e01e4a252f15f *electron-v30.4.0-darwin-arm64-symbols.zip -2238c45a85b2c78aed00aeaf15bbfa2f64b4d13e48cc6b9bc330f24c4d214595 *electron-v30.4.0-darwin-arm64.zip -48c3197fc36f5ef64eaa913a0a769d2b2d4b79c94e61991ca73e8be2b24bf997 *electron-v30.4.0-darwin-x64-dsym-snapshot.zip -9b669dc060695e5495573cce7b7916bdadd980d523772fbbf57fd1811bb4feca *electron-v30.4.0-darwin-x64-dsym.zip -0acd5b74cbb1719a89a310fb42f5ab4282711bb0ccf4e8b242d9c24c8ecc7136 *electron-v30.4.0-darwin-x64-symbols.zip -6e633bf87be9f8bf46dff9733cfd0d611e018ae5df75f30735747721f91fcf43 *electron-v30.4.0-darwin-x64.zip -5bc27ceae706116a14fa24da3cda32f00893dd3f51ae2c2d58c4c08f26ce2ac2 *electron-v30.4.0-linux-arm64-debug.zip -d13970ef6f4ad30dd8268563ed0b768f703d6e4ea1389ee36b8e7eb407b40523 *electron-v30.4.0-linux-arm64-symbols.zip -aa422122373b84f4eb8ce937937b1b6fe8fb3975c3edafb9df85f7fba449afd4 *electron-v30.4.0-linux-arm64.zip -5bc27ceae706116a14fa24da3cda32f00893dd3f51ae2c2d58c4c08f26ce2ac2 *electron-v30.4.0-linux-armv7l-debug.zip -645af6535a3956e263d8ff586bfb45c5d16ec4c07add406e7c2a767eec070e8e *electron-v30.4.0-linux-armv7l-symbols.zip -3643857e1eec3037ad6f07e755bffc64f033a7196307ff0386bf67c9cc3ec31e *electron-v30.4.0-linux-armv7l.zip -0f099b597830fd990bac82fbe976720d5610450133dff880b570cbe1ef793742 *electron-v30.4.0-linux-x64-debug.zip -084566b78797502ad164832e49690d8845c53a8becb28085f271ab1a9fe20942 *electron-v30.4.0-linux-x64-symbols.zip -b365aac23c61dc0b18002c60937c4842e814cbe6d8e6a34e4dc211774ebaec01 *electron-v30.4.0-linux-x64.zip -b050b4de0fda4c2fa4ceeb0ecaf452cc426a9b03a9e286686d2167c7ded252f4 *electron-v30.4.0-mas-arm64-dsym-snapshot.zip -1e9c3f820e809fc2e05434d54862c7309dd04b74406869e06edb1e07faa3e40f *electron-v30.4.0-mas-arm64-dsym.zip -9b4112c73606d1a0393320178a3d0f172671ec211fe69b2106ad9b04b55b3538 *electron-v30.4.0-mas-arm64-symbols.zip -10ac65b581c2941fd05b2804055be2eed8d69de4c82b90f7357a3989d8276c9f *electron-v30.4.0-mas-arm64.zip -9e4cba132474d82894541ab33d02b28894f0452f4c6808e2428878d0b6a55aac *electron-v30.4.0-mas-x64-dsym-snapshot.zip -33c9c13a8a33ab292db5f14b1d8af1fa7967601badf505a06972fd3cdc9cb6bb *electron-v30.4.0-mas-x64-dsym.zip -1e8871c34294912bc562861226742dcd2de073ae2dc3fef8065fe86550265bca *electron-v30.4.0-mas-x64-symbols.zip -055bea26dfd9fa86838e25b77e29fec3967ed21020ce1362ff683be07ac90c45 *electron-v30.4.0-mas-x64.zip -1fd654358ad895fce4806fcd39be848deeccd20f767e96006ebb5c88ca973d92 *electron-v30.4.0-win32-arm64-pdb.zip -5cf51db3ece15f155afc066230f844bf7825fe912f0f479b8cf9eb47e46a2278 *electron-v30.4.0-win32-arm64-symbols.zip -7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.4.0-win32-arm64-toolchain-profile.zip -51bc3a21faefe99ccc8e8670dccf2320249af5c185728a31d907a18092542d73 *electron-v30.4.0-win32-arm64.zip -b4a539c7dbad3db544d7709faaf357d55d7f3349bfd4d42c884b0608725b526d *electron-v30.4.0-win32-ia32-pdb.zip -ddb355e3e45978eee33c679c42781587533b934f3e98374057d2b0c212062915 *electron-v30.4.0-win32-ia32-symbols.zip -7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.4.0-win32-ia32-toolchain-profile.zip -7260c9f533d5fa0c543d34593bb1a8bc4904943ca872afc5246e15da6f00b43a *electron-v30.4.0-win32-ia32.zip -2d0d5631158971e0fac9bb7c427c5361177c7e967cca41940ad18183d95c3e23 *electron-v30.4.0-win32-x64-pdb.zip -0ea8c0b8734bd45cb04ae83390bd7efee407ed6bb30dbaa1030e1a1f03a0f025 *electron-v30.4.0-win32-x64-symbols.zip -7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.4.0-win32-x64-toolchain-profile.zip -9dcf4b5bbdb6c672ba1b3812d4b642999faf4b6f4e2a4e4af314ba61596a62dc *electron-v30.4.0-win32-x64.zip -c524777653f0b3ba58da6c1e97aa5a3a172caf68d9b24a7d33f733b36c281ce8 *electron.d.ts -c1586ee3f3960943dfa1c1a3da2ebc327afd95c3c7a160b0646730fbc78731bb *ffmpeg-v30.4.0-darwin-arm64.zip -7f76a792c8f9ee9611f966956b4b70017253f9357ec73806d35c568808eec470 *ffmpeg-v30.4.0-darwin-x64.zip -5160348bcae6cb4fce20905338a903475c2eb52511370b44bdfeafef3cbeab6c *ffmpeg-v30.4.0-linux-arm64.zip -4f7583513d48b48c44a2cbc4430cbc9a33d8f9728622166db688e3de61190821 *ffmpeg-v30.4.0-linux-armv7l.zip -4f62d246a2ccb904e9f03bdc65fd5806edd69b95099fa2dcba4f148d44ea1bce *ffmpeg-v30.4.0-linux-x64.zip -c1586ee3f3960943dfa1c1a3da2ebc327afd95c3c7a160b0646730fbc78731bb *ffmpeg-v30.4.0-mas-arm64.zip -7f76a792c8f9ee9611f966956b4b70017253f9357ec73806d35c568808eec470 *ffmpeg-v30.4.0-mas-x64.zip -26b82e5943d09eb0765804df27182cd45c45e63e82fe95d60a5a78611d85a926 *ffmpeg-v30.4.0-win32-arm64.zip -ea688b108cb545bd436621c8d1279696ac6cb0b041d1d3d322dba06f8dd0f295 *ffmpeg-v30.4.0-win32-ia32.zip -733a522d2095964ff3796f3301591b7aa9cf1ba8dcc545d1928745022ef99e6a *ffmpeg-v30.4.0-win32-x64.zip -0b82c8db956264c1be4006eff3908b51ae8e48a17176fe61fa86d8ca8c103bf5 *hunspell_dictionaries.zip -27d5d6d82bd5703342e6a3804ff3c032433cda833ad3881f263035b23193ace9 *libcxx-objects-v30.4.0-linux-arm64.zip -babe51c929cc77907fdb5af11781938bab4b9f31642a0220b4ce4a35cfb904ff *libcxx-objects-v30.4.0-linux-armv7l.zip -e6e13dd7c493841c3ab406b147d021b4e5a379e286767c1459d23bd9581c10c9 *libcxx-objects-v30.4.0-linux-x64.zip -c9ba1b8c0e971cf477f7c0120436cc45a02b72908a41c82cd809ec8014b81e32 *libcxx_headers.zip -2c4c140bfeb235584f8f7c699d0d95b16ddb959484923aaa59eeb3310dbc161a *libcxxabi_headers.zip -0cee8848525e0d633d3ccf599d03ac05be6e0bc014b5a77ddce99c3a50941feb *mksnapshot-v30.4.0-darwin-arm64.zip -0c491f602cfc6fbd81b8b771d3fa28ec1eb77c23c7636479a158265dd7d59977 *mksnapshot-v30.4.0-darwin-x64.zip -6ea645627b0a0cab88cda80a2fa4d399a491bc5f0d0ff1d007f6dd28728d4592 *mksnapshot-v30.4.0-linux-arm64-x64.zip -6b33e8bc53281710d9754e3ea88a8c025649f3d7c499e9b8693183bd2b76ea8d *mksnapshot-v30.4.0-linux-armv7l-x64.zip -092afde6a2ab8ac922524a02b30343cd11f96c01405814019797bf38fa8c634b *mksnapshot-v30.4.0-linux-x64.zip -dada39480526a46992f2ff0ad8ea72a26565384e9976497867a6c4776705e49f *mksnapshot-v30.4.0-mas-arm64.zip -4082f5b379b788d300b2a7fc7c84deee80ebc61a34b534c795c1b4594c3f0d1a *mksnapshot-v30.4.0-mas-x64.zip -01a5e83fe293dd2c52e1d5cc79450fbfc1dfa1e4988146f94bfbf9a9e24cb9d7 *mksnapshot-v30.4.0-win32-arm64-x64.zip -0bccaa2779f8ce98bd4a2a66be082bcd3c34484aad8000c08de0fed5acb8ad88 *mksnapshot-v30.4.0-win32-ia32.zip -439c7f5b9fdd0ea19ee95f724773cda42382b27a31494ae8f2aca5c2ec043ec7 *mksnapshot-v30.4.0-win32-x64.zip +3de7da4462c7690f75680aecac8fddedc4b998d0da769136d8eff2932b36004e *chromedriver-v30.5.1-darwin-arm64.zip +d89b89f7c2ba45cb10df7fc23722bacf6f77e13002c42648762cd18ae3fa9182 *chromedriver-v30.5.1-darwin-x64.zip +3722d46929fd2c7b33c17d37464a08150e60d9269053eb67195795254fb5e947 *chromedriver-v30.5.1-linux-arm64.zip +a786d51f834c24b768bd415bf9a2fc5c1d9abdf9dc0b1a091bf9a8ff101becfe *chromedriver-v30.5.1-linux-armv7l.zip +688e4da8dbcb7dbfacab6f29341d96736e6d06e4c8029835b83ef30b69885b01 *chromedriver-v30.5.1-linux-x64.zip +786a7c2659ad97d5a09866b9aafd55edc015cb17a87bd8d72aa5925f2bfcf55a *chromedriver-v30.5.1-mas-arm64.zip +398759d1dc02fc4928d48ff0f8fbade8811347e1a51d1cedcb2ba9350fbed04d *chromedriver-v30.5.1-mas-x64.zip +65766f1270d1876e2a81acfb4b1130dc4a41eb7165842afa8f41ea438bf2fecb *chromedriver-v30.5.1-win32-arm64.zip +ca9fe0abd1032ebd51497049cb1bb2ae1dd9592697b278f6b1ee2a1a25148891 *chromedriver-v30.5.1-win32-ia32.zip +b6b6ea2202e0139ea436288add736d19078bfb190fc0b22937283927f3024bb9 *chromedriver-v30.5.1-win32-x64.zip +50e8b2d59916bc180873324fdbeb8227dbb8b2375cc936e58b7c9885fb23376d *electron-api.json +595db4fa3f755432bf59cbbaf591ee44b576e15952d014d83d3748646b2e338c *electron-v30.5.1-darwin-arm64-dsym-snapshot.zip +c1beb80553f3c9575e638625ce0ffbfdb87b6f8b23799eb132954b2bb74a9a2f *electron-v30.5.1-darwin-arm64-dsym.zip +cba315d6d6f607a2ee6cfc437b46f92da88daded86f0130d85129adb4742bc48 *electron-v30.5.1-darwin-arm64-symbols.zip +d312544ea29844cf328b44b9dbde12f4fdced90cb442dfca6df36c098dbb6e7a *electron-v30.5.1-darwin-arm64.zip +fd24d585d28909c082d703db3fcc5ffa0b55e1077ff320e25ed510f36e6a3761 *electron-v30.5.1-darwin-x64-dsym-snapshot.zip +4d1a2adea4b98c4d0b03c6561fca146aab102d636d359e48ce418c465df891ae *electron-v30.5.1-darwin-x64-dsym.zip +d9065eaf659f4c3e8a75f5453ceb65269763b2e57110bdcc01904b9a1e33a62c *electron-v30.5.1-darwin-x64-symbols.zip +faf9dcc20d525607ea205f2f6a1dfe3270f6268aa439bb0ba5646c7e4fbbd842 *electron-v30.5.1-darwin-x64.zip +b85dba1cdb49591542dcecff3e710f29b81285569c8c5db8c1181c3ed818ba44 *electron-v30.5.1-linux-arm64-debug.zip +5e97cc105282783d1c20d8e8dd4ca1134342839235288840cb50f314ca7a6ede *electron-v30.5.1-linux-arm64-symbols.zip +eb31470c0d7cd6e23e7ce0d89cc93a2356c9dac8bcc997e335353b8aa995afa0 *electron-v30.5.1-linux-arm64.zip +b85dba1cdb49591542dcecff3e710f29b81285569c8c5db8c1181c3ed818ba44 *electron-v30.5.1-linux-armv7l-debug.zip +137548cd73cd648107f6e01c777e411838173309848a492b42825857cec7d110 *electron-v30.5.1-linux-armv7l-symbols.zip +224bd46983e503101c756c72d10b195f14712a7a56438718acb126017dd04edf *electron-v30.5.1-linux-armv7l.zip +1f87fadebc444c9c0de43f52972a3f61af83ca0594c3de368f7579ce613fcb60 *electron-v30.5.1-linux-x64-debug.zip +aae78654f599a68310bdbdc0e3de8db644320ef44e58a5c6e5c693dff5cd1970 *electron-v30.5.1-linux-x64-symbols.zip +ec4707783d39e86005f42899e30ae59e50dd5d9c7f28531ed494eb43f2361403 *electron-v30.5.1-linux-x64.zip +c61f3121e52fd29987814b7805b597ef3fc78b2ce891eba5e3fc6bbe14128f23 *electron-v30.5.1-mas-arm64-dsym-snapshot.zip +f934e55ef6c986d3ec56626b2605fed16030efc45efcd8b05afa9322d625ec56 *electron-v30.5.1-mas-arm64-dsym.zip +3cc36e99f2cd59d7cb2f47b52d19609c2a2358f6ddde35fd832872abe241cc8d *electron-v30.5.1-mas-arm64-symbols.zip +c5085ab1fb74dfa4a4e463dcb688989bc63baf44007419fd96db4e7c974fb6db *electron-v30.5.1-mas-arm64.zip +47102b6dcd5892de734be2b48e40bbbdbc5e0a228bf5fec33071661d2724d946 *electron-v30.5.1-mas-x64-dsym-snapshot.zip +607091ddfd313ed27bb5a0acb6fa58b0d65cb87e6c6ce9b373949b4b152476d8 *electron-v30.5.1-mas-x64-dsym.zip +ac49568635d41e1075bca39c97aca1f2fcede702f721ddce5d80f18cc2dd1067 *electron-v30.5.1-mas-x64-symbols.zip +3746bc4ba32ab9c11398a393d54ba81733088729ae7cef4e5dccf1e64dc82b0a *electron-v30.5.1-mas-x64.zip +930ad941c8bc0aa5e4e3457b235f104846939974d71bde5b42a8980de2d4a35d *electron-v30.5.1-win32-arm64-pdb.zip +11c1252547b381ab6e40cc032ee60c5209dee9ea1102d1b47ad3fcd4da03049f *electron-v30.5.1-win32-arm64-symbols.zip +7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.5.1-win32-arm64-toolchain-profile.zip +f18baa98ba9c04b346fda9f40fc3150a57b539d0cd510971a073983f78e0a20c *electron-v30.5.1-win32-arm64.zip +b03c7297dc61aa234ab2273c419d9ae064e52c2c0c3dd56f09135f81964630b5 *electron-v30.5.1-win32-ia32-pdb.zip +8fc570c7f4d97eb6b745fb4af5932311d1da57058da8f39a3d97d6e099cd6982 *electron-v30.5.1-win32-ia32-symbols.zip +7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.5.1-win32-ia32-toolchain-profile.zip +20845163bf9d5a4ead03c5f0280c9bae71f0ab1fc03362f3406ed12620e4d9cd *electron-v30.5.1-win32-ia32.zip +019f3ae97a69dc837d89c44d25e0e5dadc88564b74202c5a3524fc6ab59490bc *electron-v30.5.1-win32-x64-pdb.zip +2eb4889fe275e5ea42cf6f51821bcceb833d5714aa1b45ad7915495afb447e94 *electron-v30.5.1-win32-x64-symbols.zip +7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.5.1-win32-x64-toolchain-profile.zip +443119bb559fc2ca297a57cf79f2bce532e853ada070c1e71460c9657c13b4b3 *electron-v30.5.1-win32-x64.zip +deecdc1f3f5ea9548ef73774f412c7af489afeb7dca1c394b5add10e929aff42 *electron.d.ts +14319b51118a5c94e108731f6b5c4e701c700212e790198ba22242eb9674a334 *ffmpeg-v30.5.1-darwin-arm64.zip +bfd5110457438fa8b113a8806db45f30b8975304d95e5efb1b71b0f5e46757fe *ffmpeg-v30.5.1-darwin-x64.zip +44ebf3185fc24404647da0c1f9e496effefd32ff3dbc2499c022164b919d06ed *ffmpeg-v30.5.1-linux-arm64.zip +4f7583513d48b48c44a2cbc4430cbc9a33d8f9728622166db688e3de61190821 *ffmpeg-v30.5.1-linux-armv7l.zip +154900e5db5810f63e38fd4551cfff3d88d6eac39226e06e12e1e43558d360a4 *ffmpeg-v30.5.1-linux-x64.zip +14319b51118a5c94e108731f6b5c4e701c700212e790198ba22242eb9674a334 *ffmpeg-v30.5.1-mas-arm64.zip +bfd5110457438fa8b113a8806db45f30b8975304d95e5efb1b71b0f5e46757fe *ffmpeg-v30.5.1-mas-x64.zip +f2169c4b6b9f073c20652953599f2453947936e851ff25c9f2719e7d889faea3 *ffmpeg-v30.5.1-win32-arm64.zip +90745f1422ae0431b295cb5d27ff03e69c890f3572ef6c4655774b892419e94f *ffmpeg-v30.5.1-win32-ia32.zip +567fe8952f17b224d4492980af741b470e86b31d58e7c6a9262258eeae490122 *ffmpeg-v30.5.1-win32-x64.zip +8bbbadb52a19f074d9f8bd533891e2bacbe4813101ae6c344cfc88e28b1429a3 *hunspell_dictionaries.zip +61137508aee6837c70a2ead2e31dd106d753ec5fac01b49e7e8701be0e09e7aa *libcxx-objects-v30.5.1-linux-arm64.zip +3c285f012f256f767e777550a1f18054cfcffc4e13ad6fa4e4e90dd58ec22069 *libcxx-objects-v30.5.1-linux-armv7l.zip +9b96b53c8dfbc70a0f617f78dde89a1e8510ae2261bcddfbf7c12c61eb5a3d73 *libcxx-objects-v30.5.1-linux-x64.zip +1b5cbe24d6356a388e166bff60d7452583019ea7dec85f593c552eb287346f43 *libcxx_headers.zip +eae200a0d1fd0d4b881358bdef600111891c75ecc4db679b680b0cbaf87ecfc3 *libcxxabi_headers.zip +ed1f7463b5869acf57dd388208918652182b049b2846f572d52ed47e7c091d54 *mksnapshot-v30.5.1-darwin-arm64.zip +bc80de1f29b869cdb2676d2dc08cbb4bd6228a6825b1b0bfc13acee0b070ac3e *mksnapshot-v30.5.1-darwin-x64.zip +5e526ca4f4250a9b9b040d6eb60f1d2b8db974ab68c27e46198f4bf8dc1ef347 *mksnapshot-v30.5.1-linux-arm64-x64.zip +c40ca2a45cc9ab4e1668f063860ba243baef8c192a253638e4c93aaccb0ef8da *mksnapshot-v30.5.1-linux-armv7l-x64.zip +a3134e0b0980547167dd3ca2f17dd2f40a7db697ab563ba6257534f9ad0d256d *mksnapshot-v30.5.1-linux-x64.zip +82776eafcb3e4d053e275ad50d84151f41a651986baacda20c6ed722854cb8fb *mksnapshot-v30.5.1-mas-arm64.zip +9d6d95d4cb121a29fd68d64557edd8c9859345ac37d0645de8aff518391755ed *mksnapshot-v30.5.1-mas-x64.zip +94b9ce6cb40ae001962b77525d12483c3458776066a69a4e714b327bab1decfc *mksnapshot-v30.5.1-win32-arm64-x64.zip +4d89d06c2e85b25d52bb64f48258ad5d05b98ac21697ae9c49ccd19bad9d7d94 *mksnapshot-v30.5.1-win32-ia32.zip +ccfd322bafde0485a0ac6b0acc3669c7b08f30003a1c2e044eebc1bf02289de3 *mksnapshot-v30.5.1-win32-x64.zip diff --git a/build/checksums/nodejs.txt b/build/checksums/nodejs.txt index 23a56cdb2..3436ff37c 100644 --- a/build/checksums/nodejs.txt +++ b/build/checksums/nodejs.txt @@ -1,7 +1,7 @@ -4743bc042f90ba5d9edf09403207290a9cdd2f6061bdccf7caaa0bbfd49f343e node-v20.15.1-darwin-arm64.tar.gz -f5379772ffae1404cfd1fcc8cf0c6c5971306b8fb2090d348019047306de39dc node-v20.15.1-darwin-x64.tar.gz -8554c91ccd32782351035d3a9b168ad01c6922480800a21870fc5d6d86c2bb70 node-v20.15.1-linux-arm64.tar.gz -2c16717da7d2d7b00f6af146cdf436a0297cbcee52c85b754e4c9ed7cee34b51 node-v20.15.1-linux-armv7l.tar.gz -a9db028c0a1c63e3aa0d97de24b0966bc507d8239b3aedc4e752eea6b0580665 node-v20.15.1-linux-x64.tar.gz -8e3f84e8ec7e41f98a048eb0c1365cfe54426a556ead98c4803df45d29e0335d win-arm64/node.exe -229fb64aeb10d3cc18eaaa2f5a4c3f1c81792dd3647c5c4350e142db528d0f89 win-x64/node.exe +fc7355e778b181575153b7dea4879e8021776eeb376c43c50f65893d2ea70aa3 node-v20.16.0-darwin-arm64.tar.gz +e18942cd706e4d69a4845ddacee2f1c17a72e853a229e3d2623d2edeb7efde72 node-v20.16.0-darwin-x64.tar.gz +551588f8f5ca05c04efb53f1b2bb7d9834603327bdc82d60a944d385569866e1 node-v20.16.0-linux-arm64.tar.gz +1c77c52ab507ddee479012f0b4bf523dd8400df4504447d623632353076e2e27 node-v20.16.0-linux-armv7l.tar.gz +b3f874ea84e440d69ed02ca92429d0eccd17737fde86db69c1c153d16ec654f2 node-v20.16.0-linux-x64.tar.gz +7e773fba3a19eac5ccbe85c1f87a05d7b112ecf41440076e6b6de1c7bffa0fdf win-arm64/node.exe +ba221658a3b68bd583e3068903eb675b5206d86a883c084ed95502e8f634b82a win-x64/node.exe diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js index fe825b136..a3daf1878 100644 --- a/build/darwin/create-universal-app.js +++ b/build/darwin/create-universal-app.js @@ -9,7 +9,6 @@ const fs = require("fs"); const minimatch = require("minimatch"); const vscode_universal_bundler_1 = require("vscode-universal-bundler"); const cross_spawn_promise_1 = require("@malept/cross-spawn-promise"); -const esm_1 = require("../lib/esm"); const root = path.dirname(path.dirname(__dirname)); async function main(buildDir) { const arch = process.env['VSCODE_ARCH']; @@ -27,14 +26,13 @@ async function main(buildDir) { '**/CodeResources', '**/Credits.rtf', ]; - const canAsar = !(0, esm_1.isESM)('ASAR disabled in universal build'); // TODO@esm ASAR disabled in ESM await (0, vscode_universal_bundler_1.makeUniversalApp)({ x64AppPath, arm64AppPath, - asarPath: canAsar ? asarRelativePath : undefined, + asarPath: asarRelativePath, outAppPath, force: true, - mergeASARs: canAsar, + mergeASARs: true, x64ArchFiles: '*/kerberos.node', filesToSkipComparison: (file) => { for (const expected of filesToSkip) { diff --git a/build/darwin/create-universal-app.ts b/build/darwin/create-universal-app.ts index 6ece5868c..94b8a23b9 100644 --- a/build/darwin/create-universal-app.ts +++ b/build/darwin/create-universal-app.ts @@ -8,7 +8,6 @@ import * as fs from 'fs'; import * as minimatch from 'minimatch'; import { makeUniversalApp } from 'vscode-universal-bundler'; import { spawn } from '@malept/cross-spawn-promise'; -import { isESM } from '../lib/esm'; const root = path.dirname(path.dirname(__dirname)); @@ -32,15 +31,13 @@ async function main(buildDir?: string) { '**/Credits.rtf', ]; - const canAsar = !isESM('ASAR disabled in universal build'); // TODO@esm ASAR disabled in ESM - await makeUniversalApp({ x64AppPath, arm64AppPath, - asarPath: canAsar ? asarRelativePath : undefined, + asarPath: asarRelativePath, outAppPath, force: true, - mergeASARs: canAsar, + mergeASARs: true, x64ArchFiles: '*/kerberos.node', filesToSkipComparison: (file: string) => { for (const expected of filesToSkip) { diff --git a/build/gulpfile.compile.js b/build/gulpfile.compile.js index c6d7bbded..a8d8fb094 100644 --- a/build/gulpfile.compile.js +++ b/build/gulpfile.compile.js @@ -9,12 +9,12 @@ const gulp = require('gulp'); const util = require('./lib/util'); const date = require('./lib/date'); -const esm = require('./lib/esm'); +const amd = require('./lib/amd'); const task = require('./lib/task'); const compilation = require('./lib/compilation'); const optimize = require('./lib/optimize'); -const isESMBuild = typeof process.env.VSCODE_BUILD_ESM === 'string' && process.env.VSCODE_BUILD_ESM.toLowerCase() === 'true'; +const isAMDBuild = typeof process.env.VSCODE_BUILD_AMD === 'string' && process.env.VSCODE_BUILD_AMD.toLowerCase() === 'true'; /** * @param {boolean} disableMangle @@ -24,9 +24,9 @@ function makeCompileBuildTask(disableMangle) { util.rimraf('out-build'), util.buildWebNodePaths('out-build'), date.writeISODate('out-build'), - esm.setESM(isESMBuild), + amd.setAMD(isAMDBuild), compilation.compileApiProposalNamesTask, - compilation.compileTask(isESMBuild ? 'src2' : 'src', 'out-build', true, { disableMangle }), + compilation.compileTask(isAMDBuild ? 'src2' : 'src', 'out-build', true, { disableMangle }), optimize.optimizeLoaderTask('out-build', 'out-build', true) ); } diff --git a/build/gulpfile.editor.js b/build/gulpfile.editor.js index 7118ef00f..0d55982a8 100644 --- a/build/gulpfile.editor.js +++ b/build/gulpfile.editor.js @@ -77,7 +77,7 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => { extrausages ], shakeLevel: 2, // 0-Files, 1-InnerFile, 2-ClassMembers - importIgnorePattern: /(^vs\/css!)/, + importIgnorePattern: /\.css$/, destRoot: path.join(root, 'out-editor-src'), redirects: { '@vscode/tree-sitter-wasm': '../node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-web', @@ -203,44 +203,6 @@ const compileEditorESMTask = task.define('compile-editor-esm', () => { } }); -/** - * Go over all .js files in `/out-monaco-editor-core/esm/` and make sure that all imports - * use `.js` at the end in order to be ESM compliant. - */ -const appendJSToESMImportsTask = task.define('append-js-to-esm-imports', () => { - const SRC_DIR = path.join(__dirname, '../out-monaco-editor-core/esm'); - const files = util.rreddir(SRC_DIR); - for (const file of files) { - const filePath = path.join(SRC_DIR, file); - if (!/\.js$/.test(filePath)) { - continue; - } - - const contents = fs.readFileSync(filePath).toString(); - const lines = contents.split(/\r\n|\r|\n/g); - const /** @type {string[]} */result = []; - for (const line of lines) { - if (!/^import/.test(line) && !/^export \* from/.test(line)) { - // not an import - result.push(line); - continue; - } - if (/^import '[^']+\.css';/.test(line)) { - // CSS import - result.push(line); - continue; - } - const modifiedLine = ( - line - .replace(/^import(.*)\'([^']+)\'/, `import$1'$2.js'`) - .replace(/^export \* from \'([^']+)\'/, `export * from '$1.js'`) - ); - result.push(modifiedLine); - } - fs.writeFileSync(filePath, result.join('\n')); - } -}); - /** * @param {string} contents */ @@ -413,7 +375,6 @@ gulp.task('editor-distro', task.series( createESMSourcesAndResourcesTask, compileEditorESMTask, - appendJSToESMImportsTask ) ), finalEditorResourcesTask @@ -430,7 +391,6 @@ gulp.task('editor-esm', extractEditorSrcTask, createESMSourcesAndResourcesTask, compileEditorESMTask, - appendJSToESMImportsTask, ) ); diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js index 4631b295a..4f745aebd 100644 --- a/build/gulpfile.extensions.js +++ b/build/gulpfile.extensions.js @@ -68,6 +68,7 @@ const compilations = [ 'extensions/vscode-test-resolver/tsconfig.json', '.vscode/extensions/vscode-selfhost-test-provider/tsconfig.json', + '.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json', ]; const getBaseUrl = out => `https://main.vscode-cdn.net/sourcemaps/${commit}/${out}`; @@ -100,7 +101,6 @@ const tasks = compilations.map(function (tsconfigFile) { } function createPipeline(build, emitError, transpileOnly) { - const nlsDev = require('vscode-nls-dev'); const tsb = require('./lib/tsb'); const sourcemaps = require('gulp-sourcemaps'); @@ -125,7 +125,6 @@ const tasks = compilations.map(function (tsconfigFile) { .pipe(tsFilter) .pipe(util.loadSourcemaps()) .pipe(compilation()) - .pipe(build ? nlsDev.rewriteLocalizeCalls() : es.through()) .pipe(build ? util.stripSourceMappingURL() : es.through()) .pipe(sourcemaps.write('.', { sourceMappingURL: !build ? null : f => `${baseUrl}/${f.relative}.map`, @@ -135,9 +134,6 @@ const tasks = compilations.map(function (tsconfigFile) { sourceRoot: '../src/', })) .pipe(tsFilter.restore) - .pipe(build ? nlsDev.bundleMetaDataFiles(headerId, headerOut) : es.through()) - // Filter out *.nls.json file. We needed them only to bundle meta data file. - .pipe(filter(['**', '!**/*.nls.json'], { dot: true })) .pipe(reporter.end(emitError)); return es.duplex(input, output); diff --git a/build/gulpfile.js b/build/gulpfile.js index 785719d3e..5f7b71a40 100644 --- a/build/gulpfile.js +++ b/build/gulpfile.js @@ -34,15 +34,15 @@ gulp.task(compileClientTask); const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask))); gulp.task(watchClientTask); -const watchClientESMTask = task.define('watch-client-esm', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), task.parallel(watchTask('out', false, 'src2'), watchApiProposalNamesTask))); -gulp.task(watchClientESMTask); +const watchClientAMDTask = task.define('watch-client-amd', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), task.parallel(watchTask('out', false, 'src2'), watchApiProposalNamesTask))); +gulp.task(watchClientAMDTask); // All const _compileTask = task.define('compile', task.parallel(monacoTypecheckTask, compileClientTask, compileExtensionsTask, compileExtensionMediaTask)); gulp.task(_compileTask); gulp.task(task.define('watch', task.parallel(/* monacoTypecheckWatchTask, */ watchClientTask, watchExtensionsTask))); -gulp.task(task.define('watch-esm', task.parallel(/* monacoTypecheckWatchTask, */ watchClientESMTask, watchExtensionsTask))); +gulp.task(task.define('watch-amd', task.parallel(/* monacoTypecheckWatchTask, */ watchClientAMDTask, watchExtensionsTask))); // Default gulp.task('default', _compileTask); diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js index a5c9730dc..e3147945f 100644 --- a/build/gulpfile.reh.js +++ b/build/gulpfile.reh.js @@ -31,7 +31,7 @@ const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require(' const { vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web'); const cp = require('child_process'); const log = require('fancy-log'); -const { isESM } = require('./lib/esm'); +const { isAMD } = require('./lib/amd'); const buildfile = require('./buildfile'); const REPO_ROOT = path.dirname(__dirname); @@ -65,19 +65,20 @@ const serverResourceIncludes = [ 'out-build/vs/base/node/ps.sh', // Terminal shell integration - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1', - 'out-build/vs/workbench/contrib/terminal/browser/media/CodeTabExpansion.psm1', - 'out-build/vs/workbench/contrib/terminal/browser/media/GitTabExpansion.psm1', - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh', - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh', - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh', - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh', - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh', - 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/CodeTabExpansion.psm1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/GitTabExpansion.psm1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-env.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-profile.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-login.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish', + ]; const serverResourceExcludes = [ - '!out-build/vs/**/{electron-sandbox,electron-main}/**', + '!out-build/vs/**/{electron-sandbox,electron-main,electron-utility}/**', '!out-build/vs/editor/standalone/**', '!out-build/vs/workbench/**/*-tb.png', '!**/test/**' @@ -88,7 +89,7 @@ const serverResources = [ ...serverResourceExcludes ]; -const serverWithWebResourceIncludes = isESM() ? [ +const serverWithWebResourceIncludes = !isAMD() ? [ ...serverResourceIncludes, 'out-build/vs/code/browser/workbench/*.html', ...vscodeWebResourceIncludes @@ -131,7 +132,7 @@ const serverEntryPoints = [ } ]; -const webEntryPoints = isESM() ? [ +const webEntryPoints = !isAMD() ? [ buildfile.base, buildfile.workerExtensionHost, buildfile.workerNotebook, @@ -142,7 +143,7 @@ const webEntryPoints = isESM() ? [ buildfile.keyboardMaps, buildfile.codeWeb ].flat() : [ - buildfile.entrypoint('vs/workbench/workbench.web.main'), + buildfile.entrypoint('vs/workbench/workbench.web.main.internal'), buildfile.base, buildfile.workerExtensionHost, buildfile.workerNotebook, @@ -343,7 +344,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa let packageJsonContents; const packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' }) - .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, ...(isESM(`Setting 'type: module' in top level package.json`) ? { type: 'module' } : {}) })) // TODO@esm this should be configured in the top level package.json + .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, ...(!isAMD() ? { type: 'module' } : {}) })) // TODO@esm this should be configured in the top level package.json .pipe(es.through(function (file) { packageJsonContents = file.contents.toString(); this.emit('data', file); diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 585fb5964..9dfb6a384 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -33,12 +33,12 @@ const minimist = require('minimist'); const { compileBuildTask } = require('./gulpfile.compile'); const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions'); const { promisify } = require('util'); -const { isESM } = require('./lib/esm'); +const { isAMD } = require('./lib/amd'); const glob = promisify(require('glob')); const rcedit = promisify(require('rcedit')); // Build -const vscodeEntryPoints = isESM() ? [ +const vscodeEntryPoints = !isAMD() ? [ buildfile.base, buildfile.workerExtensionHost, buildfile.workerNotebook, @@ -61,7 +61,7 @@ const vscodeEntryPoints = isESM() ? [ buildfile.code ].flat(); -const vscodeResourceIncludes = isESM() ? [ +const vscodeResourceIncludes = !isAMD() ? [ // NLS 'out-build/nls.messages.json', @@ -85,11 +85,11 @@ const vscodeResourceIncludes = isESM() ? [ 'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt', // Terminal shell integration - 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/*.fish', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.ps1', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.psm1', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.sh', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/fish_xdg_data/fish/vendor_conf.d/*.fish', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.ps1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.psm1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.sh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.zsh', // Accessibility Signals 'out-build/vs/platform/accessibilitySignal/browser/media/*.mp3', @@ -130,11 +130,11 @@ const vscodeResourceIncludes = isESM() ? [ 'out-build/vs/workbench/browser/media/*-theme.css', 'out-build/vs/workbench/contrib/debug/**/*.json', 'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt', - 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/*.fish', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.ps1', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.psm1', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.sh', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/fish_xdg_data/fish/vendor_conf.d/*.fish', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.ps1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.psm1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.sh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/*.zsh', 'out-build/vs/workbench/contrib/webview/browser/pre/*.js', '!out-build/vs/workbench/contrib/issue/**/*-dev.html', '!out-build/vs/workbench/contrib/issue/**/*-dev.esm.html', @@ -163,7 +163,7 @@ const vscodeResources = [ // be inlined into the target window file in this order // and they depend on each other in this way. const windowBootstrapFiles = []; -if (!isESM('Skipping loader.js in window bootstrap files')) { +if (isAMD()) { windowBootstrapFiles.push('out-build/vs/loader.js'); } windowBootstrapFiles.push('out-build/bootstrap-window.js'); @@ -296,7 +296,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op 'vs/workbench/workbench.desktop.main.js', 'vs/workbench/workbench.desktop.main.css', 'vs/workbench/api/node/extensionHostProcess.js', - isESM() ? 'vs/code/electron-sandbox/workbench/workbench.esm.html' : 'vs/code/electron-sandbox/workbench/workbench.html', + !isAMD() ? 'vs/code/electron-sandbox/workbench/workbench.esm.html' : 'vs/code/electron-sandbox/workbench/workbench.html', 'vs/code/electron-sandbox/workbench/workbench.js' ]); @@ -325,13 +325,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op version += '-' + quality; } - if (isESM() && typeof quality === 'string' && quality !== 'exploration') { - // TODO@esm remove this safeguard - throw new Error('Refuse to build ESM on quality other than exploration'); - } - const name = product.nameShort; - const packageJsonUpdates = { name, version, ...(isESM(`Setting 'type: module' and 'main: out/main.js' in top level package.json`) ? { type: 'module', main: 'out/main.js' } : {}) }; // TODO@esm this should be configured in the top level package.json + const packageJsonUpdates = { name, version, ...(!isAMD() ? { type: 'module', main: 'out/main.js' } : {}) }; // TODO@esm this should be configured in the top level package.json // for linux url handling if (platform === 'linux') { @@ -366,16 +361,14 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op const productionDependencies = getProductionDependencies(root); const dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!**/*.mk`]).flat(); - let deps = gulp.src(dependenciesSrc, { base: '.', dot: true }) + const deps = gulp.src(dependenciesSrc, { base: '.', dot: true }) .pipe(filter(['**', `!**/${config.version}/**`, '!**/bin/darwin-arm64-87/**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map'])) .pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore'))) .pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`))) .pipe(jsFilter) .pipe(util.rewriteSourceMappingURL(sourceMappingURLBase)) - .pipe(jsFilter.restore); - - if (!isESM('ASAR disabled in VS Code builds')) { // TODO@esm: ASAR disabled in ESM - deps = deps.pipe(createAsar(path.join(process.cwd(), 'node_modules'), [ + .pipe(jsFilter.restore) + .pipe(createAsar(path.join(process.cwd(), 'node_modules'), [ '**/*.node', '**/@vscode/ripgrep/bin/*', '**/node-pty/build/Release/*', @@ -384,10 +377,14 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op '**/node-pty/lib/shared/conout.js', '**/*.wasm', '**/@vscode/vsce-sign/bin/*', - ], [ + ], isAMD() ? [ '**/*.mk', + ] : [ + '**/*.mk', + '!node_modules/vsda/**' // stay compatible with extensions that depend on us shipping `vsda` into ASAR + ], isAMD() ? [] : [ + 'node_modules/vsda/**' // retain copy of `vsda` in node_modules for internal use ], 'node_modules.asar')); - } let all = es.merge( packageJsonStream, diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js index 79594543c..5fa5a5d13 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -152,6 +152,7 @@ function getRpmPackageArch(arch) { function prepareRpmPackage(arch) { const binaryDir = '../VSCode-linux-' + arch; const rpmArch = getRpmPackageArch(arch); + const stripBinary = process.env['STRIP'] ?? '/usr/bin/strip'; return function () { const desktop = gulp.src('resources/linux/code.desktop', { base: '.' }) @@ -208,6 +209,7 @@ function prepareRpmPackage(arch) { .pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@')) .pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@')) .pipe(replace('@@DEPENDENCIES@@', dependencies.join(', '))) + .pipe(replace('@@STRIP@@', stripBinary)) .pipe(rename('SPECS/' + product.applicationName + '.spec')) .pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); })); })); diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js index 1e0ec64f4..80b7fc559 100644 --- a/build/gulpfile.vscode.web.js +++ b/build/gulpfile.vscode.web.js @@ -21,7 +21,8 @@ const vfs = require('vinyl-fs'); const packageJson = require('../package.json'); const { compileBuildTask } = require('./gulpfile.compile'); const extensions = require('./lib/extensions'); -const { isESM } = require('./lib/esm'); +const { isAMD } = require('./lib/amd'); +const VinylFile = require('vinyl'); const REPO_ROOT = path.dirname(__dirname); const BUILD_ROOT = path.dirname(REPO_ROOT); @@ -31,7 +32,7 @@ const commit = getVersion(REPO_ROOT); const quality = product.quality; const version = (quality && quality !== 'stable') ? `${packageJson.version}-${quality}` : packageJson.version; -const vscodeWebResourceIncludes = isESM() ? [ +const vscodeWebResourceIncludes = !isAMD() ? [ // NLS 'out-build/nls.messages.js', @@ -86,7 +87,7 @@ const vscodeWebResources = [ ...vscodeWebResourceIncludes, // Excludes - '!out-build/vs/**/{node,electron-sandbox,electron-main}/**', + '!out-build/vs/**/{node,electron-sandbox,electron-main,electron-utility}/**', '!out-build/vs/editor/standalone/**', '!out-build/vs/workbench/**/*-tb.png', '!out-build/vs/code/**/*-dev.html', @@ -96,7 +97,7 @@ const vscodeWebResources = [ const buildfile = require('./buildfile'); -const vscodeWebEntryPoints = isESM() ? [ +const vscodeWebEntryPoints = !isAMD() ? [ buildfile.base, buildfile.workerExtensionHost, buildfile.workerNotebook, @@ -105,9 +106,10 @@ const vscodeWebEntryPoints = isESM() ? [ buildfile.workerOutputLinks, buildfile.workerBackgroundTokenization, buildfile.keyboardMaps, - buildfile.workbenchWeb() + buildfile.workbenchWeb(), + buildfile.entrypoint('vs/workbench/workbench.web.main.internal') // TODO@esm remove line when we stop supporting web-amd-esm-bridge ].flat() : [ - buildfile.entrypoint('vs/workbench/workbench.web.main'), + buildfile.entrypoint('vs/workbench/workbench.web.main.internal'), buildfile.base, buildfile.workerExtensionHost, buildfile.workerNotebook, @@ -229,8 +231,21 @@ function packageTask(sourceFolderName, destinationFolderName) { const extensions = gulp.src('.build/web/extensions/**', { base: '.build/web', dot: true }); - const sources = es.merge(src, extensions) - .pipe(filter(['**', '!**/*.js.map'], { dot: true })); + const loader = gulp.src('build/loader.min', { base: 'build', dot: true }).pipe(rename('out/vs/loader.js')); // TODO@esm remove line when we stop supporting web-amd-esm-bridge + + const sources = es.merge(...(!isAMD() ? [src, extensions, loader] : [src, extensions])) + .pipe(filter(['**', '!**/*.js.map'], { dot: true })) + // TODO@esm remove me once we stop supporting our web-esm-bridge + .pipe(es.through(function (file) { + if (file.relative === 'out/vs/workbench/workbench.web.main.internal.css') { + this.emit('data', new VinylFile({ + contents: file.contents, + path: file.path.replace('workbench.web.main.internal.css', 'workbench.web.main.css'), + base: file.base + })); + } + this.emit('data', file); + })); const name = product.nameShort; const packageJsonStream = gulp.src(['remote/web/package.json'], { base: 'remote/web' }) diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js index 5adfdfbfe..98175f530 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -16,7 +16,6 @@ const pkg = require('../package.json'); const product = require('../product.json'); const vfs = require('vinyl-fs'); const rcedit = require('rcedit'); -const mkdirp = require('mkdirp'); const repoPath = path.dirname(__dirname); const buildPath = (/** @type {string} */ arch) => path.join(path.dirname(repoPath), `VSCode-win32-${arch}`); @@ -75,7 +74,7 @@ function buildWin32Setup(arch, target) { const sourcePath = buildPath(arch); const outputPath = setupDir(arch, target); - mkdirp.sync(outputPath); + fs.mkdirSync(outputPath, { recursive: true }); const originalProductJsonPath = path.join(sourcePath, 'resources/app/product.json'); const productJsonPath = path.join(outputPath, 'product.json'); diff --git a/build/hygiene.js b/build/hygiene.js index 3ca8305a7..5dfe1bf76 100644 --- a/build/hygiene.js +++ b/build/hygiene.js @@ -265,7 +265,6 @@ function createGitIndexVinyls(paths) { return pall(fns, { concurrency: 4 }).then((r) => r.filter((p) => !!p)); } - // NO PRE COMMIT HOOKS!!!! for now... - Void team // // this allows us to run hygiene as a git pre-commit hook diff --git a/build/lib/esm.js b/build/lib/amd.js similarity index 59% rename from build/lib/esm.js rename to build/lib/amd.js index db2683445..8d4e428f8 100644 --- a/build/lib/esm.js +++ b/build/lib/amd.js @@ -4,33 +4,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); -exports.setESM = setESM; -exports.isESM = isESM; +exports.setAMD = setAMD; +exports.isAMD = isAMD; const path = require("path"); const fs = require("fs"); // TODO@esm remove this const outDirectory = path.join(__dirname, '..', '..', 'out-build'); -const esmMarkerFile = path.join(outDirectory, 'esm'); -function setESM(enabled) { +const amdMarkerFile = path.join(outDirectory, 'amd'); +function setAMD(enabled) { const result = () => new Promise((resolve, _) => { if (enabled) { fs.mkdirSync(outDirectory, { recursive: true }); - fs.writeFileSync(esmMarkerFile, 'true', 'utf8'); - console.warn(`Setting build to ESM: true`); + fs.writeFileSync(amdMarkerFile, 'true', 'utf8'); + console.warn(`Setting build to AMD: true`); } else { - console.warn(`Setting build to ESM: false`); + console.warn(`Setting build to AMD: false`); } resolve(); }); - result.taskName = 'set-esm'; + result.taskName = 'set-amd'; return result; } -function isESM(logWarning) { +function isAMD(logWarning) { try { - const res = (typeof process.env.VSCODE_BUILD_ESM === 'string' && process.env.VSCODE_BUILD_ESM.toLowerCase() === 'true') || (fs.readFileSync(esmMarkerFile, 'utf8') === 'true'); + const res = (typeof process.env.VSCODE_BUILD_AMD === 'string' && process.env.VSCODE_BUILD_AMD.toLowerCase() === 'true') || (fs.readFileSync(amdMarkerFile, 'utf8') === 'true'); if (res && logWarning) { - console.warn(`[esm] ${logWarning}`); + console.warn(`[amd] ${logWarning}`); } return res; } @@ -38,4 +38,4 @@ function isESM(logWarning) { return false; } } -//# sourceMappingURL=esm.js.map \ No newline at end of file +//# sourceMappingURL=amd.js.map \ No newline at end of file diff --git a/build/lib/esm.ts b/build/lib/amd.ts similarity index 58% rename from build/lib/esm.ts rename to build/lib/amd.ts index 2fc5215e2..5373024c6 100644 --- a/build/lib/esm.ts +++ b/build/lib/amd.ts @@ -9,29 +9,29 @@ import * as fs from 'fs'; // TODO@esm remove this const outDirectory = path.join(__dirname, '..', '..', 'out-build'); -const esmMarkerFile = path.join(outDirectory, 'esm'); +const amdMarkerFile = path.join(outDirectory, 'amd'); -export function setESM(enabled: boolean) { +export function setAMD(enabled: boolean) { const result = () => new Promise((resolve, _) => { if (enabled) { fs.mkdirSync(outDirectory, { recursive: true }); - fs.writeFileSync(esmMarkerFile, 'true', 'utf8'); - console.warn(`Setting build to ESM: true`); + fs.writeFileSync(amdMarkerFile, 'true', 'utf8'); + console.warn(`Setting build to AMD: true`); } else { - console.warn(`Setting build to ESM: false`); + console.warn(`Setting build to AMD: false`); } resolve(); }); - result.taskName = 'set-esm'; + result.taskName = 'set-amd'; return result; } -export function isESM(logWarning?: string): boolean { +export function isAMD(logWarning?: string): boolean { try { - const res = (typeof process.env.VSCODE_BUILD_ESM === 'string' && process.env.VSCODE_BUILD_ESM.toLowerCase() === 'true') || (fs.readFileSync(esmMarkerFile, 'utf8') === 'true'); + const res = (typeof process.env.VSCODE_BUILD_AMD === 'string' && process.env.VSCODE_BUILD_AMD.toLowerCase() === 'true') || (fs.readFileSync(amdMarkerFile, 'utf8') === 'true'); if (res && logWarning) { - console.warn(`[esm] ${logWarning}`); + console.warn(`[amd] ${logWarning}`); } return res; } catch (error) { diff --git a/build/lib/asar.js b/build/lib/asar.js index 07b39bf79..19285ef71 100644 --- a/build/lib/asar.js +++ b/build/lib/asar.js @@ -11,7 +11,7 @@ const pickle = require('chromium-pickle-js'); const Filesystem = require('asar/lib/filesystem'); const VinylFile = require("vinyl"); const minimatch = require("minimatch"); -function createAsar(folderPath, unpackGlobs, skipGlobs, destFilename) { +function createAsar(folderPath, unpackGlobs, skipGlobs, duplicateGlobs, destFilename) { const shouldUnpackFile = (file) => { for (let i = 0; i < unpackGlobs.length; i++) { if (minimatch(file.relative, unpackGlobs[i])) { @@ -28,6 +28,16 @@ function createAsar(folderPath, unpackGlobs, skipGlobs, destFilename) { } return false; }; + // Files that should be duplicated between + // node_modules.asar and node_modules + const shouldDuplicateFile = (file) => { + for (const duplicateGlob of duplicateGlobs) { + if (minimatch(file.relative, duplicateGlob)) { + return true; + } + } + return false; + }; const filesystem = new Filesystem(folderPath); const out = []; // Keep track of pending inserts @@ -73,8 +83,22 @@ function createAsar(folderPath, unpackGlobs, skipGlobs, destFilename) { throw new Error(`unknown item in stream!`); } if (shouldSkipFile(file)) { + this.queue(new VinylFile({ + base: '.', + path: file.path, + stat: file.stat, + contents: file.contents + })); return; } + if (shouldDuplicateFile(file)) { + this.queue(new VinylFile({ + base: '.', + path: file.path, + stat: file.stat, + contents: file.contents + })); + } const shouldUnpack = shouldUnpackFile(file); insertFile(file.relative, { size: file.contents.length, mode: file.stat.mode }, shouldUnpack); if (shouldUnpack) { diff --git a/build/lib/asar.ts b/build/lib/asar.ts index 7dc1dd3b2..0b225ab16 100644 --- a/build/lib/asar.ts +++ b/build/lib/asar.ts @@ -17,7 +17,7 @@ declare class AsarFilesystem { insertFile(path: string, shouldUnpack: boolean, file: { stat: { size: number; mode: number } }, options: {}): Promise; } -export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: string[], destFilename: string): NodeJS.ReadWriteStream { +export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: string[], duplicateGlobs: string[], destFilename: string): NodeJS.ReadWriteStream { const shouldUnpackFile = (file: VinylFile): boolean => { for (let i = 0; i < unpackGlobs.length; i++) { @@ -37,6 +37,17 @@ export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: return false; }; + // Files that should be duplicated between + // node_modules.asar and node_modules + const shouldDuplicateFile = (file: VinylFile): boolean => { + for (const duplicateGlob of duplicateGlobs) { + if (minimatch(file.relative, duplicateGlob)) { + return true; + } + } + return false; + }; + const filesystem = new Filesystem(folderPath); const out: Buffer[] = []; @@ -88,8 +99,22 @@ export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: throw new Error(`unknown item in stream!`); } if (shouldSkipFile(file)) { + this.queue(new VinylFile({ + base: '.', + path: file.path, + stat: file.stat, + contents: file.contents + })); return; } + if (shouldDuplicateFile(file)) { + this.queue(new VinylFile({ + base: '.', + path: file.path, + stat: file.stat, + contents: file.contents + })); + } const shouldUnpack = shouldUnpackFile(file); insertFile(file.relative, { size: file.contents.length, mode: file.stat.mode }, shouldUnpack); diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js index 463ce16e1..ac784c035 100644 --- a/build/lib/builtInExtensions.js +++ b/build/lib/builtInExtensions.js @@ -16,7 +16,6 @@ const vfs = require("vinyl-fs"); const ext = require("./extensions"); const fancyLog = require("fancy-log"); const ansiColors = require("ansi-colors"); -const mkdirp = require('mkdirp'); const root = path.dirname(path.dirname(__dirname)); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const builtInExtensions = productjson.builtInExtensions || []; @@ -107,7 +106,7 @@ function readControlFile() { } } function writeControlFile(control) { - mkdirp.sync(path.dirname(controlFilePath)); + fs.mkdirSync(path.dirname(controlFilePath), { recursive: true }); fs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2)); } function getBuiltInExtensions() { diff --git a/build/lib/builtInExtensions.ts b/build/lib/builtInExtensions.ts index fefed436b..8b831d42d 100644 --- a/build/lib/builtInExtensions.ts +++ b/build/lib/builtInExtensions.ts @@ -15,8 +15,6 @@ import * as fancyLog from 'fancy-log'; import * as ansiColors from 'ansi-colors'; import { Stream } from 'stream'; -const mkdirp = require('mkdirp'); - export interface IExtensionDefinition { name: string; version: string; @@ -147,7 +145,7 @@ function readControlFile(): IControlFile { } function writeControlFile(control: IControlFile): void { - mkdirp.sync(path.dirname(controlFilePath)); + fs.mkdirSync(path.dirname(controlFilePath), { recursive: true }); fs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2)); } diff --git a/build/lib/layersChecker.js b/build/lib/layersChecker.js index 7c7fd3bc5..98241a368 100644 --- a/build/lib/layersChecker.js +++ b/build/lib/layersChecker.js @@ -72,6 +72,7 @@ const CORE_TYPES = [ '__global', 'PerformanceMark', 'PerformanceObserver', + 'ImportMeta' ]; // Types that are defined in a common layer but are known to be only // available in native environments should not be allowed in browser @@ -234,6 +235,22 @@ const RULES = [ '@types/node' // no node.js ] }, + // Electron (utility) + { + target: '**/vs/**/electron-utility/**', + allowedTypes: [ + ...CORE_TYPES, + // --> types from electron.d.ts that duplicate from lib.dom.d.ts + 'Event', + 'Request' + ], + disallowedTypes: [ + 'ipcMain' // not allowed, use validatedIpcMain instead + ], + disallowedDefinitions: [ + 'lib.dom.d.ts' // no DOM + ] + }, // Electron (main) { target: '**/vs/**/electron-main/**', diff --git a/build/lib/layersChecker.ts b/build/lib/layersChecker.ts index 60939fe27..26a18a48d 100644 --- a/build/lib/layersChecker.ts +++ b/build/lib/layersChecker.ts @@ -73,6 +73,7 @@ const CORE_TYPES = [ '__global', 'PerformanceMark', 'PerformanceObserver', + 'ImportMeta' ]; // Types that are defined in a common layer but are known to be only @@ -256,6 +257,24 @@ const RULES: IRule[] = [ ] }, + // Electron (utility) + { + target: '**/vs/**/electron-utility/**', + allowedTypes: [ + ...CORE_TYPES, + + // --> types from electron.d.ts that duplicate from lib.dom.d.ts + 'Event', + 'Request' + ], + disallowedTypes: [ + 'ipcMain' // not allowed, use validatedIpcMain instead + ], + disallowedDefinitions: [ + 'lib.dom.d.ts' // no DOM + ] + }, + // Electron (main) { target: '**/vs/**/electron-main/**', diff --git a/build/lib/mangle/index.js b/build/lib/mangle/index.js index f72d29993..f429712f1 100644 --- a/build/lib/mangle/index.js +++ b/build/lib/mangle/index.js @@ -14,7 +14,7 @@ const ts = require("typescript"); const url_1 = require("url"); const workerpool = require("workerpool"); const staticLanguageServiceHost_1 = require("./staticLanguageServiceHost"); -const esm_1 = require("../esm"); +const amd_1 = require("../amd"); const buildfile = require('../../buildfile'); class ShortIdent { prefix; @@ -264,7 +264,7 @@ const skippedExportMangledFiles = function () { // Module passed around as type 'pfs', // entry points - ...(0, esm_1.isESM)() ? [ + ...!(0, amd_1.isAMD)() ? [ buildfile.entrypoint('vs/server/node/server.main'), buildfile.base, buildfile.workerExtensionHost, diff --git a/build/lib/mangle/index.ts b/build/lib/mangle/index.ts index 7b6c6d208..ecede4cc1 100644 --- a/build/lib/mangle/index.ts +++ b/build/lib/mangle/index.ts @@ -12,7 +12,7 @@ import * as ts from 'typescript'; import { pathToFileURL } from 'url'; import * as workerpool from 'workerpool'; import { StaticLanguageServiceHost } from './staticLanguageServiceHost'; -import { isESM } from '../esm'; +import { isAMD } from '../amd'; const buildfile = require('../../buildfile'); class ShortIdent { @@ -280,7 +280,7 @@ function isNameTakenInFile(node: ts.Node, name: string): boolean { return false; } -const skippedExportMangledFiles = function () { // using a function() to ensure late isESM() check +const skippedExportMangledFiles = function () { // using a function() to ensure late isAMD() check return [ // Build 'css.build', @@ -300,7 +300,7 @@ const skippedExportMangledFiles = function () { // using a function() to ensure 'pfs', // entry points - ...isESM() ? [ + ...!isAMD() ? [ buildfile.entrypoint('vs/server/node/server.main'), buildfile.base, buildfile.workerExtensionHost, diff --git a/build/lib/nls.js b/build/lib/nls.js index 3fc4ba3ed..00b9c9262 100644 --- a/build/lib/nls.js +++ b/build/lib/nls.js @@ -11,7 +11,7 @@ const File = require("vinyl"); const sm = require("source-map"); const path = require("path"); const sort = require("gulp-sort"); -const esm_1 = require("./esm"); +const amd_1 = require("./amd"); var CollectStepResult; (function (CollectStepResult) { CollectStepResult[CollectStepResult["Yes"] = 0] = "Yes"; @@ -171,10 +171,10 @@ var _nls; .map(n => n) .filter(d => d.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference) .filter(d => { - if ((0, esm_1.isESM)()) { + if (!(0, amd_1.isAMD)()) { return d.moduleReference.expression.getText().endsWith(`/nls.js'`); } - return d.moduleReference.expression.getText() === '\'vs/nls\''; + return d.moduleReference.expression.getText().endsWith(`/nls'`); }); // import ... from 'vs/nls'; const importDeclarations = imports @@ -182,10 +182,10 @@ var _nls; .map(n => n) .filter(d => d.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral) .filter(d => { - if ((0, esm_1.isESM)()) { + if (!(0, amd_1.isAMD)()) { return d.moduleSpecifier.getText().endsWith(`/nls.js'`); } - return d.moduleSpecifier.getText() === '\'vs/nls\''; + return d.moduleSpecifier.getText().endsWith(`/nls'`); }) .filter(d => !!d.importClause && !!d.importClause.namedBindings); // `nls.localize(...)` calls diff --git a/build/lib/nls.ts b/build/lib/nls.ts index 0a60f74a7..a861122b1 100644 --- a/build/lib/nls.ts +++ b/build/lib/nls.ts @@ -10,7 +10,7 @@ import * as File from 'vinyl'; import * as sm from 'source-map'; import * as path from 'path'; import * as sort from 'gulp-sort'; -import { isESM } from './esm'; +import { isAMD } from './amd'; declare class FileSourceMap extends File { public sourceMap: sm.RawSourceMap; @@ -233,10 +233,10 @@ module _nls { .map(n => n) .filter(d => d.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference) .filter(d => { - if (isESM()) { + if (!isAMD()) { return (d.moduleReference).expression.getText().endsWith(`/nls.js'`); } - return (d.moduleReference).expression.getText() === '\'vs/nls\''; + return (d.moduleReference).expression.getText().endsWith(`/nls'`); }); // import ... from 'vs/nls'; @@ -245,10 +245,10 @@ module _nls { .map(n => n) .filter(d => d.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral) .filter(d => { - if (isESM()) { + if (!isAMD()) { return d.moduleSpecifier.getText().endsWith(`/nls.js'`); } - return d.moduleSpecifier.getText() === '\'vs/nls\''; + return d.moduleSpecifier.getText().endsWith(`/nls'`); }) .filter(d => !!d.importClause && !!d.importClause.namedBindings); diff --git a/build/lib/optimize.js b/build/lib/optimize.js index fdf738576..1d6d48afd 100644 --- a/build/lib/optimize.js +++ b/build/lib/optimize.js @@ -25,7 +25,7 @@ const util = require("./util"); const postcss_1 = require("./postcss"); const esbuild = require("esbuild"); const sourcemaps = require("gulp-sourcemaps"); -const esm_1 = require("./esm"); +const amd_1 = require("./amd"); const REPO_ROOT_PATH = path.join(__dirname, '../..'); function log(prefix, message) { fancyLog(ansiColors.cyan('[' + prefix + ']'), message); @@ -246,6 +246,7 @@ function optimizeESMTask(opts, cjsOpts) { packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages platform: 'neutral', // makes esm format: 'esm', + sourcemap: 'external', plugins: [boilerplateTrimmer], target: ['es2022'], loader: { @@ -255,7 +256,7 @@ function optimizeESMTask(opts, cjsOpts) { '.sh': 'file', }, assetNames: 'media/[name]', // moves media assets into a sub-folder "media" - banner, + banner: entryPoint.name === 'vs/workbench/workbench.web.main' ? undefined : banner, // TODO@esm remove line when we stop supporting web-amd-esm-bridge entryPoints: [ { in: path.join(REPO_ROOT_PATH, opts.src, `${entryPoint.name}.js`), @@ -268,6 +269,7 @@ function optimizeESMTask(opts, cjsOpts) { }).then(res => { for (const file of res.outputFiles) { let contents = file.contents; + let sourceMapFile = undefined; if (file.path.endsWith('.js')) { if (opts.fileContentMapper) { // UGLY the fileContentMapper is per file but at this point we have all files @@ -279,12 +281,15 @@ function optimizeESMTask(opts, cjsOpts) { } contents = Buffer.from(newText); } + sourceMapFile = res.outputFiles.find(f => f.path === `${file.path}.map`); } - files.push(new VinylFile({ + const fileProps = { contents: Buffer.from(contents), + sourceMap: sourceMapFile ? JSON.parse(sourceMapFile.text) : undefined, // support gulp-sourcemaps path: file.path, base: path.join(REPO_ROOT_PATH, opts.src) - })); + }; + files.push(new VinylFile(fileProps)); } }); // await task; // FORCE serial bundling (makes debugging easier) @@ -344,7 +349,7 @@ function optimizeLoaderTask(src, out, bundleLoader, bundledFileHeader = '', exte function optimizeTask(opts) { return function () { const optimizers = []; - if ((0, esm_1.isESM)('Running optimizer in ESM mode')) { + if (!(0, amd_1.isAMD)()) { optimizers.push(optimizeESMTask(opts.amd, opts.commonJS)); } else { @@ -390,12 +395,7 @@ function minifyTask(src, sourceMapBaseUrl) { cb(undefined, f); } }, cb); - }), jsFilter.restore, cssFilter, (0, postcss_1.gulpPostcss)([cssnano({ preset: 'default' })]), cssFilter.restore, svgFilter, svgmin(), svgFilter.restore, sourcemaps.mapSources((sourcePath) => { - if (sourcePath === 'bootstrap-fork.js') { - return 'bootstrap-fork.orig.js'; - } - return sourcePath; - }), sourcemaps.write('./', { + }), jsFilter.restore, cssFilter, (0, postcss_1.gulpPostcss)([cssnano({ preset: 'default' })]), cssFilter.restore, svgFilter, svgmin(), svgFilter.restore, sourcemaps.write('./', { sourceMappingURL, sourceRoot: undefined, includeContent: true, diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts index c75032134..a5b4efe28 100644 --- a/build/lib/optimize.ts +++ b/build/lib/optimize.ts @@ -20,7 +20,7 @@ import * as util from './util'; import { gulpPostcss } from './postcss'; import * as esbuild from 'esbuild'; import * as sourcemaps from 'gulp-sourcemaps'; -import { isESM } from './esm'; +import { isAMD } from './amd'; const REPO_ROOT_PATH = path.join(__dirname, '../..'); @@ -334,6 +334,7 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages platform: 'neutral', // makes esm format: 'esm', + sourcemap: 'external', plugins: [boilerplateTrimmer], target: ['es2022'], loader: { @@ -343,7 +344,7 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS '.sh': 'file', }, assetNames: 'media/[name]', // moves media assets into a sub-folder "media" - banner, + banner: entryPoint.name === 'vs/workbench/workbench.web.main' ? undefined : banner, // TODO@esm remove line when we stop supporting web-amd-esm-bridge entryPoints: [ { in: path.join(REPO_ROOT_PATH, opts.src, `${entryPoint.name}.js`), @@ -358,6 +359,7 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS for (const file of res.outputFiles) { let contents = file.contents; + let sourceMapFile: esbuild.OutputFile | undefined = undefined; if (file.path.endsWith('.js')) { @@ -371,13 +373,17 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS } contents = Buffer.from(newText); } + + sourceMapFile = res.outputFiles.find(f => f.path === `${file.path}.map`); } - files.push(new VinylFile({ + const fileProps = { contents: Buffer.from(contents), + sourceMap: sourceMapFile ? JSON.parse(sourceMapFile.text) : undefined, // support gulp-sourcemaps path: file.path, base: path.join(REPO_ROOT_PATH, opts.src) - })); + }; + files.push(new VinylFile(fileProps)); } }); @@ -504,7 +510,7 @@ export interface IOptimizeTaskOpts { export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStream { return function () { const optimizers: NodeJS.ReadWriteStream[] = []; - if (isESM('Running optimizer in ESM mode')) { + if (!isAMD()) { optimizers.push(optimizeESMTask(opts.amd, opts.commonJS)); } else { optimizers.push(optimizeAMDTask(opts.amd)); @@ -569,13 +575,6 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => svgFilter, svgmin(), svgFilter.restore, - (sourcemaps).mapSources((sourcePath: string) => { - if (sourcePath === 'bootstrap-fork.js') { - return 'bootstrap-fork.orig.js'; - } - - return sourcePath; - }), sourcemaps.write('./', { sourceMappingURL, sourceRoot: undefined, diff --git a/build/lib/standalone.js b/build/lib/standalone.js index 780308425..b724a009e 100644 --- a/build/lib/standalone.js +++ b/build/lib/standalone.js @@ -51,7 +51,12 @@ function extractEditor(options) { // Add extra .d.ts files from `node_modules/@types/` if (Array.isArray(options.compilerOptions?.types)) { options.compilerOptions.types.forEach((type) => { - options.typings.push(`../node_modules/@types/${type}/index.d.ts`); + if (type === '@webgpu/types') { + options.typings.push(`../node_modules/${type}/dist/index.d.ts`); + } + else { + options.typings.push(`../node_modules/@types/${type}/index.d.ts`); + } }); } const result = tss.shake(options); @@ -79,13 +84,7 @@ function extractEditor(options) { const info = ts.preProcessFile(fileContents); for (let i = info.importedFiles.length - 1; i >= 0; i--) { const importedFileName = info.importedFiles[i].fileName; - let importedFilePath; - if (/^vs\/css!/.test(importedFileName)) { - importedFilePath = importedFileName.substr('vs/css!'.length) + '.css'; - } - else { - importedFilePath = importedFileName; - } + let importedFilePath = importedFileName; if (/(^\.\/)|(^\.\.\/)/.test(importedFilePath)) { importedFilePath = path.join(path.dirname(fileName), importedFilePath); } @@ -93,8 +92,9 @@ function extractEditor(options) { transportCSS(importedFilePath, copyFile, writeOutputFile); } else { - if (fs.existsSync(path.join(options.sourcesRoot, importedFilePath + '.js'))) { - copyFile(importedFilePath + '.js'); + const pathToCopy = path.join(options.sourcesRoot, importedFilePath); + if (fs.existsSync(pathToCopy) && !fs.statSync(pathToCopy).isDirectory()) { + copyFile(importedFilePath); } } } @@ -110,7 +110,6 @@ function extractEditor(options) { ].forEach(copyFile); } function createESMSourcesAndResources2(options) { - const ts = require('typescript'); const SRC_FOLDER = path.join(REPO_ROOT, options.srcFolder); const OUT_FOLDER = path.join(REPO_ROOT, options.outFolder); const OUT_RESOURCES_FOLDER = path.join(REPO_ROOT, options.outResourcesFolder); @@ -136,53 +135,11 @@ function createESMSourcesAndResources2(options) { write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t')); continue; } - if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) { + if (/\.ts$/.test(file) || /\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) { // Transport the files directly write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file))); continue; } - if (/\.ts$/.test(file)) { - // Transform the .ts file - let fileContents = fs.readFileSync(path.join(SRC_FOLDER, file)).toString(); - const info = ts.preProcessFile(fileContents); - for (let i = info.importedFiles.length - 1; i >= 0; i--) { - const importedFilename = info.importedFiles[i].fileName; - const pos = info.importedFiles[i].pos; - const end = info.importedFiles[i].end; - let importedFilepath; - if (/^vs\/css!/.test(importedFilename)) { - importedFilepath = importedFilename.substr('vs/css!'.length) + '.css'; - } - else { - importedFilepath = importedFilename; - } - if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) { - importedFilepath = path.join(path.dirname(file), importedFilepath); - } - let relativePath; - if (importedFilepath === path.dirname(file).replace(/\\/g, '/')) { - relativePath = '../' + path.basename(path.dirname(file)); - } - else if (importedFilepath === path.dirname(path.dirname(file)).replace(/\\/g, '/')) { - relativePath = '../../' + path.basename(path.dirname(path.dirname(file))); - } - else { - relativePath = path.relative(path.dirname(file), importedFilepath); - } - relativePath = relativePath.replace(/\\/g, '/'); - if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) { - relativePath = './' + relativePath; - } - fileContents = (fileContents.substring(0, pos + 1) - + relativePath - + fileContents.substring(end + 1)); - } - fileContents = fileContents.replace(/import ([a-zA-Z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) { - return `import * as ${m1} from ${m2};`; - }); - write(getDestAbsoluteFilePath(file), fileContents); - continue; - } console.log(`UNKNOWN FILE: ${file}`); } function walkDirRecursive(dir) { diff --git a/build/lib/standalone.ts b/build/lib/standalone.ts index e1b9db65e..9563cd667 100644 --- a/build/lib/standalone.ts +++ b/build/lib/standalone.ts @@ -59,7 +59,11 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str // Add extra .d.ts files from `node_modules/@types/` if (Array.isArray(options.compilerOptions?.types)) { options.compilerOptions.types.forEach((type: string) => { - options.typings.push(`../node_modules/@types/${type}/index.d.ts`); + if (type === '@webgpu/types') { + options.typings.push(`../node_modules/${type}/dist/index.d.ts`); + } else { + options.typings.push(`../node_modules/@types/${type}/index.d.ts`); + } }); } @@ -90,12 +94,7 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str for (let i = info.importedFiles.length - 1; i >= 0; i--) { const importedFileName = info.importedFiles[i].fileName; - let importedFilePath: string; - if (/^vs\/css!/.test(importedFileName)) { - importedFilePath = importedFileName.substr('vs/css!'.length) + '.css'; - } else { - importedFilePath = importedFileName; - } + let importedFilePath = importedFileName; if (/(^\.\/)|(^\.\.\/)/.test(importedFilePath)) { importedFilePath = path.join(path.dirname(fileName), importedFilePath); } @@ -103,8 +102,9 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str if (/\.css$/.test(importedFilePath)) { transportCSS(importedFilePath, copyFile, writeOutputFile); } else { - if (fs.existsSync(path.join(options.sourcesRoot, importedFilePath + '.js'))) { - copyFile(importedFilePath + '.js'); + const pathToCopy = path.join(options.sourcesRoot, importedFilePath); + if (fs.existsSync(pathToCopy) && !fs.statSync(pathToCopy).isDirectory()) { + copyFile(importedFilePath); } } } @@ -131,7 +131,6 @@ export interface IOptions2 { } export function createESMSourcesAndResources2(options: IOptions2): void { - const ts = require('typescript') as typeof import('typescript'); const SRC_FOLDER = path.join(REPO_ROOT, options.srcFolder); const OUT_FOLDER = path.join(REPO_ROOT, options.outFolder); @@ -163,60 +162,12 @@ export function createESMSourcesAndResources2(options: IOptions2): void { continue; } - if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) { + if (/\.ts$/.test(file) || /\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) { // Transport the files directly write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file))); continue; } - if (/\.ts$/.test(file)) { - // Transform the .ts file - let fileContents = fs.readFileSync(path.join(SRC_FOLDER, file)).toString(); - - const info = ts.preProcessFile(fileContents); - - for (let i = info.importedFiles.length - 1; i >= 0; i--) { - const importedFilename = info.importedFiles[i].fileName; - const pos = info.importedFiles[i].pos; - const end = info.importedFiles[i].end; - - let importedFilepath: string; - if (/^vs\/css!/.test(importedFilename)) { - importedFilepath = importedFilename.substr('vs/css!'.length) + '.css'; - } else { - importedFilepath = importedFilename; - } - if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) { - importedFilepath = path.join(path.dirname(file), importedFilepath); - } - - let relativePath: string; - if (importedFilepath === path.dirname(file).replace(/\\/g, '/')) { - relativePath = '../' + path.basename(path.dirname(file)); - } else if (importedFilepath === path.dirname(path.dirname(file)).replace(/\\/g, '/')) { - relativePath = '../../' + path.basename(path.dirname(path.dirname(file))); - } else { - relativePath = path.relative(path.dirname(file), importedFilepath); - } - relativePath = relativePath.replace(/\\/g, '/'); - if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) { - relativePath = './' + relativePath; - } - fileContents = ( - fileContents.substring(0, pos + 1) - + relativePath - + fileContents.substring(end + 1) - ); - } - - fileContents = fileContents.replace(/import ([a-zA-Z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) { - return `import * as ${m1} from ${m2};`; - }); - - write(getDestAbsoluteFilePath(file), fileContents); - continue; - } - console.log(`UNKNOWN FILE: ${file}`); } diff --git a/build/lib/stylelint/vscode-known-variables.json b/build/lib/stylelint/vscode-known-variables.json index a17856c02..56aa02ebf 100644 --- a/build/lib/stylelint/vscode-known-variables.json +++ b/build/lib/stylelint/vscode-known-variables.json @@ -167,6 +167,10 @@ "--vscode-editor-wordHighlightStrongBorder", "--vscode-editor-wordHighlightTextBackground", "--vscode-editor-wordHighlightTextBorder", + "--vscode-editorActionList-background", + "--vscode-editorActionList-focusBackground", + "--vscode-editorActionList-focusForeground", + "--vscode-editorActionList-foreground", "--vscode-editorActiveLineNumber-foreground", "--vscode-editorBracketHighlight-foreground1", "--vscode-editorBracketHighlight-foreground2", @@ -255,10 +259,6 @@ "--vscode-editorLightBulb-foreground", "--vscode-editorLightBulbAi-foreground", "--vscode-editorLightBulbAutoFix-foreground", - "--vscode-editorActionList-background", - "--vscode-editorActionList-foreground", - "--vscode-editorActionList-focusForeground", - "--vscode-editorActionList-focusBackground", "--vscode-editorLineNumber-activeForeground", "--vscode-editorLineNumber-dimmedForeground", "--vscode-editorLineNumber-foreground", @@ -543,17 +543,17 @@ "--vscode-radio-inactiveForeground", "--vscode-radio-inactiveHoverBackground", "--vscode-sash-hoverBorder", - "--vscode-scm-historyGraph-green", - "--vscode-scm-historyGraph-historyItemGroupBase", - "--vscode-scm-historyGraph-historyItemGroupHoverLabelForeground", - "--vscode-scm-historyGraph-historyItemGroupLocal", - "--vscode-scm-historyGraph-historyItemGroupRemote", - "--vscode-scm-historyGraph-red", - "--vscode-scm-historyGraph-yellow", - "--vscode-scm-historyItemAdditionsForeground", - "--vscode-scm-historyItemDeletionsForeground", - "--vscode-scm-historyItemSelectedStatisticsBorder", - "--vscode-scm-historyItemStatisticsBorder", + "--vscode-scmGraph-foreground1", + "--vscode-scmGraph-foreground2", + "--vscode-scmGraph-foreground3", + "--vscode-scmGraph-historyItemBaseRefColor", + "--vscode-scmGraph-historyItemRefColor", + "--vscode-scmGraph-historyItemRemoteRefColor", + "--vscode-scmGraph-historyItemHoverAdditionsForeground", + "--vscode-scmGraph-historyItemHoverDefaultLabelBackground", + "--vscode-scmGraph-historyItemHoverDefaultLabelForeground", + "--vscode-scmGraph-historyItemHoverDeletionsForeground", + "--vscode-scmGraph-historyItemHoverLabelForeground", "--vscode-scrollbar-shadow", "--vscode-scrollbarSlider-activeBackground", "--vscode-scrollbarSlider-background", @@ -831,6 +831,7 @@ "--testMessageDecorationFontFamily", "--testMessageDecorationFontSize", "--title-border-bottom-color", + "--title-wco-width", "--vscode-chat-list-background", "--vscode-editorCodeLens-fontFamily", "--vscode-editorCodeLens-fontFamilyDefault", @@ -880,4 +881,4 @@ "--widget-color", "--text-link-decoration" ] -} \ No newline at end of file +} diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js index 842f691af..af06f4e3e 100644 --- a/build/lib/treeshaking.js +++ b/build/lib/treeshaking.js @@ -121,12 +121,15 @@ function discoverAndReadFiles(ts, options) { for (let i = info.importedFiles.length - 1; i >= 0; i--) { const importedFileName = info.importedFiles[i].fileName; if (options.importIgnorePattern.test(importedFileName)) { - // Ignore vs/css! imports + // Ignore *.css imports continue; } let importedModuleId = importedFileName; if (/(^\.\/)|(^\.\.\/)/.test(importedModuleId)) { importedModuleId = path.join(path.dirname(moduleId), importedModuleId); + if (importedModuleId.endsWith('.js')) { // ESM: code imports require to be relative and have a '.js' file extension + importedModuleId = importedModuleId.substr(0, importedModuleId.length - 3); + } } enqueue(importedModuleId); } @@ -453,6 +456,9 @@ function markNodes(ts, languageService, options) { const nodeSourceFile = node.getSourceFile(); let fullPath; if (/(^\.\/)|(^\.\.\/)/.test(importText)) { + if (importText.endsWith('.js')) { // ESM: code imports require to be relative and to have a '.js' file extension + importText = importText.substr(0, importText.length - 3); + } fullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts'; } else { diff --git a/build/lib/treeshaking.ts b/build/lib/treeshaking.ts index d01b34d26..cd17c5f02 100644 --- a/build/lib/treeshaking.ts +++ b/build/lib/treeshaking.ts @@ -53,7 +53,7 @@ export interface ITreeShakingOptions { */ shakeLevel: ShakeLevel; /** - * regex pattern to ignore certain imports e.g. `vs/css!` imports + * regex pattern to ignore certain imports e.g. `.css` imports */ importIgnorePattern: RegExp; @@ -182,13 +182,16 @@ function discoverAndReadFiles(ts: typeof import('typescript'), options: ITreeSha const importedFileName = info.importedFiles[i].fileName; if (options.importIgnorePattern.test(importedFileName)) { - // Ignore vs/css! imports + // Ignore *.css imports continue; } let importedModuleId = importedFileName; if (/(^\.\/)|(^\.\.\/)/.test(importedModuleId)) { importedModuleId = path.join(path.dirname(moduleId), importedModuleId); + if (importedModuleId.endsWith('.js')) { // ESM: code imports require to be relative and have a '.js' file extension + importedModuleId = importedModuleId.substr(0, importedModuleId.length - 3); + } } enqueue(importedModuleId); } @@ -567,6 +570,9 @@ function markNodes(ts: typeof import('typescript'), languageService: ts.Language const nodeSourceFile = node.getSourceFile(); let fullPath: string; if (/(^\.\/)|(^\.\.\/)/.test(importText)) { + if (importText.endsWith('.js')) { // ESM: code imports require to be relative and to have a '.js' file extension + importText = importText.substr(0, importText.length - 3); + } fullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts'; } else { fullPath = importText + '.ts'; diff --git a/build/lib/tsb/builder.js b/build/lib/tsb/builder.js index d3d513adb..cee2758e8 100644 --- a/build/lib/tsb/builder.js +++ b/build/lib/tsb/builder.js @@ -550,7 +550,10 @@ class LanguageServiceHost { let found = false; while (!found && dirname.indexOf(stopDirname) === 0) { dirname = path.dirname(dirname); - const resolvedPath = path.resolve(dirname, ref.fileName); + let resolvedPath = path.resolve(dirname, ref.fileName); + if (resolvedPath.endsWith('.js')) { + resolvedPath = resolvedPath.slice(0, -3); + } const normalizedPath = normalize(resolvedPath); if (this.getScriptSnapshot(normalizedPath + '.ts')) { this._dependencies.inertEdge(filename, normalizedPath + '.ts'); diff --git a/build/lib/tsb/builder.ts b/build/lib/tsb/builder.ts index 78285f608..70c71591a 100644 --- a/build/lib/tsb/builder.ts +++ b/build/lib/tsb/builder.ts @@ -660,7 +660,10 @@ class LanguageServiceHost implements ts.LanguageServiceHost { while (!found && dirname.indexOf(stopDirname) === 0) { dirname = path.dirname(dirname); - const resolvedPath = path.resolve(dirname, ref.fileName); + let resolvedPath = path.resolve(dirname, ref.fileName); + if (resolvedPath.endsWith('.js')) { + resolvedPath = resolvedPath.slice(0, -3); + } const normalizedPath = normalize(resolvedPath); if (this.getScriptSnapshot(normalizedPath + '.ts')) { diff --git a/build/linux/dependencies-generator.js b/build/linux/dependencies-generator.js index 21c4236aa..5d4bb8283 100644 --- a/build/linux/dependencies-generator.js +++ b/build/linux/dependencies-generator.js @@ -15,7 +15,7 @@ const dep_lists_2 = require("./rpm/dep-lists"); const types_1 = require("./debian/types"); const types_2 = require("./rpm/types"); const product = require("../../product.json"); -const esm_1 = require("../lib/esm"); +const amd_1 = require("../lib/amd"); // A flag that can easily be toggled. // Make sure to compile the build directory after toggling the value. // If false, we warn about new dependencies if they show up @@ -44,7 +44,7 @@ async function getDependencies(packageType, buildDir, applicationName, arch) { throw new Error('Invalid RPM arch string ' + arch); } // Get the files for which we want to find dependencies. - const canAsar = !(0, esm_1.isESM)('ASAR disabled in Linux builds'); // TODO@esm ASAR disabled in ESM + const canAsar = (0, amd_1.isAMD)(); // TODO@esm ASAR disabled in ESM const nativeModulesPath = path.join(buildDir, 'resources', 'app', canAsar ? 'node_modules.asar.unpacked' : 'node_modules'); const findResult = (0, child_process_1.spawnSync)('find', [nativeModulesPath, '-name', '*.node']); if (findResult.status) { diff --git a/build/linux/dependencies-generator.ts b/build/linux/dependencies-generator.ts index 45eeab4d7..d390818dc 100644 --- a/build/linux/dependencies-generator.ts +++ b/build/linux/dependencies-generator.ts @@ -15,7 +15,7 @@ import { referenceGeneratedDepsByArch as rpmGeneratedDeps } from './rpm/dep-list import { DebianArchString, isDebianArchString } from './debian/types'; import { isRpmArchString, RpmArchString } from './rpm/types'; import product = require('../../product.json'); -import { isESM } from '../lib/esm'; +import { isAMD } from '../lib/amd'; // A flag that can easily be toggled. // Make sure to compile the build directory after toggling the value. @@ -48,7 +48,7 @@ export async function getDependencies(packageType: 'deb' | 'rpm', buildDir: stri } // Get the files for which we want to find dependencies. - const canAsar = !isESM('ASAR disabled in Linux builds'); // TODO@esm ASAR disabled in ESM + const canAsar = isAMD(); // TODO@esm ASAR disabled in ESM const nativeModulesPath = path.join(buildDir, 'resources', 'app', canAsar ? 'node_modules.asar.unpacked' : 'node_modules'); const findResult = spawnSync('find', [nativeModulesPath, '-name', '*.node']); if (findResult.status) { diff --git a/build/loader.min b/build/loader.min new file mode 100644 index 000000000..f9d21b582 --- /dev/null +++ b/build/loader.min @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +"use strict";const _amdLoaderGlobal=this,_commonjsGlobal=typeof global=="object"?global:{};var AMDLoader;(function(d){d.global=_amdLoaderGlobal;class _{get isWindows(){return this._detect(),this._isWindows}get isNode(){return this._detect(),this._isNode}get isElectronRenderer(){return this._detect(),this._isElectronRenderer}get isWebWorker(){return this._detect(),this._isWebWorker}get isElectronNodeIntegrationWebWorker(){return this._detect(),this._isElectronNodeIntegrationWebWorker}constructor(){this._detected=!1,this._isWindows=!1,this._isNode=!1,this._isElectronRenderer=!1,this._isWebWorker=!1,this._isElectronNodeIntegrationWebWorker=!1}_detect(){this._detected||(this._detected=!0,this._isWindows=_._isWindows(),this._isNode=typeof module<"u"&&!!module.exports,this._isElectronRenderer=typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.electron<"u"&&process.type==="renderer",this._isWebWorker=typeof d.global.importScripts=="function",this._isElectronNodeIntegrationWebWorker=this._isWebWorker&&typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.electron<"u"&&process.type==="worker")}static _isWindows(){return typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.indexOf("Windows")>=0?!0:typeof process<"u"?process.platform==="win32":!1}}d.Environment=_})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(n,c,a){this.type=n,this.detail=c,this.timestamp=a}}d.LoaderEvent=_;class v{constructor(n){this._events=[new _(1,"",n)]}record(n,c){this._events.push(new _(n,c,d.Utilities.getHighPerformanceTimestamp()))}getEvents(){return this._events}}d.LoaderEventRecorder=v;class f{record(n,c){}getEvents(){return[]}}f.INSTANCE=new f,d.NullLoaderEventRecorder=f})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{static fileUriToFilePath(f,h){if(h=decodeURI(h).replace(/%23/g,"#"),f){if(/^file:\/\/\//.test(h))return h.substr(8);if(/^file:\/\//.test(h))return h.substr(5)}else if(/^file:\/\//.test(h))return h.substr(7);return h}static startsWith(f,h){return f.length>=h.length&&f.substr(0,h.length)===h}static endsWith(f,h){return f.length>=h.length&&f.substr(f.length-h.length)===h}static containsQueryString(f){return/^[^\#]*\?/gi.test(f)}static isAbsolutePath(f){return/^((http:\/\/)|(https:\/\/)|(file:\/\/)|(\/))/.test(f)}static forEachProperty(f,h){if(f){let n;for(n in f)f.hasOwnProperty(n)&&h(n,f[n])}}static isEmpty(f){let h=!0;return _.forEachProperty(f,()=>{h=!1}),h}static recursiveClone(f){if(!f||typeof f!="object"||f instanceof RegExp||!Array.isArray(f)&&Object.getPrototypeOf(f)!==Object.prototype)return f;let h=Array.isArray(f)?[]:{};return _.forEachProperty(f,(n,c)=>{c&&typeof c=="object"?h[n]=_.recursiveClone(c):h[n]=c}),h}static generateAnonymousModule(){return"===anonymous"+_.NEXT_ANONYMOUS_ID+++"==="}static isAnonymousModule(f){return _.startsWith(f,"===anonymous")}static getHighPerformanceTimestamp(){return this.PERFORMANCE_NOW_PROBED||(this.PERFORMANCE_NOW_PROBED=!0,this.HAS_PERFORMANCE_NOW=d.global.performance&&typeof d.global.performance.now=="function"),this.HAS_PERFORMANCE_NOW?d.global.performance.now():Date.now()}}_.NEXT_ANONYMOUS_ID=1,_.PERFORMANCE_NOW_PROBED=!1,_.HAS_PERFORMANCE_NOW=!1,d.Utilities=_})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){function _(h){if(h instanceof Error)return h;const n=new Error(h.message||String(h)||"Unknown Error");return h.stack&&(n.stack=h.stack),n}d.ensureError=_;class v{static validateConfigurationOptions(n){function c(a){if(a.phase==="loading"){console.error('Loading "'+a.moduleId+'" failed'),console.error(a),console.error("Here are the modules that depend on it:"),console.error(a.neededBy);return}if(a.phase==="factory"){console.error('The factory function of "'+a.moduleId+'" has thrown an exception'),console.error(a),console.error("Here are the modules that depend on it:"),console.error(a.neededBy);return}}if(n=n||{},typeof n.baseUrl!="string"&&(n.baseUrl=""),typeof n.isBuild!="boolean"&&(n.isBuild=!1),typeof n.paths!="object"&&(n.paths={}),typeof n.config!="object"&&(n.config={}),typeof n.catchError>"u"&&(n.catchError=!1),typeof n.recordStats>"u"&&(n.recordStats=!1),typeof n.urlArgs!="string"&&(n.urlArgs=""),typeof n.onError!="function"&&(n.onError=c),Array.isArray(n.ignoreDuplicateModules)||(n.ignoreDuplicateModules=[]),n.baseUrl.length>0&&(d.Utilities.endsWith(n.baseUrl,"/")||(n.baseUrl+="/")),typeof n.cspNonce!="string"&&(n.cspNonce=""),typeof n.preferScriptTags>"u"&&(n.preferScriptTags=!1),n.nodeCachedData&&typeof n.nodeCachedData=="object"&&(typeof n.nodeCachedData.seed!="string"&&(n.nodeCachedData.seed="seed"),(typeof n.nodeCachedData.writeDelay!="number"||n.nodeCachedData.writeDelay<0)&&(n.nodeCachedData.writeDelay=1e3*7),!n.nodeCachedData.path||typeof n.nodeCachedData.path!="string")){const a=_(new Error("INVALID cached data configuration, 'path' MUST be set"));a.phase="configuration",n.onError(a),n.nodeCachedData=void 0}return n}static mergeConfigurationOptions(n=null,c=null){let a=d.Utilities.recursiveClone(c||{});return d.Utilities.forEachProperty(n,(t,e)=>{t==="ignoreDuplicateModules"&&typeof a.ignoreDuplicateModules<"u"?a.ignoreDuplicateModules=a.ignoreDuplicateModules.concat(e):t==="paths"&&typeof a.paths<"u"?d.Utilities.forEachProperty(e,(i,s)=>a.paths[i]=s):t==="config"&&typeof a.config<"u"?d.Utilities.forEachProperty(e,(i,s)=>a.config[i]=s):a[t]=d.Utilities.recursiveClone(e)}),v.validateConfigurationOptions(a)}}d.ConfigurationOptionsUtil=v;class f{constructor(n,c){if(this._env=n,this.options=v.mergeConfigurationOptions(c),this._createIgnoreDuplicateModulesMap(),this._createSortedPathsRules(),this.options.baseUrl===""&&this.options.nodeRequire&&this.options.nodeRequire.main&&this.options.nodeRequire.main.filename&&this._env.isNode){let a=this.options.nodeRequire.main.filename,t=Math.max(a.lastIndexOf("/"),a.lastIndexOf("\\"));this.options.baseUrl=a.substring(0,t+1)}}_createIgnoreDuplicateModulesMap(){this.ignoreDuplicateModulesMap={};for(let n=0;n{Array.isArray(c)?this.sortedPathsRules.push({from:n,to:c}):this.sortedPathsRules.push({from:n,to:[c]})}),this.sortedPathsRules.sort((n,c)=>c.from.length-n.from.length)}cloneAndMerge(n){return new f(this._env,v.mergeConfigurationOptions(n,this.options))}getOptionsLiteral(){return this.options}_applyPaths(n){let c;for(let a=0,t=this.sortedPathsRules.length;athis.triggerCallback(i),u=>this.triggerErrorback(i,u))}triggerCallback(e){let i=this._callbackMap[e];delete this._callbackMap[e];for(let s=0;s{e.removeEventListener("load",o),e.removeEventListener("error",u)},o=l=>{r(),i()},u=l=>{r(),s(l)};e.addEventListener("load",o),e.addEventListener("error",u)}load(e,i,s,r){if(/^node\|/.test(i)){let o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=i.split("|"),g=null;try{g=u(l[1])}catch(p){r(p);return}e.enqueueDefineAnonymousModule([],()=>g),s()}else{let o=document.createElement("script");o.setAttribute("async","async"),o.setAttribute("type","text/javascript"),this.attachListeners(o,s,r);const{trustedTypesPolicy:u}=e.getConfig().getOptionsLiteral();u&&(i=u.createScriptURL(i)),o.setAttribute("src",i);const{cspNonce:l}=e.getConfig().getOptionsLiteral();l&&o.setAttribute("nonce",l),document.getElementsByTagName("head")[0].appendChild(o)}}}function f(t){const{trustedTypesPolicy:e}=t.getConfig().getOptionsLiteral();try{return(e?self.eval(e.createScript("","true")):new Function("true")).call(self),!0}catch{return!1}}class h{constructor(){this._cachedCanUseEval=null}_canUseEval(e){return this._cachedCanUseEval===null&&(this._cachedCanUseEval=f(e)),this._cachedCanUseEval}load(e,i,s,r){if(/^node\|/.test(i)){const o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=i.split("|");let g=null;try{g=u(l[1])}catch(p){r(p);return}e.enqueueDefineAnonymousModule([],function(){return g}),s()}else{const{trustedTypesPolicy:o}=e.getConfig().getOptionsLiteral();if(!(/^((http:)|(https:)|(file:))/.test(i)&&i.substring(0,self.origin.length)!==self.origin)&&this._canUseEval(e)){fetch(i).then(l=>{if(l.status!==200)throw new Error(l.statusText);return l.text()}).then(l=>{l=`${l} +//# sourceURL=${i}`,(o?self.eval(o.createScript("",l)):new Function(l)).call(self),s()}).then(void 0,r);return}try{o&&(i=o.createScriptURL(i)),importScripts(i),s()}catch(l){r(l)}}}}class n{constructor(e){this._env=e,this._didInitialize=!1,this._didPatchNodeRequire=!1}_init(e){this._didInitialize||(this._didInitialize=!0,this._fs=e("fs"),this._vm=e("vm"),this._path=e("path"),this._crypto=e("crypto"))}_initNodeRequire(e,i){const{nodeCachedData:s}=i.getConfig().getOptionsLiteral();if(!s||this._didPatchNodeRequire)return;this._didPatchNodeRequire=!0;const r=this,o=e("module");function u(l){const g=l.constructor;let p=function(y){try{return l.require(y)}finally{}};return p.resolve=function(y,E){return g._resolveFilename(y,l,!1,E)},p.resolve.paths=function(y){return g._resolveLookupPaths(y,l)},p.main=process.mainModule,p.extensions=g._extensions,p.cache=g._cache,p}o.prototype._compile=function(l,g){const p=o.wrap(l.replace(/^#!.*/,"")),m=i.getRecorder(),y=r._getCachedDataPath(s,g),E={filename:g};let R;try{const x=r._fs.readFileSync(y);R=x.slice(0,16),E.cachedData=x.slice(16),m.record(60,y)}catch{m.record(61,y)}const C=new r._vm.Script(p,E),I=C.runInThisContext(E),w=r._path.dirname(g),b=u(this),U=[this.exports,b,this,g,w,process,_commonjsGlobal,Buffer],P=I.apply(this.exports,U);return r._handleCachedData(C,p,y,!E.cachedData,i),r._verifyCachedData(C,p,y,R,i),P}}load(e,i,s,r){const o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=o.nodeInstrumenter||function(p){return p};this._init(u),this._initNodeRequire(u,e);let g=e.getRecorder();if(/^node\|/.test(i)){let p=i.split("|"),m=null;try{m=u(p[1])}catch(y){r(y);return}e.enqueueDefineAnonymousModule([],()=>m),s()}else{i=d.Utilities.fileUriToFilePath(this._env.isWindows,i);const p=this._path.normalize(i),m=this._getElectronRendererScriptPathOrUri(p),y=!!o.nodeCachedData,E=y?this._getCachedDataPath(o.nodeCachedData,i):void 0;this._readSourceAndCachedData(p,E,g,(R,C,I,w)=>{if(R){r(R);return}let b;C.charCodeAt(0)===n._BOM?b=n._PREFIX+C.substring(1)+n._SUFFIX:b=n._PREFIX+C+n._SUFFIX,b=l(b,p);const U={filename:m,cachedData:I},P=this._createAndEvalScript(e,b,U,s,r);this._handleCachedData(P,b,E,y&&!I,e),this._verifyCachedData(P,b,E,w,e)})}}_createAndEvalScript(e,i,s,r,o){const u=e.getRecorder();u.record(31,s.filename);const l=new this._vm.Script(i,s),g=l.runInThisContext(s),p=e.getGlobalAMDDefineFunc();let m=!1;const y=function(){return m=!0,p.apply(null,arguments)};return y.amd=p.amd,g.call(d.global,e.getGlobalAMDRequireFunc(),y,s.filename,this._path.dirname(s.filename)),u.record(32,s.filename),m?r():o(new Error(`Didn't receive define call in ${s.filename}!`)),l}_getElectronRendererScriptPathOrUri(e){if(!this._env.isElectronRenderer)return e;let i=e.match(/^([a-z])\:(.*)/i);return i?`file:///${(i[1].toUpperCase()+":"+i[2]).replace(/\\/g,"/")}`:`file://${e}`}_getCachedDataPath(e,i){const s=this._crypto.createHash("md5").update(i,"utf8").update(e.seed,"utf8").update(process.arch,"").digest("hex"),r=this._path.basename(i).replace(/\.js$/,"");return this._path.join(e.path,`${r}-${s}.code`)}_handleCachedData(e,i,s,r,o){e.cachedDataRejected?this._fs.unlink(s,u=>{o.getRecorder().record(62,s),this._createAndWriteCachedData(e,i,s,o),u&&o.getConfig().onError(u)}):r&&this._createAndWriteCachedData(e,i,s,o)}_createAndWriteCachedData(e,i,s,r){let o=Math.ceil(r.getConfig().getOptionsLiteral().nodeCachedData.writeDelay*(1+Math.random())),u=-1,l=0,g;const p=()=>{setTimeout(()=>{g||(g=this._crypto.createHash("md5").update(i,"utf8").digest());const m=e.createCachedData();if(!(m.length===0||m.length===u||l>=5)){if(m.length{y&&r.getConfig().onError(y),r.getRecorder().record(63,s),p()})}},o*Math.pow(4,l++))};p()}_readSourceAndCachedData(e,i,s,r){if(!i)this._fs.readFile(e,{encoding:"utf8"},r);else{let o,u,l,g=2;const p=m=>{m?r(m):--g===0&&r(void 0,o,u,l)};this._fs.readFile(e,{encoding:"utf8"},(m,y)=>{o=y,p(m)}),this._fs.readFile(i,(m,y)=>{!m&&y&&y.length>0?(l=y.slice(0,16),u=y.slice(16),s.record(60,i)):s.record(61,i),p()})}}_verifyCachedData(e,i,s,r,o){r&&(e.cachedDataRejected||setTimeout(()=>{const u=this._crypto.createHash("md5").update(i,"utf8").digest();r.equals(u)||(o.getConfig().onError(new Error(`FAILED TO VERIFY CACHED DATA, deleting stale '${s}' now, but a RESTART IS REQUIRED`)),this._fs.unlink(s,l=>{l&&o.getConfig().onError(l)}))},Math.ceil(5e3*(1+Math.random()))))}}n._BOM=65279,n._PREFIX="(function (require, define, __filename, __dirname) { ",n._SUFFIX=` +});`;function c(t,e){if(e.__$__isRecorded)return e;const i=function(r){t.record(33,r);try{return e(r)}finally{t.record(34,r)}};return i.__$__isRecorded=!0,i}d.ensureRecordedNodeRequire=c;function a(t){return new _(t)}d.createScriptLoader=a})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(t){let e=t.lastIndexOf("/");e!==-1?this.fromModulePath=t.substr(0,e+1):this.fromModulePath=""}static _normalizeModuleId(t){let e=t,i;for(i=/\/\.\//;i.test(e);)e=e.replace(i,"/");for(e=e.replace(/^\.\//g,""),i=/\/(([^\/])|([^\/][^\/\.])|([^\/\.][^\/])|([^\/][^\/][^\/]+))\/\.\.\//;i.test(e);)e=e.replace(i,"/");return e=e.replace(/^(([^\/])|([^\/][^\/\.])|([^\/\.][^\/])|([^\/][^\/][^\/]+))\/\.\.\//,""),e}resolveModule(t){let e=t;return d.Utilities.isAbsolutePath(e)||(d.Utilities.startsWith(e,"./")||d.Utilities.startsWith(e,"../"))&&(e=_._normalizeModuleId(this.fromModulePath+e)),e}}_.ROOT=new _(""),d.ModuleIdResolver=_;class v{constructor(t,e,i,s,r,o){this.id=t,this.strId=e,this.dependencies=i,this._callback=s,this._errorback=r,this.moduleIdResolver=o,this.exports={},this.error=null,this.exportsPassedIn=!1,this.unresolvedDependenciesCount=this.dependencies.length,this._isComplete=!1}static _safeInvokeFunction(t,e){try{return{returnedValue:t.apply(d.global,e),producedError:null}}catch(i){return{returnedValue:null,producedError:i}}}static _invokeFactory(t,e,i,s){return t.shouldInvokeFactory(e)?t.shouldCatchError()?this._safeInvokeFunction(i,s):{returnedValue:i.apply(d.global,s),producedError:null}:{returnedValue:null,producedError:null}}complete(t,e,i,s){this._isComplete=!0;let r=null;if(this._callback)if(typeof this._callback=="function"){t.record(21,this.strId);let o=v._invokeFactory(e,this.strId,this._callback,i);r=o.producedError,t.record(22,this.strId),!r&&typeof o.returnedValue<"u"&&(!this.exportsPassedIn||d.Utilities.isEmpty(this.exports))&&(this.exports=o.returnedValue)}else this.exports=this._callback;if(r){let o=d.ensureError(r);o.phase="factory",o.moduleId=this.strId,o.neededBy=s(this.id),this.error=o,e.onError(o)}this.dependencies=null,this._callback=null,this._errorback=null,this.moduleIdResolver=null}onDependencyError(t){return this._isComplete=!0,this.error=t,this._errorback?(this._errorback(t),!0):!1}isComplete(){return this._isComplete}}d.Module=v;class f{constructor(){this._nextId=0,this._strModuleIdToIntModuleId=new Map,this._intModuleIdToStrModuleId=[],this.getModuleId("exports"),this.getModuleId("module"),this.getModuleId("require")}getMaxModuleId(){return this._nextId}getModuleId(t){let e=this._strModuleIdToIntModuleId.get(t);return typeof e>"u"&&(e=this._nextId++,this._strModuleIdToIntModuleId.set(t,e),this._intModuleIdToStrModuleId[e]=t),e}getStrModuleId(t){return this._intModuleIdToStrModuleId[t]}}class h{constructor(t){this.id=t}}h.EXPORTS=new h(0),h.MODULE=new h(1),h.REQUIRE=new h(2),d.RegularDependency=h;class n{constructor(t,e,i){this.id=t,this.pluginId=e,this.pluginParam=i}}d.PluginDependency=n;class c{constructor(t,e,i,s,r=0){this._env=t,this._scriptLoader=e,this._loaderAvailableTimestamp=r,this._defineFunc=i,this._requireFunc=s,this._moduleIdProvider=new f,this._config=new d.Configuration(this._env),this._hasDependencyCycle=!1,this._modules2=[],this._knownModules2=[],this._inverseDependencies2=[],this._inversePluginDependencies2=new Map,this._currentAnonymousDefineCall=null,this._recorder=null,this._buildInfoPath=[],this._buildInfoDefineStack=[],this._buildInfoDependencies=[],this._requireFunc.moduleManager=this}reset(){return new c(this._env,this._scriptLoader,this._defineFunc,this._requireFunc,this._loaderAvailableTimestamp)}getGlobalAMDDefineFunc(){return this._defineFunc}getGlobalAMDRequireFunc(){return this._requireFunc}static _findRelevantLocationInStack(t,e){let i=o=>o.replace(/\\/g,"/"),s=i(t),r=e.split(/\n/);for(let o=0;othis._moduleIdProvider.getStrModuleId(g.id))),this._resolve(l)}_normalizeDependency(t,e){if(t==="exports")return h.EXPORTS;if(t==="module")return h.MODULE;if(t==="require")return h.REQUIRE;let i=t.indexOf("!");if(i>=0){let s=e.resolveModule(t.substr(0,i)),r=e.resolveModule(t.substr(i+1)),o=this._moduleIdProvider.getModuleId(s+"!"+r),u=this._moduleIdProvider.getModuleId(s);return new n(o,u,r)}return new h(this._moduleIdProvider.getModuleId(e.resolveModule(t)))}_normalizeDependencies(t,e){let i=[],s=0;for(let r=0,o=t.length;rthis._moduleIdProvider.getStrModuleId(o));const r=d.ensureError(e);return r.phase="loading",r.moduleId=i,r.neededBy=s,r}_onLoadError(t,e){const i=this._createLoadError(t,e);this._modules2[t]||(this._modules2[t]=new v(t,this._moduleIdProvider.getStrModuleId(t),[],()=>{},null,null));let s=[];for(let u=0,l=this._moduleIdProvider.getMaxModuleId();u0;){let u=o.shift(),l=this._modules2[u];l&&(r=l.onDependencyError(i)||r);let g=this._inverseDependencies2[u];if(g)for(let p=0,m=g.length;p0;){let u=r.shift().dependencies;if(u)for(let l=0,g=u.length;lthis._relativeRequire(t,i,s,r);return e.toUrl=i=>this._config.requireToUrl(t.resolveModule(i)),e.getStats=()=>this.getLoaderEvents(),e.hasDependencyCycle=()=>this._hasDependencyCycle,e.config=(i,s=!1)=>{this.configure(i,s)},e.__$__nodeRequire=d.global.nodeRequire,e}_loadModule(t){if(this._modules2[t]||this._knownModules2[t])return;this._knownModules2[t]=!0;let e=this._moduleIdProvider.getStrModuleId(t),i=this._config.moduleIdToPaths(e),s=/^@[^\/]+\/[^\/]+$/;this._env.isNode&&(e.indexOf("/")===-1||s.test(e))&&i.push("node|"+e);let r=-1,o=u=>{if(r++,r>=i.length)this._onLoadError(t,u);else{let l=i[r],g=this.getRecorder();if(this._config.isBuild()&&l==="empty:"){this._buildInfoPath[t]=l,this.defineModule(this._moduleIdProvider.getStrModuleId(t),[],null,null,null),this._onLoad(t);return}g.record(10,l),this._scriptLoader.load(this,l,()=>{this._config.isBuild()&&(this._buildInfoPath[t]=l),g.record(11,l),this._onLoad(t)},p=>{g.record(12,l),o(p)})}};o(null)}_loadPluginDependency(t,e){if(this._modules2[e.id]||this._knownModules2[e.id])return;this._knownModules2[e.id]=!0;let i=s=>{this.defineModule(this._moduleIdProvider.getStrModuleId(e.id),[],s,null,null)};i.error=s=>{this._config.onError(this._createLoadError(e.id,s))},t.load(e.pluginParam,this._createRequire(_.ROOT),i,this._config.getOptionsLiteral())}_resolve(t){let e=t.dependencies;if(e)for(let i=0,s=e.length;ithis._moduleIdProvider.getStrModuleId(l)).join(` => +`)),t.unresolvedDependenciesCount--;continue}if(this._inverseDependencies2[r.id]=this._inverseDependencies2[r.id]||[],this._inverseDependencies2[r.id].push(t.id),r instanceof n){let u=this._modules2[r.pluginId];if(u&&u.isComplete()){this._loadPluginDependency(u.exports,r);continue}let l=this._inversePluginDependencies2.get(r.pluginId);l||(l=[],this._inversePluginDependencies2.set(r.pluginId,l)),l.push(r),this._loadModule(r.pluginId);continue}this._loadModule(r.id)}t.unresolvedDependenciesCount===0&&this._onModuleComplete(t)}_onModuleComplete(t){let e=this.getRecorder();if(t.isComplete())return;let i=t.dependencies,s=[];if(i)for(let l=0,g=i.length;lthis._config.getConfigForModule(t.strId)};continue}if(p===h.REQUIRE){s[l]=this._createRequire(t.moduleIdResolver);continue}let m=this._modules2[p.id];if(m){s[l]=m.exports;continue}s[l]=null}const r=l=>(this._inverseDependencies2[l]||[]).map(g=>this._moduleIdProvider.getStrModuleId(g));t.complete(e,this._config,s,r);let o=this._inverseDependencies2[t.id];if(this._inverseDependencies2[t.id]=null,o)for(let l=0,g=o.length;l"u"&&c())})(AMDLoader||(AMDLoader={})),define("vs/css",["require","exports"],function(d,_){"use strict";Object.defineProperty(_,"__esModule",{value:!0}),_.load=v;function v(a,t,e,i){if(i=i||{},(i["vs/css"]||{}).disabled){e({});return}const r=t.toUrl(a+".css");f(a,r,()=>{e({})},o=>{typeof e.error=="function"&&e.error("Could not find "+r+".")})}function f(a,t,e,i){if(h(a,t)){e();return}n(a,t,e,i)}function h(a,t){const e=window.document.getElementsByTagName("link");for(let i=0,s=e.length;i{t.removeEventListener("load",r),t.removeEventListener("error",o)},r=u=>{s(),e()},o=u=>{s(),i(u)};t.addEventListener("load",r),t.addEventListener("error",o)}}),function(){const d=require.getConfig().baseUrl||"https://main.vscode-cdn.net/insider/336db9ece67f682159078ea1b54212de7636d88a/out";require.config({baseUrl:d,recordStats:!0,paths:{"@microsoft/1ds-core-js":"../node_modules/@microsoft/1ds-core-js/dist/ms.core.min.js","@microsoft/1ds-post-js":"../node_modules/@microsoft/1ds-post-js/dist/ms.post.min.js","@vscode/iconv-lite-umd":"../node_modules/@vscode/iconv-lite-umd/lib/iconv-lite-umd.js","@vscode/tree-sitter-wasm":"../node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter.js","@vscode/vscode-languagedetection":"../node_modules/@vscode/vscode-languagedetection/dist/lib/index.js","@xterm/addon-clipboard":"../node_modules/@xterm/addon-clipboard/lib/addon-clipboard.js","@xterm/addon-image":"../node_modules/@xterm/addon-image/lib/addon-image.js","@xterm/addon-search":"../node_modules/@xterm/addon-search/lib/addon-search.js","@xterm/addon-serialize":"../node_modules/@xterm/addon-serialize/lib/addon-serialize.js","@xterm/addon-unicode11":"../node_modules/@xterm/addon-unicode11/lib/addon-unicode11.js","@xterm/addon-webgl":"../node_modules/@xterm/addon-webgl/lib/addon-webgl.js","@xterm/xterm":"../node_modules/@xterm/xterm/lib/xterm.js",jschardet:"../node_modules/jschardet/dist/jschardet.min.js","tas-client-umd":"../node_modules/tas-client-umd/lib/tas-client-umd.js","vscode-oniguruma":"../node_modules/vscode-oniguruma/release/main.js","vscode-textmate":"../node_modules/vscode-textmate/release/main.js","vscode-regexp-languagedetection":"../node_modules/vscode-regexp-languagedetection/dist/index.js",vsda:"../node_modules/vsda/rust/web/vsda.js","@microsoft/dynamicproto-js":"../node_modules/@microsoft/dynamicproto-js/lib/dist/umd/dynamicproto-js.min.js","@microsoft/applicationinsights-shims":"../node_modules/@microsoft/applicationinsights-shims/dist/umd/applicationinsights-shims.min.js","@microsoft/applicationinsights-core-js":"../node_modules/@microsoft/applicationinsights-core-js/browser/applicationinsights-core-js.min.js"}})}(); + +//# sourceMappingURL=https://main.vscode-cdn.net/sourcemaps/336db9ece67f682159078ea1b54212de7636d88a/core/vs/loader.js.map diff --git a/build/npm/dirs.js b/build/npm/dirs.js index 37bbb830d..bd3325024 100644 --- a/build/npm/dirs.js +++ b/build/npm/dirs.js @@ -53,6 +53,7 @@ const dirs = [ 'test/integration/browser', 'test/monaco', 'test/smoke', + '.vscode/extensions/vscode-selfhost-import-aid', '.vscode/extensions/vscode-selfhost-test-provider', ]; diff --git a/build/npm/gyp/package-lock.json b/build/npm/gyp/package-lock.json new file mode 100644 index 000000000..a20d85c70 --- /dev/null +++ b/build/npm/gyp/package-lock.json @@ -0,0 +1,1321 @@ +{ + "name": "code-oss-dev-build", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "code-oss-dev-build", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "node-gyp": "^10.1.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache": { + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/build/package-lock.json b/build/package-lock.json index e7a1bc01a..4499f7cf5 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -31,7 +31,6 @@ "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", - "@types/mkdirp": "^1.0.1", "@types/mocha": "^9.1.1", "@types/node": "20.x", "@types/pump": "^1.0.1", @@ -54,7 +53,6 @@ "gulp-sort": "^2.0.0", "jsonc-parser": "^2.3.0", "mime": "^1.4.1", - "mkdirp": "^1.0.4", "source-map": "0.6.1", "ternary-stream": "^3.0.0", "through2": "^4.0.2", @@ -133,9 +131,10 @@ } }, "node_modules/@azure/core-http": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.0.tgz", - "integrity": "sha512-BxI2SlGFPPz6J1XyZNIVUf0QZLBKFX+ViFjKOkzqD18J1zOINIQ8JSBKKr+i+v8+MB6LacL6Nn/sP/TE13+s2Q==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.4.tgz", + "integrity": "sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==", + "deprecated": "deprecating as we migrated to core v2", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -151,7 +150,7 @@ "tslib": "^2.2.0", "tunnel": "^0.0.6", "uuid": "^8.3.0", - "xml2js": "^0.4.19" + "xml2js": "^0.5.0" }, "engines": { "node": ">=14.0.0" @@ -455,6 +454,70 @@ "global-agent": "^3.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", @@ -471,6 +534,310 @@ "node": ">=18" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -755,15 +1122,6 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, - "node_modules/@types/mkdirp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-1.0.1.tgz", - "integrity": "sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/mocha": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", @@ -1004,28 +1362,6 @@ "node": ">=10" } }, - "node_modules/@vscode/vsce/node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@vscode/vsce/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -3006,18 +3342,6 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "devOptional": true }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -4226,9 +4550,9 @@ "devOptional": true }, "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "dependencies": { "sax": ">=0.6.0", diff --git a/build/package.json b/build/package.json index 5e637eaeb..7017b9144 100644 --- a/build/package.json +++ b/build/package.json @@ -25,7 +25,6 @@ "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", - "@types/mkdirp": "^1.0.1", "@types/mocha": "^9.1.1", "@types/node": "20.x", "@types/pump": "^1.0.1", @@ -48,7 +47,6 @@ "gulp-sort": "^2.0.0", "jsonc-parser": "^2.3.0", "mime": "^1.4.1", - "mkdirp": "^1.0.4", "source-map": "0.6.1", "ternary-stream": "^3.0.0", "through2": "^4.0.2", diff --git a/cgmanifest.json b/cgmanifest.json index dcb4791c7..d81b79c0e 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -516,11 +516,11 @@ "git": { "name": "nodejs", "repositoryUrl": "https://github.com/nodejs/node", - "commitHash": "a407d1f0b3669cc82c755700f0d500fb27cc39ea" + "commitHash": "1968ef32415607643770efb320d7d4e941baaa25" } }, "isOnlyProductionDependency": true, - "version": "20.15.1" + "version": "20.16.0" }, { "component": { @@ -528,12 +528,12 @@ "git": { "name": "electron", "repositoryUrl": "https://github.com/electron/electron", - "commitHash": "ff3d3e69443c1c8939c9ba2d10d40cb65f3ff278" + "commitHash": "a07a70e8db21718dd76644d99892d3e15e0ed440" } }, "isOnlyProductionDependency": true, "license": "MIT", - "version": "30.4.0" + "version": "30.5.1" }, { "component": { diff --git a/cli/Cargo.toml b/cli/Cargo.toml index b820ffcc5..2907ff3d7 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -81,4 +81,5 @@ codegen-units = 1 [features] default = [] +vsda = [] vscode-encrypt = [] diff --git a/cli/ThirdPartyNotices.txt b/cli/ThirdPartyNotices.txt index 4a58801fa..bd58eb0e4 100644 --- a/cli/ThirdPartyNotices.txt +++ b/cli/ThirdPartyNotices.txt @@ -10707,7 +10707,33 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI zbus 3.15.2 - MIT https://github.com/dbus2/zbus/ -LICENSE-MIT +The MIT License (MIT) + +Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. --------------------------------------------------------- --------------------------------------------------------- @@ -10715,7 +10741,33 @@ LICENSE-MIT zbus_macros 3.15.2 - MIT https://github.com/dbus2/zbus/ -LICENSE-MIT +The MIT License (MIT) + +Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. --------------------------------------------------------- --------------------------------------------------------- @@ -10723,7 +10775,33 @@ LICENSE-MIT zbus_names 2.6.1 - MIT https://github.com/dbus2/zbus/ -LICENSE-MIT +The MIT License (MIT) + +Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. --------------------------------------------------------- --------------------------------------------------------- @@ -10816,7 +10894,33 @@ licences; see files named LICENSE.*.txt for details. zvariant 3.15.2 - MIT https://github.com/dbus2/zbus/ -LICENSE-MIT +The MIT License (MIT) + +Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. --------------------------------------------------------- --------------------------------------------------------- @@ -10824,7 +10928,33 @@ LICENSE-MIT zvariant_derive 3.15.2 - MIT https://github.com/dbus2/zbus/ -LICENSE-MIT +The MIT License (MIT) + +Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. --------------------------------------------------------- --------------------------------------------------------- @@ -10832,5 +10962,31 @@ LICENSE-MIT zvariant_utils 1.0.1 - MIT https://github.com/dbus2/zbus/ -LICENSE-MIT +The MIT License (MIT) + +Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. --------------------------------------------------------- \ No newline at end of file diff --git a/cli/src/auth.rs b/cli/src/auth.rs index 2d9162c54..51942c96c 100644 --- a/cli/src/auth.rs +++ b/cli/src/auth.rs @@ -723,7 +723,7 @@ impl Auth { match &init_code_json.message { Some(m) => self.log.result(m), - None => self.log.result(&format!( + None => self.log.result(format!( "To grant access to the server, please log into {} and use code {}", init_code_json.verification_uri, init_code_json.user_code )), diff --git a/cli/src/commands/args.rs b/cli/src/commands/args.rs index 101f1eac2..7a8cf1f4f 100644 --- a/cli/src/commands/args.rs +++ b/cli/src/commands/args.rs @@ -226,6 +226,9 @@ pub struct ServeWebArgs { #[derive(Args, Debug, Clone)] pub struct CommandShellArgs { + #[clap(flatten)] + pub server_args: BaseServerArgs, + /// Listen on a socket instead of stdin/stdout. #[clap(long)] pub on_socket: bool, @@ -638,6 +641,9 @@ pub struct ExistingTunnelArgs { #[derive(Args, Debug, Clone, Default)] pub struct TunnelServeArgs { + #[clap(flatten)] + pub server_args: BaseServerArgs, + /// Optional details to connect to an existing tunnel #[clap(flatten, next_help_heading = Some("ADVANCED OPTIONS"))] pub tunnel: ExistingTunnelArgs, @@ -661,7 +667,10 @@ pub struct TunnelServeArgs { /// If set, the user accepts the server license terms and the server will be started without a user prompt. #[clap(long)] pub accept_server_license_terms: bool, +} +#[derive(Args, Debug, Clone, Default)] +pub struct BaseServerArgs { /// Requests that extensions be preloaded and installed on connecting servers. #[clap(long)] pub install_extension: Vec, @@ -675,8 +684,8 @@ pub struct TunnelServeArgs { pub extensions_dir: Option, } -impl TunnelServeArgs { - pub fn apply_to_server_args(&self, csa: &mut CodeServerArgs) { +impl BaseServerArgs { + pub fn apply_to(&self, csa: &mut CodeServerArgs) { csa.install_extensions .extend_from_slice(&self.install_extension); diff --git a/cli/src/commands/serve_web.rs b/cli/src/commands/serve_web.rs index d8d2a49bb..4acb9a18c 100644 --- a/cli/src/commands/serve_web.rs +++ b/cli/src/commands/serve_web.rs @@ -15,7 +15,7 @@ use std::time::{Duration, Instant}; use hyper::service::{make_service_fn, service_fn}; use hyper::{Body, Request, Response, Server}; use tokio::io::{AsyncBufReadExt, BufReader}; -use tokio::pin; +use tokio::{pin, time}; use crate::async_pipe::{ get_socket_name, get_socket_rw_stream, listen_socket_rw_stream, AsyncPipe, @@ -50,7 +50,7 @@ const SERVER_IDLE_TIMEOUT_SECS: u64 = 60 * 60; /// (should be large enough to basically never happen) const SERVER_ACTIVE_TIMEOUT_SECS: u64 = SERVER_IDLE_TIMEOUT_SECS * 24 * 30 * 12; /// How long to cache the "latest" version we get from the update service. -const RELEASE_CACHE_SECS: u64 = 60 * 60; +const RELEASE_CHECK_INTERVAL: u64 = 60 * 60; /// Number of bytes for the secret keys. See workbench.ts for their usage. const SECRET_KEY_BYTES: usize = 32; @@ -86,7 +86,11 @@ pub async fn serve_web(ctx: CommandContext, mut args: ServeWebArgs) -> Result = ConnectionManager::new(&ctx, platform, args.clone()); + let update_check_interval = 3600; + cm.clone() + .start_update_checker(Duration::from_secs(update_check_interval)); + let key = get_server_key_half(&ctx.paths); let make_svc = move || { let ctx = HandleContext { @@ -175,7 +179,7 @@ async fn handle_proxied(ctx: &HandleContext, req: Request) -> Response r, Err(e) => { error!(ctx.log, "error getting latest version: {}", e); @@ -538,21 +542,67 @@ impl ConnectionManager { pub fn new(ctx: &CommandContext, platform: Platform, args: ServeWebArgs) -> Arc { let base_path = normalize_base_path(args.server_base_path.as_deref().unwrap_or_default()); + let cache = DownloadCache::new(ctx.paths.web_server_storage()); + let target_kind = TargetKind::Web; + + let quality = VSCODE_CLI_QUALITY.map_or(Quality::Stable, |q| match Quality::try_from(q) { + Ok(q) => q, + Err(_) => Quality::Stable, + }); + + let latest_version = tokio::sync::Mutex::new(cache.get().first().map(|latest_commit| { + ( + Instant::now() - Duration::from_secs(RELEASE_CHECK_INTERVAL), + Release { + name: String::from("0.0.0"), // Version information not stored on cache + commit: latest_commit.clone(), + platform, + target: target_kind, + quality, + }, + ) + })); + Arc::new(Self { platform, args, base_path, log: ctx.log.clone(), - cache: DownloadCache::new(ctx.paths.web_server_storage()), + cache, update_service: UpdateService::new( ctx.log.clone(), Arc::new(ReqwestSimpleHttp::with_client(ctx.http.clone())), ), state: ConnectionStateMap::default(), - latest_version: tokio::sync::Mutex::default(), + latest_version, }) } + // spawns a task that checks for updates every n seconds duration + pub fn start_update_checker(self: Arc, duration: Duration) { + tokio::spawn(async move { + let mut interval = time::interval(duration); + loop { + interval.tick().await; + + if let Err(e) = self.get_latest_release().await { + warning!(self.log, "error getting latest version: {}", e); + } + } + }); + } + + // Returns the latest release from the cache, if one exists. + pub async fn get_release_from_cache(&self) -> Result { + let latest = self.latest_version.lock().await; + if let Some((_, release)) = &*latest { + return Ok(release.clone()); + } + + drop(latest); + self.get_latest_release().await + } + /// Gets a connection to a server version pub async fn get_connection( &self, @@ -571,11 +621,7 @@ impl ConnectionManager { pub async fn get_latest_release(&self) -> Result { let mut latest = self.latest_version.lock().await; let now = Instant::now(); - if let Some((checked_at, release)) = &*latest { - if checked_at.elapsed() < Duration::from_secs(RELEASE_CACHE_SECS) { - return Ok(release.clone()); - } - } + let target_kind = TargetKind::Web; let quality = VSCODE_CLI_QUALITY .ok_or_else(|| CodeError::UpdatesNotConfigured("no configured quality")) @@ -585,13 +631,14 @@ impl ConnectionManager { let release = self .update_service - .get_latest_commit(self.platform, TargetKind::Web, quality) + .get_latest_commit(self.platform, target_kind, quality) .await .map_err(|e| CodeError::UpdateCheckFailed(e.to_string())); // If the update service is unavailable and we have stale data, use that - if let (Err(e), Some((_, previous))) = (&release, &*latest) { + if let (Err(e), Some((_, previous))) = (&release, latest.clone()) { warning!(self.log, "error getting latest release, using stale: {}", e); + *latest = Some((now, previous.clone())); return Ok(previous.clone()); } diff --git a/cli/src/commands/tunnels.rs b/cli/src/commands/tunnels.rs index 2d0014bca..dc4206e83 100644 --- a/cli/src/commands/tunnels.rs +++ b/cli/src/commands/tunnels.rs @@ -155,6 +155,8 @@ pub async fn command_shell(ctx: CommandContext, args: CommandShellArgs) -> Resul code_server_args: (&ctx.args).into(), }; + args.server_args.apply_to(&mut params.code_server_args); + let mut listener: Box = match (args.on_port.first(), &args.on_host, args.on_socket) { (_, _, true) => { @@ -440,7 +442,7 @@ pub async fn serve(ctx: CommandContext, gateway_args: TunnelServeArgs) -> Result legal::require_consent(&paths, gateway_args.accept_server_license_terms)?; let mut csa = (&args).into(); - gateway_args.apply_to_server_args(&mut csa); + gateway_args.server_args.apply_to(&mut csa); let result = serve_with_csa(paths, log, gateway_args, csa, TUNNEL_CLI_LOCK_NAME).await; drop(no_sleep); @@ -587,7 +589,7 @@ async fn serve_with_csa( Ok(SingletonConnection::Client(stream)) => { debug!(log, "starting as client to singleton"); if gateway_args.name.is_some() - || !gateway_args.install_extension.is_empty() + || !gateway_args.server_args.install_extension.is_empty() || gateway_args.tunnel.tunnel_id.is_some() { warning!( diff --git a/cli/src/download_cache.rs b/cli/src/download_cache.rs index d3f05d223..cd02b02d7 100644 --- a/cli/src/download_cache.rs +++ b/cli/src/download_cache.rs @@ -20,6 +20,7 @@ const KEEP_LRU: usize = 5; const STAGING_SUFFIX: &str = ".staging"; const RENAME_ATTEMPTS: u32 = 20; const RENAME_DELAY: std::time::Duration = std::time::Duration::from_millis(200); +const PERSISTED_STATE_FILE_NAME: &str = "lru.json"; #[derive(Clone)] pub struct DownloadCache { @@ -30,11 +31,16 @@ pub struct DownloadCache { impl DownloadCache { pub fn new(path: PathBuf) -> DownloadCache { DownloadCache { - state: PersistedState::new(path.join("lru.json")), + state: PersistedState::new(path.join(PERSISTED_STATE_FILE_NAME)), path, } } + /// Gets the value stored on the state + pub fn get(&self) -> Vec { + self.state.load() + } + /// Gets the download cache path. Names of cache entries can be formed by /// joining them to the path. pub fn path(&self) -> &Path { diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs index 0579f8ef0..465f6e242 100644 --- a/cli/src/tunnels/code_server.rs +++ b/cli/src/tunnels/code_server.rs @@ -674,7 +674,7 @@ where let write_line = |line: &str| -> std::io::Result<()> { if let Some(mut f) = log_file.as_ref() { f.write_all(line.as_bytes())?; - f.write_all(&[b'\n'])?; + f.write_all(b"\n")?; } if write_directly { println!("{}", line); diff --git a/extensions/configuration-editing/.vscodeignore b/extensions/configuration-editing/.vscodeignore index ba1754c45..679a6d685 100644 --- a/extensions/configuration-editing/.vscodeignore +++ b/extensions/configuration-editing/.vscodeignore @@ -4,7 +4,6 @@ tsconfig.json out/** extension.webpack.config.js extension-browser.webpack.config.js -yarn.lock package-lock.json build/** schemas/devContainer.codespaces.schema.json diff --git a/extensions/css-language-features/.vscodeignore b/extensions/css-language-features/.vscodeignore index 73d4b9ba3..f6411e76f 100644 --- a/extensions/css-language-features/.vscodeignore +++ b/extensions/css-language-features/.vscodeignore @@ -11,10 +11,8 @@ server/tsconfig.json server/test/** server/bin/** server/build/** -server/yarn.lock server/package-lock.json server/.npmignore -yarn.lock package-lock.json server/extension.webpack.config.js extension.webpack.config.js diff --git a/extensions/dart/cgmanifest.json b/extensions/dart/cgmanifest.json index df4e4f0aa..da493cafa 100644 --- a/extensions/dart/cgmanifest.json +++ b/extensions/dart/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "dart-lang/dart-syntax-highlight", "repositoryUrl": "https://github.com/dart-lang/dart-syntax-highlight", - "commitHash": "bb8f7eebf5a1028e70dbebcf35cfef738dddc7fe" + "commitHash": "e8b053f9834cb44db0f49ac4a4567177bd943dbf" } }, "licenseDetail": [ diff --git a/extensions/dart/syntaxes/dart.tmLanguage.json b/extensions/dart/syntaxes/dart.tmLanguage.json index 5a4a9393b..32ea3f5b0 100644 --- a/extensions/dart/syntaxes/dart.tmLanguage.json +++ b/extensions/dart/syntaxes/dart.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/dart-lang/dart-syntax-highlight/commit/bb8f7eebf5a1028e70dbebcf35cfef738dddc7fe", + "version": "https://github.com/dart-lang/dart-syntax-highlight/commit/e8b053f9834cb44db0f49ac4a4567177bd943dbf", "name": "Dart", "scopeName": "source.dart", "patterns": [ @@ -212,7 +212,7 @@ }, { "name": "constant.numeric.dart", - "match": "(?\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?", + "begin": "\\b(let mutable|static let mutable|static let|let inline|let|and|member val|member inline|static member inline|static member val|static member|default|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?", "end": "\\s*((with\\b)|(=|\\n+=|(?<=\\=)))", "beginCaptures": { "1": { @@ -1133,7 +1133,7 @@ }, { "name": "keyword.symbol.fsharp", - "match": "(&&&|\\|\\|\\||\\^\\^\\^|~~~|~\\+|~\\-|<<<|>>>|\\|>|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|&|%|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)" + "match": "[.?]*(&&&|\\|\\|\\||\\^\\^\\^|~~~|~\\+|~\\-|<<<|>>>|\\|>|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|&|%|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)[.?]*" } ] }, diff --git a/extensions/git/.vscodeignore b/extensions/git/.vscodeignore index 61b7b9eae..1e6130d5c 100644 --- a/extensions/git/.vscodeignore +++ b/extensions/git/.vscodeignore @@ -4,5 +4,4 @@ out/** tsconfig.json build/** extension.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/git/package.json b/extensions/git/package.json index 6bf280b95..57e332a8d 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -16,8 +16,6 @@ "contribMergeEditorMenus", "contribMultiDiffEditorMenus", "contribDiffEditorGutterToolBarMenus", - "contribSourceControlHistoryItemChangesMenu", - "contribSourceControlHistoryItemGroupMenu", "contribSourceControlHistoryItemMenu", "contribSourceControlHistoryTitleMenu", "contribSourceControlInputBoxMenu", @@ -454,6 +452,12 @@ "category": "Git", "enablement": "!operationInProgress" }, + { + "command": "git.checkoutRefDetached", + "title": "%command.checkoutRefDetached%", + "category": "Git", + "enablement": "!operationInProgress" + }, { "command": "git.branch", "title": "%command.branch%", @@ -529,6 +533,7 @@ { "command": "git.fetchAll", "title": "%command.fetchAll%", + "icon": "$(git-fetch)", "category": "Git", "enablement": "!operationInProgress" }, @@ -619,6 +624,12 @@ "category": "Git", "enablement": "!operationInProgress" }, + { + "command": "git.cherryPickRef", + "title": "%command.cherryPickRef%", + "category": "Git", + "enablement": "!operationInProgress" + }, { "command": "git.addRemote", "title": "%command.addRemote%", @@ -1447,6 +1458,14 @@ { "command": "git.copyCommitMessage", "when": "false" + }, + { + "command": "git.checkoutRefDetached", + "when": "false" + }, + { + "command": "git.cherryPickRef", + "when": "false" } ], "scm/title": [ @@ -1938,154 +1957,41 @@ ], "scm/history/title": [ { - "command": "git.fetchRef", - "group": "navigation@1", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote" - }, - { - "command": "git.pullRef", - "group": "navigation@2", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote" - }, - { - "command": "git.pushRef", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote", - "group": "navigation@3" - }, - { - "command": "git.publish", - "when": "scmProvider == git && !scmHistoryItemGroupHasRemote", - "group": "navigation@3" + "command": "git.fetchAll", + "group": "navigation@999", + "when": "scmProvider == git" } ], - "scm/historyItemChanges/title": [ + "scm/historyItem/context": [ { - "command": "git.fetchRef", - "group": "navigation@1", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote" + "command": "git.createTag", + "when": "scmProvider == git", + "group": "1_create@1" }, { - "command": "git.pullRef", - "group": "navigation@2", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote" + "command": "git.branch", + "when": "scmProvider == git", + "group": "1_create@2" }, { - "command": "git.pushRef", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote", - "group": "navigation@3" + "command": "git.cherryPickRef", + "when": "scmProvider == git", + "group": "2_modify@1" }, { - "command": "git.publish", - "when": "scmProvider == git && !scmHistoryItemGroupHasRemote", - "group": "navigation@3" - } - ], - "scm/historyItem/context": [ + "command": "git.checkoutRefDetached", + "when": "scmProvider == git", + "group": "2_modify@2" + }, { "command": "git.copyCommitId", "when": "scmProvider == git && !listMultiSelection", - "group": "1_copy@1" + "group": "9_copy@1" }, { "command": "git.copyCommitMessage", "when": "scmProvider == git && !listMultiSelection", - "group": "1_copy@2" - } - ], - "scm/incomingChanges": [ - { - "command": "git.fetchRef", - "group": "navigation", - "when": "scmProvider == git" - }, - { - "command": "git.pullRef", - "group": "navigation", - "when": "scmProvider == git" - } - ], - "scm/incomingChanges/context": [ - { - "command": "git.fetchRef", - "group": "1_modification@1", - "when": "scmProvider == git" - }, - { - "command": "git.pullRef", - "group": "1_modification@2", - "when": "scmProvider == git" - } - ], - "scm/incomingChanges/allChanges/context": [ - { - "command": "git.viewAllChanges", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "inline@1" - }, - { - "command": "git.viewAllChanges", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "1_view@1" - } - ], - "scm/incomingChanges/historyItem/context": [ - { - "command": "git.viewCommit", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "inline@1" - }, - { - "command": "git.viewCommit", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "1_view@1" - } - ], - "scm/outgoingChanges": [ - { - "command": "git.pushRef", - "group": "navigation", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote" - }, - { - "command": "git.publish", - "group": "navigation", - "when": "scmProvider == git && !scmHistoryItemGroupHasRemote" - } - ], - "scm/outgoingChanges/context": [ - { - "command": "git.pushRef", - "when": "scmProvider == git && scmHistoryItemGroupHasRemote", - "group": "1_modification@1" - }, - { - "command": "git.publish", - "when": "scmProvider == git && !scmHistoryItemGroupHasRemote", - "group": "1_modification@1" - } - ], - "scm/outgoingChanges/allChanges/context": [ - { - "command": "git.viewAllChanges", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "inline@1" - }, - { - "command": "git.viewAllChanges", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "1_view@1" - } - ], - "scm/outgoingChanges/historyItem/context": [ - { - "command": "git.viewCommit", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "inline@1" - }, - { - "command": "git.viewCommit", - "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled", - "group": "1_view@1" + "group": "9_copy@2" } ], "editor/title": [ diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index c2f7c3d6c..bad361bce 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -62,15 +62,17 @@ "command.undoCommit": "Undo Last Commit", "command.checkout": "Checkout to...", "command.checkoutDetached": "Checkout to (Detached)...", + "command.checkoutRefDetached": "Checkout (Detached)", "command.branch": "Create Branch...", "command.branchFrom": "Create Branch From...", "command.deleteBranch": "Delete Branch...", "command.renameBranch": "Rename Branch...", "command.cherryPick": "Cherry Pick...", + "command.cherryPickRef": "Cherry Pick", "command.merge": "Merge...", "command.mergeAbort": "Abort Merge", "command.rebase": "Rebase Branch...", - "command.createTag": "Create Tag", + "command.createTag": "Create Tag...", "command.deleteTag": "Delete Tag...", "command.deleteRemoteTag": "Delete Remote Tag...", "command.fetch": "Fetch", diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts index 332c328b2..63139af24 100644 --- a/extensions/git/src/api/api1.ts +++ b/extensions/git/src/api/api1.ts @@ -201,8 +201,8 @@ export class ApiRepository implements Repository { return this.repository.getMergeBase(ref1, ref2); } - tag(name: string, upstream: string): Promise { - return this.repository.tag(name, upstream); + tag(name: string, message: string, ref?: string | undefined): Promise { + return this.repository.tag({ name, message, ref }); } deleteTag(name: string): Promise { diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts index 17dd192ed..3c5aad1c4 100644 --- a/extensions/git/src/api/git.d.ts +++ b/extensions/git/src/api/git.d.ts @@ -184,7 +184,7 @@ export interface InitOptions { export interface RefQuery { readonly contains?: string; readonly count?: number; - readonly pattern?: string; + readonly pattern?: string | string[]; readonly sort?: 'alphabetically' | 'committerdate'; } diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index cb13cca65..38c1db541 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -5,7 +5,7 @@ import * as os from 'os'; import * as path from 'path'; -import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage, Tab, TabInputNotebook, QuickInputButtonLocation } from 'vscode'; +import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage, Tab, TabInputNotebook, QuickInputButtonLocation, SourceControlHistoryItemRef } from 'vscode'; import TelemetryReporter from '@vscode/extension-telemetry'; import { uniqueNamesGenerator, adjectives, animals, colors, NumberDictionary } from '@joaomoreno/unique-names-generator'; import { ForcePushMode, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourcePublisher, Remote } from './api/git'; @@ -525,9 +525,15 @@ class CheckoutItemsProcessor extends RefItemsProcessor { // Button(s) if (item.refRemote) { const matchingRemote = this.repository.remotes.find((remote) => remote.name === item.refRemote); - const remoteUrl = matchingRemote?.pushUrl ?? matchingRemote?.fetchUrl; - if (remoteUrl) { - item.buttons = this.buttons.get(item.refRemote); + const buttons = []; + if (matchingRemote?.pushUrl) { + buttons.push(...this.buttons.get(matchingRemote.pushUrl) ?? []); + } + if (matchingRemote?.fetchUrl && matchingRemote.fetchUrl !== matchingRemote.pushUrl) { + buttons.push(...this.buttons.get(matchingRemote.fetchUrl) ?? []); + } + if (buttons.length) { + item.buttons = buttons; } } else { item.buttons = this.defaultButtons; @@ -2495,6 +2501,14 @@ export class CommandCenter { return this._checkout(repository, { detached: true, treeish }); } + @command('git.checkoutRefDetached', { repository: true }) + async checkoutRefDetached(repository: Repository, historyItem?: SourceControlHistoryItemRef): Promise { + if (!historyItem) { + return false; + } + return this._checkout(repository, { detached: true, treeish: historyItem.id }); + } + private async _checkout(repository: Repository, opts?: { detached?: boolean; treeish?: string }): Promise { if (typeof opts?.treeish === 'string') { await repository.checkout(opts?.treeish, opts); @@ -2604,8 +2618,8 @@ export class CommandCenter { } @command('git.branch', { repository: true }) - async branch(repository: Repository): Promise { - await this._branch(repository); + async branch(repository: Repository, historyItem?: SourceControlHistoryItem): Promise { + await this._branch(repository, undefined, false, historyItem?.id); } @command('git.branchFrom', { repository: true }) @@ -2732,8 +2746,8 @@ export class CommandCenter { return sanitizeBranchName(branchName || '', branchWhitespaceChar); } - private async _branch(repository: Repository, defaultName?: string, from = false): Promise { - let target = 'HEAD'; + private async _branch(repository: Repository, defaultName?: string, from = false, target?: string): Promise { + target = target ?? 'HEAD'; if (from) { const getRefPicks = async () => { @@ -2901,7 +2915,7 @@ export class CommandCenter { } @command('git.createTag', { repository: true }) - async createTag(repository: Repository): Promise { + async createTag(repository: Repository, historyItem?: SourceControlHistoryItem): Promise { const inputTagName = await window.showInputBox({ placeHolder: l10n.t('Tag name'), prompt: l10n.t('Please provide a tag name'), @@ -2919,7 +2933,7 @@ export class CommandCenter { }); const name = inputTagName.replace(/^\.|\/\.|\.\.|~|\^|:|\/$|\.lock$|\.lock\/|\\|\*|\s|^\s*$|\.$/g, '-'); - await repository.tag(name, inputMessage); + await repository.tag({ name, message: inputMessage, ref: historyItem?.id }); } @command('git.deleteTag', { repository: true }) @@ -3053,7 +3067,7 @@ export class CommandCenter { @command('git.fetchRef', { repository: true }) async fetchRef(repository: Repository, ref?: string): Promise { - ref = ref ?? repository?.historyProvider.currentHistoryItemGroup?.remote?.id; + ref = ref ?? repository?.historyProvider.currentHistoryItemRemoteRef?.id; if (!repository || !ref) { return; } @@ -3126,7 +3140,7 @@ export class CommandCenter { @command('git.pullRef', { repository: true }) async pullRef(repository: Repository, ref?: string): Promise { - ref = ref ?? repository?.historyProvider.currentHistoryItemGroup?.remote?.id; + ref = ref ?? repository?.historyProvider.currentHistoryItemRemoteRef?.id; if (!repository || !ref) { return; } @@ -3296,6 +3310,14 @@ export class CommandCenter { await repository.cherryPick(hash); } + @command('git.cherryPickRef', { repository: true }) + async cherryPickRef(repository: Repository, historyItem?: SourceControlHistoryItem): Promise { + if (!historyItem) { + return; + } + await repository.cherryPick(historyItem.id); + } + @command('git.pushTo', { repository: true }) async pushTo(repository: Repository, remote?: string, refspec?: string, setUpstream?: boolean): Promise { await this._push(repository, { pushType: PushType.PushTo, pushTo: { remote: remote, refspec: refspec, setUpstream: setUpstream } }); diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts index ace68c225..548f3aa2a 100644 --- a/extensions/git/src/decorationProvider.ts +++ b/extensions/git/src/decorationProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { window, workspace, Uri, Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, ThemeColor, l10n } from 'vscode'; +import { window, workspace, Uri, Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, ThemeColor, l10n, SourceControlHistoryItemRef } from 'vscode'; import * as path from 'path'; import { Repository, GitResourceGroup } from './repository'; import { Model } from './model'; @@ -11,6 +11,16 @@ import { debounce } from './decorators'; import { filterEvent, dispose, anyEvent, fireEvent, PromiseSource, combinedDisposable, runAndSubscribeEvent } from './util'; import { Change, GitErrorCodes, Status } from './api/git'; +function equalSourceControlHistoryItemRefs(ref1?: SourceControlHistoryItemRef, ref2?: SourceControlHistoryItemRef): boolean { + if (ref1 === ref2) { + return true; + } + + return ref1?.id === ref2?.id && + ref1?.name === ref2?.name && + ref1?.revision === ref2?.revision; +} + class GitIgnoreDecorationProvider implements FileDecorationProvider { private static Decoration: FileDecoration = { color: new ThemeColor('gitDecoration.ignoredResourceForeground') }; @@ -158,22 +168,37 @@ class GitIncomingChangesFileDecorationProvider implements FileDecorationProvider private readonly _onDidChangeDecorations = new EventEmitter(); readonly onDidChangeFileDecorations: Event = this._onDidChangeDecorations.event; - private decorations = new Map(); + private _currentHistoryItemRef: SourceControlHistoryItemRef | undefined; + private _currentHistoryItemRemoteRef: SourceControlHistoryItemRef | undefined; + + private _decorations = new Map(); private readonly disposables: Disposable[] = []; constructor(private readonly repository: Repository) { this.disposables.push( window.registerFileDecorationProvider(this), - runAndSubscribeEvent(repository.historyProvider.onDidChangeCurrentHistoryItemGroup, () => this.onDidChangeCurrentHistoryItemGroup()) + runAndSubscribeEvent(repository.historyProvider.onDidChangeCurrentHistoryItemRefs, () => this.onDidChangeCurrentHistoryItemRefs()) ); } - private async onDidChangeCurrentHistoryItemGroup(): Promise { - const newDecorations = new Map(); - await this.collectIncomingChangesFileDecorations(newDecorations); - const uris = new Set([...this.decorations.keys()].concat([...newDecorations.keys()])); + private async onDidChangeCurrentHistoryItemRefs(): Promise { + const historyProvider = this.repository.historyProvider; + const currentHistoryItemRef = historyProvider.currentHistoryItemRef; + const currentHistoryItemRemoteRef = historyProvider.currentHistoryItemRemoteRef; + + if (equalSourceControlHistoryItemRefs(this._currentHistoryItemRef, currentHistoryItemRef) && + equalSourceControlHistoryItemRefs(this._currentHistoryItemRemoteRef, currentHistoryItemRemoteRef)) { + return; + } + + const decorations = new Map(); + await this.collectIncomingChangesFileDecorations(decorations); + const uris = new Set([...this._decorations.keys()].concat([...decorations.keys()])); + + this._decorations = decorations; + this._currentHistoryItemRef = currentHistoryItemRef; + this._currentHistoryItemRemoteRef = currentHistoryItemRemoteRef; - this.decorations = newDecorations; this._onDidChangeDecorations.fire([...uris.values()].map(value => Uri.parse(value, true))); } @@ -218,18 +243,19 @@ class GitIncomingChangesFileDecorationProvider implements FileDecorationProvider private async getIncomingChanges(): Promise { try { const historyProvider = this.repository.historyProvider; - const currentHistoryItemGroup = historyProvider.currentHistoryItemGroup; + const currentHistoryItemRef = historyProvider.currentHistoryItemRef; + const currentHistoryItemRemoteRef = historyProvider.currentHistoryItemRemoteRef; - if (!currentHistoryItemGroup?.remote) { + if (!currentHistoryItemRef || !currentHistoryItemRemoteRef) { return []; } - const ancestor = await historyProvider.resolveHistoryItemGroupCommonAncestor(currentHistoryItemGroup.id, currentHistoryItemGroup.remote.id); + const ancestor = await historyProvider.resolveHistoryItemRefsCommonAncestor([currentHistoryItemRef.id, currentHistoryItemRemoteRef.id]); if (!ancestor) { return []; } - const changes = await this.repository.diffBetween(ancestor.id, currentHistoryItemGroup.remote.id); + const changes = await this.repository.diffBetween(ancestor, currentHistoryItemRemoteRef.id); return changes; } catch (err) { return []; @@ -237,7 +263,7 @@ class GitIncomingChangesFileDecorationProvider implements FileDecorationProvider } provideFileDecoration(uri: Uri): FileDecoration | undefined { - return this.decorations.get(uri.toString()); + return this._decorations.get(uri.toString()); } dispose(): void { diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index 9940ae535..dea097334 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -491,7 +491,6 @@ export class Git { const repoUri = Uri.file(repositoryRootPath); const pathUri = Uri.file(pathInsidePossibleRepository); if (repoUri.authority.length !== 0 && pathUri.authority.length === 0) { - // eslint-disable-next-line local/code-no-look-behind-regex const match = /(?<=^\/?)([a-zA-Z])(?=:\/)/.exec(pathUri.path); if (match !== null) { const [, letter] = match; @@ -1138,6 +1137,7 @@ export class Repository { } async log(options?: LogOptions): Promise { + const spawnOptions: SpawnOptions = {}; const args = ['log', `--format=${COMMIT_FORMAT}`, '-z']; if (options?.shortStats) { @@ -1177,14 +1177,19 @@ export class Repository { if (options?.refNames) { args.push('--topo-order'); args.push('--decorate=full'); - args.push(...options.refNames); + + // In order to avoid hitting the command line limit due to large number of reference + // names (can happen when the `all` filter is used in the Source Control Graph view), + // we are passing the reference names via stdin. + spawnOptions.input = options.refNames.join('\n'); + args.push('--stdin'); } if (options?.path) { args.push('--', options.path); } - const result = await this.exec(args); + const result = await this.exec(args, spawnOptions); if (result.exitCode) { // An empty repo return []; @@ -1805,13 +1810,17 @@ export class Repository { await this.exec(['merge', '--abort']); } - async tag(name: string, message?: string): Promise { + async tag(options: { name: string; message?: string; ref?: string }): Promise { let args = ['tag']; - if (message) { - args = [...args, '-a', name, '-m', message]; + if (options.message) { + args = [...args, '-a', options.name, '-m', options.message]; } else { - args = [...args, name]; + args = [...args, options.name]; + } + + if (options.ref) { + args.push(options.ref); } await this.exec(args); @@ -2422,7 +2431,10 @@ export class Repository { args.push('--format', '%(refname) %(objectname) %(*objectname)'); if (query.pattern) { - args.push(query.pattern.startsWith('refs/') ? query.pattern : `refs/${query.pattern}`); + const patterns = Array.isArray(query.pattern) ? query.pattern : [query.pattern]; + for (const pattern of patterns) { + args.push(pattern.startsWith('refs/') ? pattern : `refs/${pattern}`); + } } if (query.contains) { @@ -2647,7 +2659,7 @@ export class Repository { async getDefaultBranch(): Promise { const result = await this.exec(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD']); - if (!result.stdout) { + if (!result.stdout || result.stderr) { throw new Error('No default branch'); } @@ -2714,24 +2726,6 @@ export class Repository { return commits[0]; } - async getCommitFiles(ref: string): Promise { - const result = await this.exec(['diff-tree', '--no-commit-id', '--name-only', '-r', ref]); - return result.stdout.split('\n').filter(l => !!l); - } - - async getCommitCount(range: string): Promise<{ ahead: number; behind: number }> { - const args = ['rev-list', '--count', '--left-right', range]; - - if (isWindows) { - args.splice(0, 0, '-c', 'core.longpaths=true'); - } - - const result = await this.exec(args); - const [ahead, behind] = result.stdout.trim().split('\t'); - - return { ahead: Number(ahead) || 0, behind: Number(behind) || 0 }; - } - async revParse(ref: string): Promise { try { const result = await fs.readFile(path.join(this.dotGit.path, ref), 'utf8'); diff --git a/extensions/git/src/historyProvider.ts b/extensions/git/src/historyProvider.ts index d19311b30..e652ca6dd 100644 --- a/extensions/git/src/historyProvider.ts +++ b/extensions/git/src/historyProvider.ts @@ -4,141 +4,207 @@ *--------------------------------------------------------------------------------------------*/ -import { Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryItemGroup, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon, Uri, window, LogOutputChannel, SourceControlHistoryItemLabel } from 'vscode'; +import { Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon, Uri, window, LogOutputChannel, SourceControlHistoryItemRef, l10n, SourceControlHistoryItemRefsChangeEvent } from 'vscode'; import { Repository, Resource } from './repository'; -import { IDisposable, dispose } from './util'; +import { IDisposable, deltaHistoryItemRefs, dispose, filterEvent } from './util'; import { toGitUri } from './uri'; -import { Branch, LogOptions, RefType, UpstreamRef } from './api/git'; +import { Branch, LogOptions, Ref, RefType } from './api/git'; import { emojify, ensureEmojis } from './emoji'; import { Commit } from './git'; +import { OperationKind, OperationResult } from './operation'; -export class GitHistoryProvider implements SourceControlHistoryProvider, FileDecorationProvider, IDisposable { - - private readonly _onDidChangeCurrentHistoryItemGroup = new EventEmitter(); - readonly onDidChangeCurrentHistoryItemGroup: Event = this._onDidChangeCurrentHistoryItemGroup.event; +function toSourceControlHistoryItemRef(ref: Ref): SourceControlHistoryItemRef { + switch (ref.type) { + case RefType.RemoteHead: + return { + id: `refs/remotes/${ref.name}`, + name: ref.name ?? '', + description: ref.commit ? l10n.t('Remote branch at {0}', ref.commit.substring(0, 8)) : undefined, + revision: ref.commit, + icon: new ThemeIcon('cloud'), + category: l10n.t('remote branches') + }; + case RefType.Tag: + return { + id: `refs/tags/${ref.name}`, + name: ref.name ?? '', + description: ref.commit ? l10n.t('Tag at {0}', ref.commit.substring(0, 8)) : undefined, + revision: ref.commit, + icon: new ThemeIcon('tag'), + category: l10n.t('tags') + }; + default: + return { + id: `refs/heads/${ref.name}`, + name: ref.name ?? '', + description: ref.commit ? ref.commit.substring(0, 8) : undefined, + revision: ref.commit, + icon: new ThemeIcon('git-branch'), + category: l10n.t('branches') + }; + } +} +export class GitHistoryProvider implements SourceControlHistoryProvider, FileDecorationProvider, IDisposable { private readonly _onDidChangeDecorations = new EventEmitter(); readonly onDidChangeFileDecorations: Event = this._onDidChangeDecorations.event; - private _HEAD: Branch | undefined; - private _HEADMergeBase: Branch | undefined; + private _currentHistoryItemRef: SourceControlHistoryItemRef | undefined; + get currentHistoryItemRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemRef; } - private _currentHistoryItemGroup: SourceControlHistoryItemGroup | undefined; - get currentHistoryItemGroup(): SourceControlHistoryItemGroup | undefined { return this._currentHistoryItemGroup; } - set currentHistoryItemGroup(value: SourceControlHistoryItemGroup | undefined) { - this._currentHistoryItemGroup = value; - this._onDidChangeCurrentHistoryItemGroup.fire(); - } + private _currentHistoryItemRemoteRef: SourceControlHistoryItemRef | undefined; + get currentHistoryItemRemoteRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemRemoteRef; } + + private _currentHistoryItemBaseRef: SourceControlHistoryItemRef | undefined; + get currentHistoryItemBaseRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemBaseRef; } + + private readonly _onDidChangeCurrentHistoryItemRefs = new EventEmitter(); + readonly onDidChangeCurrentHistoryItemRefs: Event = this._onDidChangeCurrentHistoryItemRefs.event; + + private readonly _onDidChangeHistoryItemRefs = new EventEmitter(); + readonly onDidChangeHistoryItemRefs: Event = this._onDidChangeHistoryItemRefs.event; + + private _HEAD: Branch | undefined; + private historyItemRefs: SourceControlHistoryItemRef[] = []; private historyItemDecorations = new Map(); - private historyItemLabels = new Map([ - ['HEAD -> refs/heads/', 'target'], - ['refs/heads/', 'git-branch'], - ['refs/remotes/', 'cloud'], - ['refs/tags/', 'tag'] - ]); private disposables: Disposable[] = []; constructor(protected readonly repository: Repository, private readonly logger: LogOutputChannel) { - this.disposables.push(repository.onDidRunGitStatus(() => this.onDidRunGitStatus(), this)); + const onDidRunWriteOperation = filterEvent(repository.onDidRunOperation, e => !e.operation.readOnly); + this.disposables.push(onDidRunWriteOperation(this.onDidRunWriteOperation, this)); + this.disposables.push(window.registerFileDecorationProvider(this)); } - private async onDidRunGitStatus(): Promise { - this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] HEAD:', JSON.stringify(this._HEAD)); - this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] repository.HEAD:', JSON.stringify(this.repository.HEAD)); - - // Get the merge base of the current history item group - const mergeBase = await this.resolveHEADMergeBase(); - - // Check if HEAD has changed - if (this._HEAD?.name === this.repository.HEAD?.name && - this._HEAD?.commit === this.repository.HEAD?.commit && - this._HEAD?.upstream?.name === this.repository.HEAD?.upstream?.name && - this._HEAD?.upstream?.remote === this.repository.HEAD?.upstream?.remote && - this._HEAD?.upstream?.commit === this.repository.HEAD?.upstream?.commit && - this._HEADMergeBase?.name === mergeBase?.name && - this._HEADMergeBase?.remote === mergeBase?.remote && - this._HEADMergeBase?.commit === mergeBase?.commit) { - this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] HEAD has not changed'); + private async onDidRunWriteOperation(result: OperationResult): Promise { + if (!this.repository.HEAD) { + this.logger.trace('[GitHistoryProvider][onDidRunWriteOperation] repository.HEAD is undefined'); + this._currentHistoryItemRef = this._currentHistoryItemRemoteRef = this._currentHistoryItemBaseRef = undefined; + this._onDidChangeCurrentHistoryItemRefs.fire(); + return; } - this._HEAD = this.repository.HEAD; - this._HEADMergeBase = mergeBase; - - // Check if HEAD does not support incoming/outgoing (detached commit, tag) - if (!this.repository.HEAD?.name || !this.repository.HEAD?.commit || this.repository.HEAD.type === RefType.Tag) { - this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] HEAD does not support incoming/outgoing'); - - this.currentHistoryItemGroup = undefined; - return; + let historyItemRefId = ''; + let historyItemRefName = ''; + + switch (this.repository.HEAD.type) { + case RefType.Head: { + if (this.repository.HEAD.name !== undefined) { + // Branch + historyItemRefId = `refs/heads/${this.repository.HEAD.name}`; + historyItemRefName = this.repository.HEAD.name; + + // Remote + this._currentHistoryItemRemoteRef = this.repository.HEAD.upstream ? { + id: `refs/remotes/${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`, + name: `${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`, + revision: this.repository.HEAD.upstream.commit, + icon: new ThemeIcon('cloud') + } : undefined; + + // Base - compute only if the branch has changed + if (this._HEAD?.name !== this.repository.HEAD.name) { + const mergeBase = await this.resolveHEADMergeBase(); + + this._currentHistoryItemBaseRef = mergeBase && + (mergeBase.remote !== this.repository.HEAD.upstream?.remote || + mergeBase.name !== this.repository.HEAD.upstream?.name) ? { + id: `refs/remotes/${mergeBase.remote}/${mergeBase.name}`, + name: `${mergeBase.remote}/${mergeBase.name}`, + revision: mergeBase.commit, + icon: new ThemeIcon('cloud') + } : undefined; + } + } else { + // Detached commit + historyItemRefId = this.repository.HEAD.commit ?? ''; + historyItemRefName = this.repository.HEAD.commit ?? ''; + + this._currentHistoryItemRemoteRef = undefined; + this._currentHistoryItemBaseRef = undefined; + } + break; + } + case RefType.Tag: { + // Tag + historyItemRefId = `refs/tags/${this.repository.HEAD.name}`; + historyItemRefName = this.repository.HEAD.name ?? this.repository.HEAD.commit ?? ''; + + this._currentHistoryItemRemoteRef = undefined; + this._currentHistoryItemBaseRef = undefined; + break; + } } - this.currentHistoryItemGroup = { - id: `refs/heads/${this.repository.HEAD.name ?? ''}`, - name: this.repository.HEAD.name ?? '', + this._HEAD = this.repository.HEAD; + + this._currentHistoryItemRef = { + id: historyItemRefId, + name: historyItemRefName, revision: this.repository.HEAD.commit, - remote: this.repository.HEAD.upstream ? { - id: `refs/remotes/${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`, - name: `${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`, - revision: this.repository.HEAD.upstream.commit - } : undefined, - base: mergeBase && - (mergeBase.remote !== this.repository.HEAD.upstream?.remote || - mergeBase.name !== this.repository.HEAD.upstream?.name) ? { - id: `refs/remotes/${mergeBase.remote}/${mergeBase.name}`, - name: `${mergeBase.remote}/${mergeBase.name}`, - revision: mergeBase.commit - } : undefined + icon: new ThemeIcon('target'), }; - this.logger.trace(`[GitHistoryProvider][onDidRunGitStatus] currentHistoryItemGroup: ${JSON.stringify(this.currentHistoryItemGroup)}`); - } + this._onDidChangeCurrentHistoryItemRefs.fire(); + this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemRef: ${JSON.stringify(this._currentHistoryItemRef)}`); + this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemRemoteRef: ${JSON.stringify(this._currentHistoryItemRemoteRef)}`); + this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemBaseRef: ${JSON.stringify(this._currentHistoryItemBaseRef)}`); - async provideHistoryItems(historyItemGroupId: string, options: SourceControlHistoryOptions): Promise { - //TODO@lszomoru - support limit and cursor - if (typeof options.limit === 'number') { - throw new Error('Unsupported options.'); - } - if (typeof options.limit?.id !== 'string') { - throw new Error('Unsupported options.'); - } + // Refs (alphabetically) + const historyItemRefs = this.repository.refs + .map(ref => toSourceControlHistoryItemRef(ref)) + .sort((a, b) => a.id.localeCompare(b.id)); - const refParentId = options.limit.id; - const refId = await this.repository.revParse(historyItemGroupId) ?? ''; + // Auto-fetch + const silent = result.operation.kind === OperationKind.Fetch && result.operation.showProgress === false; + const delta = deltaHistoryItemRefs(this.historyItemRefs, historyItemRefs); + this._onDidChangeHistoryItemRefs.fire({ ...delta, silent }); - const historyItems: SourceControlHistoryItem[] = []; - const commits = await this.repository.log({ range: `${refParentId}..${refId}`, shortStats: true, sortByAuthorDate: true }); + this.historyItemRefs = historyItemRefs; - await ensureEmojis(); + const deltaLog = { + added: delta.added.map(ref => ref.id), + modified: delta.modified.map(ref => ref.id), + removed: delta.removed.map(ref => ref.id), + silent + }; + this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] historyItemRefs: ${JSON.stringify(deltaLog)}`); + } - historyItems.push(...commits.map(commit => { - const newLineIndex = commit.message.indexOf('\n'); - const subject = newLineIndex !== -1 ? commit.message.substring(0, newLineIndex) : commit.message; + async provideHistoryItemRefs(historyItemRefs: string[] | undefined): Promise { + const refs = await this.repository.getRefs({ pattern: historyItemRefs }); - return { - id: commit.hash, - parentIds: commit.parents, - message: emojify(subject), - author: commit.authorName, - icon: new ThemeIcon('git-commit'), - timestamp: commit.authorDate?.getTime(), - statistics: commit.shortStat ?? { files: 0, insertions: 0, deletions: 0 }, - }; - })); + const branches: SourceControlHistoryItemRef[] = []; + const remoteBranches: SourceControlHistoryItemRef[] = []; + const tags: SourceControlHistoryItemRef[] = []; + + for (const ref of refs) { + switch (ref.type) { + case RefType.RemoteHead: + remoteBranches.push(toSourceControlHistoryItemRef(ref)); + break; + case RefType.Tag: + tags.push(toSourceControlHistoryItemRef(ref)); + break; + default: + branches.push(toSourceControlHistoryItemRef(ref)); + break; + } + } - return historyItems; + return [...branches, ...remoteBranches, ...tags]; } - async provideHistoryItems2(options: SourceControlHistoryOptions): Promise { - if (!this.currentHistoryItemGroup || !options.historyItemGroupIds) { + async provideHistoryItems(options: SourceControlHistoryOptions): Promise { + if (!this.currentHistoryItemRef || !options.historyItemRefs) { return []; } // Deduplicate refNames - const refNames = Array.from(new Set(options.historyItemGroupIds)); + const refNames = Array.from(new Set(options.historyItemRefs)); let logOptions: LogOptions = { refNames, shortStats: true }; @@ -162,35 +228,26 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec await ensureEmojis(); return commits.map(commit => { - const newLineIndex = commit.message.indexOf('\n'); - const subject = newLineIndex !== -1 ? commit.message.substring(0, newLineIndex) : commit.message; - - const labels = this.resolveHistoryItemLabels(commit); + const references = this._resolveHistoryItemRefs(commit); return { id: commit.hash, parentIds: commit.parents, - message: emojify(subject), + message: emojify(commit.message), author: commit.authorName, icon: new ThemeIcon('git-commit'), + displayId: commit.hash.substring(0, 8), timestamp: commit.authorDate?.getTime(), statistics: commit.shortStat ?? { files: 0, insertions: 0, deletions: 0 }, - labels: labels.length !== 0 ? labels : undefined + references: references.length !== 0 ? references : undefined }; }); } catch (err) { - this.logger.error(`[GitHistoryProvider][provideHistoryItems2] Failed to get history items with options '${JSON.stringify(options)}': ${err}`); + this.logger.error(`[GitHistoryProvider][provideHistoryItems] Failed to get history items with options '${JSON.stringify(options)}': ${err}`); return []; } } - async provideHistoryItemSummary(historyItemId: string, historyItemParentId: string | undefined): Promise { - historyItemParentId = historyItemParentId ?? await this.repository.getEmptyTree(); - const allChanges = await this.repository.diffBetweenShortStat(historyItemParentId, historyItemId); - - return { id: historyItemId, parentIds: [historyItemParentId], message: '', statistics: allChanges }; - } - async provideHistoryItemChanges(historyItemId: string, historyItemParentId: string | undefined): Promise { historyItemParentId = historyItemParentId ?? await this.repository.getEmptyTree(); @@ -225,49 +282,21 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec return historyItemChanges; } - async resolveHistoryItemGroupCommonAncestor(historyItemId1: string, historyItemId2: string | undefined): Promise<{ id: string; ahead: number; behind: number } | undefined> { - if (!historyItemId2) { - const upstreamRef = await this.resolveHistoryItemGroupMergeBase(historyItemId1); - if (!upstreamRef) { - this.logger.info(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Failed to resolve history item group base for '${historyItemId1}'`); - return undefined; - } - - historyItemId2 = `refs/remotes/${upstreamRef.remote}/${upstreamRef.name}`; - } - - const ancestor = await this.repository.getMergeBase(historyItemId1, historyItemId2); - if (!ancestor) { - this.logger.info(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Failed to resolve common ancestor for '${historyItemId1}' and '${historyItemId2}'`); - return undefined; - } - - try { - const commitCount = await this.repository.getCommitCount(`${historyItemId1}...${historyItemId2}`); - this.logger.trace(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Resolved common ancestor for '${historyItemId1}' and '${historyItemId2}': ${JSON.stringify({ id: ancestor, ahead: commitCount.ahead, behind: commitCount.behind })}`); - return { id: ancestor, ahead: commitCount.ahead, behind: commitCount.behind }; - } catch (err) { - this.logger.error(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Failed to get ahead/behind for '${historyItemId1}...${historyItemId2}': ${err.message}`); - } - - return undefined; - } - - async resolveHistoryItemGroupCommonAncestor2(historyItemGroupIds: string[]): Promise { + async resolveHistoryItemRefsCommonAncestor(historyItemRefs: string[]): Promise { try { - if (historyItemGroupIds.length === 0) { + if (historyItemRefs.length === 0) { // TODO@lszomoru - log return undefined; - } else if (historyItemGroupIds.length === 1 && historyItemGroupIds[0] === this.currentHistoryItemGroup?.id) { + } else if (historyItemRefs.length === 1 && historyItemRefs[0] === this.currentHistoryItemRef?.id) { // Remote - if (this.currentHistoryItemGroup.remote) { - const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], this.currentHistoryItemGroup.remote.id); + if (this.currentHistoryItemRemoteRef) { + const ancestor = await this.repository.getMergeBase(historyItemRefs[0], this.currentHistoryItemRemoteRef.id); return ancestor; } // Base - if (this.currentHistoryItemGroup.base) { - const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], this.currentHistoryItemGroup.base.id); + if (this.currentHistoryItemBaseRef) { + const ancestor = await this.repository.getMergeBase(historyItemRefs[0], this.currentHistoryItemBaseRef.id); return ancestor; } @@ -276,13 +305,13 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec if (commits.length > 0) { return commits[0].hash; } - } else if (historyItemGroupIds.length > 1) { - const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], historyItemGroupIds[1], ...historyItemGroupIds.slice(2)); + } else if (historyItemRefs.length > 1) { + const ancestor = await this.repository.getMergeBase(historyItemRefs[0], historyItemRefs[1], ...historyItemRefs.slice(2)); return ancestor; } } catch (err) { - this.logger.error(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor2] Failed to resolve common ancestor for ${historyItemGroupIds.join(',')}: ${err}`); + this.logger.error(`[GitHistoryProvider][resolveHistoryItemRefsCommonAncestor] Failed to resolve common ancestor for ${historyItemRefs.join(',')}: ${err}`); } return undefined; @@ -292,59 +321,61 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec return this.historyItemDecorations.get(uri.toString()); } - private resolveHistoryItemLabels(commit: Commit): SourceControlHistoryItemLabel[] { - const labels: SourceControlHistoryItemLabel[] = []; - - for (const label of commit.refNames) { - for (const [key, value] of this.historyItemLabels) { - if (label.startsWith(key)) { - labels.push({ - title: label.substring(key.length), - icon: new ThemeIcon(value) + private _resolveHistoryItemRefs(commit: Commit): SourceControlHistoryItemRef[] { + const references: SourceControlHistoryItemRef[] = []; + + for (const ref of commit.refNames) { + switch (true) { + case ref.startsWith('HEAD -> refs/heads/'): + references.push({ + id: ref.substring('HEAD -> '.length), + name: ref.substring('HEAD -> refs/heads/'.length), + revision: commit.hash, + icon: new ThemeIcon('target') + }); + break; + case ref.startsWith('tag: refs/tags/'): + references.push({ + id: ref.substring('tag: '.length), + name: ref.substring('tag: refs/tags/'.length), + revision: commit.hash, + icon: new ThemeIcon('tag') + }); + break; + case ref.startsWith('refs/heads/'): + references.push({ + id: ref, + name: ref.substring('refs/heads/'.length), + revision: commit.hash, + icon: new ThemeIcon('git-branch') + }); + break; + case ref.startsWith('refs/remotes/'): + references.push({ + id: ref, + name: ref.substring('refs/remotes/'.length), + revision: commit.hash, + icon: new ThemeIcon('cloud') }); break; - } } } - return labels; + return references; } - private async resolveHistoryItemGroupMergeBase(historyItemId: string): Promise { + private async resolveHEADMergeBase(): Promise { try { - // Upstream - const branch = await this.repository.getBranch(historyItemId); - if (branch.upstream) { - return branch.upstream; - } - - // Base (config -> reflog -> default) - const remoteBranch = await this.repository.getBranchBase(historyItemId); - if (!remoteBranch?.remote || !remoteBranch?.name || !remoteBranch?.commit || remoteBranch?.type !== RefType.RemoteHead) { - this.logger.info(`[GitHistoryProvider][resolveHistoryItemGroupUpstreamOrBase] Failed to resolve history item group base for '${historyItemId}'`); + if (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) { return undefined; } - return { - name: remoteBranch.name, - remote: remoteBranch.remote, - commit: remoteBranch.commit - }; - } - catch (err) { - this.logger.error(`[GitHistoryProvider][resolveHistoryItemGroupUpstreamOrBase] Failed to get branch base for '${historyItemId}': ${err.message}`); - } - - return undefined; - } - - private async resolveHEADMergeBase(): Promise { - if (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) { + const mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name); + return mergeBase; + } catch (err) { + this.logger.error(`[GitHistoryProvider][resolveHEADMergeBase] Failed to resolve merge base for ${this.repository.HEAD?.name}: ${err}`); return undefined; } - - const mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name); - return mergeBase; } dispose(): void { diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 8ba56b1a1..5788d7ee2 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -725,6 +725,11 @@ export class Repository implements Disposable { return this._HEAD; } + private _refs: Ref[] = []; + get refs(): Ref[] { + return this._refs; + } + get headShortName(): string | undefined { if (!this.HEAD) { return; @@ -1460,7 +1465,15 @@ export class Repository implements Disposable { // Reflog const branchFromReflog = await this.getBranchBaseFromReflog(ref); - const branchFromReflogUpstream = branchFromReflog ? await this.getUpstreamBranch(branchFromReflog) : undefined; + + let branchFromReflogUpstream: Branch | undefined = undefined; + + if (branchFromReflog?.type === RefType.RemoteHead) { + branchFromReflogUpstream = branchFromReflog; + } else if (branchFromReflog?.type === RefType.Head) { + branchFromReflogUpstream = await this.getUpstreamBranch(branchFromReflog); + } + if (branchFromReflogUpstream) { await this.setConfig(mergeBaseConfigKey, `${branchFromReflogUpstream.remote}/${branchFromReflogUpstream.name}`); return branchFromReflogUpstream; @@ -1508,16 +1521,13 @@ export class Repository implements Disposable { private async getDefaultBranch(): Promise { try { - const defaultBranchResult = await this.repository.exec(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD']); - if (defaultBranchResult.stdout.trim() === '' || defaultBranchResult.stderr) { - return undefined; - } - - return this.getBranch(defaultBranchResult.stdout.trim()); + const defaultBranch = await this.repository.getDefaultBranch(); + return defaultBranch; + } + catch (err) { + this.logger.warn(`[Repository][getDefaultBranch] Failed to get default branch details: ${err.message}.`); + return undefined; } - catch (err) { } - - return undefined; } private async getUpstreamBranch(branch: Branch): Promise { @@ -1566,8 +1576,8 @@ export class Repository implements Disposable { await this.run(Operation.Rebase, () => this.repository.rebase(branch)); } - async tag(name: string, message?: string): Promise { - await this.run(Operation.Tag, () => this.repository.tag(name, message)); + async tag(options: { name: string; message?: string; ref?: string }): Promise { + await this.run(Operation.Tag, () => this.repository.tag(options)); } async deleteTag(name: string): Promise { @@ -1618,14 +1628,6 @@ export class Repository implements Disposable { return this._EMPTY_TREE; } - async getCommitCount(range: string): Promise<{ ahead: number; behind: number }> { - return await this.run(Operation.RevList, () => this.repository.getCommitCount(range)); - } - - async revParse(ref: string): Promise { - return await this.run(Operation.RevParse, () => this.repository.revParse(ref)); - } - async reset(treeish: string, hard?: boolean): Promise { await this.run(Operation.Reset, () => this.repository.reset(treeish, hard)); } @@ -2187,7 +2189,12 @@ export class Repository implements Disposable { this._sourceControl.commitTemplate = commitTemplate; // Execute cancellable long-running operation - const resourceGroups = await this.getStatus(cancellationToken); + const [resourceGroups, refs] = + await Promise.all([ + this.getStatus(cancellationToken), + this.getRefs({}, cancellationToken)]); + + this._refs = refs; this._updateResourceGroupsState(resourceGroups); this._onDidChangeStatus.fire(); diff --git a/extensions/git/src/terminal.ts b/extensions/git/src/terminal.ts index 05a4366d0..edf02693c 100644 --- a/extensions/git/src/terminal.ts +++ b/extensions/git/src/terminal.ts @@ -71,7 +71,7 @@ export class TerminalShellExecutionManager { const [executable, subcommand] = execution.commandLine.value.split(/\s+/); const cwd = execution.cwd ?? shellIntegration.cwd; - if (executable.toLowerCase() !== 'git' || !this.subcommands.has(subcommand.toLowerCase()) || !cwd || exitCode !== 0) { + if (executable.toLowerCase() !== 'git' || !this.subcommands.has(subcommand?.toLowerCase()) || !cwd || exitCode !== 0) { return; } diff --git a/extensions/git/src/test/smoke.test.ts b/extensions/git/src/test/smoke.test.ts index 789086e90..1b2c8c259 100644 --- a/extensions/git/src/test/smoke.test.ts +++ b/extensions/git/src/test/smoke.test.ts @@ -129,29 +129,26 @@ suite('git smoke test', function () { }); test('rename/delete conflict', async function () { - cp.execSync('git branch test', { cwd }); - cp.execSync('git checkout test', { cwd }); + await commands.executeCommand('workbench.view.scm'); + + await repository.createBranch('test', true); + // Delete file (test branch) fs.unlinkSync(file('app.js')); - cp.execSync('git add .', { cwd }); + await repository.commit('commit on test', { all: true }); - await repository.commit('commit on test'); - cp.execSync('git checkout main', { cwd }); + await repository.checkout('main'); + // Rename file (main branch) fs.renameSync(file('app.js'), file('rename.js')); - cp.execSync('git add .', { cwd }); - await repository.commit('commit on main'); + await repository.commit('commit on main', { all: true }); try { - cp.execSync('git merge test', { cwd }); + await repository.merge('test'); } catch (e) { } - setTimeout(() => { - commands.executeCommand('workbench.scm.focus'); - }, 2e3); - - await new Promise(resolve => { - setTimeout(resolve, 5e3); - }); + assert.strictEqual(repository.state.mergeChanges.length, 1); + assert.strictEqual(repository.state.workingTreeChanges.length, 0); + assert.strictEqual(repository.state.indexChanges.length, 0); }); }); diff --git a/extensions/git/src/util.ts b/extensions/git/src/util.ts index eac6f0384..bf33411c3 100644 --- a/extensions/git/src/util.ts +++ b/extensions/git/src/util.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event, Disposable, EventEmitter } from 'vscode'; +import { Event, Disposable, EventEmitter, SourceControlHistoryItemRef } from 'vscode'; import { dirname, sep, relative } from 'path'; import { Readable } from 'stream'; import { promises as fs, createReadStream } from 'fs'; @@ -513,3 +513,58 @@ export namespace Versions { return from(major, minor, patch, pre); } } + +export function deltaHistoryItemRefs(before: SourceControlHistoryItemRef[], after: SourceControlHistoryItemRef[]): { + added: SourceControlHistoryItemRef[]; + modified: SourceControlHistoryItemRef[]; + removed: SourceControlHistoryItemRef[]; +} { + if (before.length === 0) { + return { added: after, modified: [], removed: [] }; + } + + const added: SourceControlHistoryItemRef[] = []; + const modified: SourceControlHistoryItemRef[] = []; + const removed: SourceControlHistoryItemRef[] = []; + + let beforeIdx = 0; + let afterIdx = 0; + + while (true) { + if (beforeIdx === before.length) { + added.push(...after.slice(afterIdx)); + break; + } + if (afterIdx === after.length) { + removed.push(...before.slice(beforeIdx)); + break; + } + + const beforeElement = before[beforeIdx]; + const afterElement = after[afterIdx]; + + const result = beforeElement.id.localeCompare(afterElement.id); + + if (result === 0) { + if (beforeElement.revision !== afterElement.revision) { + // modified + modified.push(afterElement); + } + + beforeIdx += 1; + afterIdx += 1; + } else if (result < 0) { + // beforeElement is smaller -> before element removed + removed.push(beforeElement); + + beforeIdx += 1; + } else if (result > 0) { + // beforeElement is greater -> after element added + added.push(afterElement); + + afterIdx += 1; + } + } + + return { added, modified, removed }; +} diff --git a/extensions/github-authentication/.vscodeignore b/extensions/github-authentication/.vscodeignore index f4dce5682..0d0ea746e 100644 --- a/extensions/github-authentication/.vscodeignore +++ b/extensions/github-authentication/.vscodeignore @@ -6,5 +6,4 @@ build/** extension.webpack.config.js extension-browser.webpack.config.js tsconfig.json -yarn.lock package-lock.json diff --git a/extensions/github-authentication/src/github.ts b/extensions/github-authentication/src/github.ts index ed584c65f..d4ae33742 100644 --- a/extensions/github-authentication/src/github.ts +++ b/extensions/github-authentication/src/github.ts @@ -18,7 +18,9 @@ interface SessionData { account?: { label?: string; displayName?: string; - id: string; + // Unfortunately, for some time the id was a number, so we need to support both. + // This can be removed once we are confident that all users have migrated to the new id. + id: string | number; }; scopes: string[]; accessToken: string; @@ -134,7 +136,7 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid return sessions; }); - this._supportsMultipleAccounts = vscode.workspace.getConfiguration('github.experimental').get('multipleAccounts', false); + this._supportsMultipleAccounts = this._shouldSupportMultipleAccounts(); this._disposable = vscode.Disposable.from( this._telemetryReporter, @@ -142,7 +144,7 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid this.context.secrets.onDidChange(() => this.checkForUpdates()), vscode.workspace.onDidChangeConfiguration(async e => { if (e.affectsConfiguration('github.experimental.multipleAccounts')) { - const newValue = vscode.workspace.getConfiguration('github.experimental').get('multipleAccounts', false); + const newValue = this._shouldSupportMultipleAccounts(); if (newValue === this._supportsMultipleAccounts) { return; } @@ -239,9 +241,14 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid return []; } + // Unfortunately, we were using a number secretly for the account id for some time... this is due to a bad `any`. + // AuthenticationSession's account id is a string, so we need to detect when there is a number accountId and re-store + // the sessions to migrate away from the bad number usage. + // TODO@TylerLeonhardt: Remove this after we are confident that all users have migrated to the new id. + let seenNumberAccountId: boolean = false; // TODO: eventually remove this Set because we should only have one session per set of scopes. const scopesSeen = new Set(); - const sessionPromises = sessionData.map(async (session: SessionData) => { + const sessionPromises = sessionData.map(async (session: SessionData): Promise => { // For GitHub scope list, order doesn't matter so we immediately sort the scopes const scopesStr = [...session.scopes].sort().join(' '); if (!this._supportsMultipleAccounts && scopesSeen.has(scopesStr)) { @@ -262,13 +269,23 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid this._logger.trace(`Read the following session from the keychain with the following scopes: ${scopesStr}`); scopesSeen.add(scopesStr); + + let accountId: string; + if (session.account?.id) { + if (typeof session.account.id === 'number') { + seenNumberAccountId = true; + } + accountId = `${session.account.id}`; + } else { + accountId = userInfo?.id ?? ''; + } return { id: session.id, account: { label: session.account ? session.account.label ?? session.account.displayName ?? '' : userInfo?.accountName ?? '', - id: session.account?.id ?? userInfo?.id ?? '' + id: accountId }, // we set this to session.scopes to maintain the original order of the scopes requested // by the extension that called getSession() @@ -283,7 +300,7 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid .filter((p?: T): p is T => Boolean(p)); this._logger.info(`Got ${verifiedSessions.length} verified sessions.`); - if (verifiedSessions.length !== sessionData.length) { + if (seenNumberAccountId || verifiedSessions.length !== sessionData.length) { await this.storeSessions(verifiedSessions); } @@ -407,4 +424,26 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid throw e; } } + + private _shouldSupportMultipleAccounts(): boolean { + // First check if there is a setting value to allow user to override the default + const inspect = vscode.workspace.getConfiguration('github.experimental').inspect('multipleAccounts'); + if (inspect?.workspaceFolderValue !== undefined) { + this._logger.trace(`Acquired multi-account enablement value from 'workspaceFolderValue'. Value: ${inspect.workspaceFolderValue}`); + return inspect.workspaceFolderValue; + } + if (inspect?.workspaceValue !== undefined) { + this._logger.trace(`Acquired multi-account enablement value from 'workspaceValue'. Value: ${inspect.workspaceValue}`); + return inspect.workspaceValue; + } + if (inspect?.globalValue !== undefined) { + this._logger.trace(`Acquired multi-account enablement value from 'globalValue'. Value: ${inspect.globalValue}`); + return inspect.globalValue; + } + + const value = vscode.env.uriScheme !== 'vscode'; + this._logger.trace(`Acquired multi-account enablement value from default. Value: ${value} because of uriScheme: ${vscode.env.uriScheme}`); + // If no setting or experiment value is found, default to false on stable and true on insiders + return value; + } } diff --git a/extensions/github-authentication/src/githubServer.ts b/extensions/github-authentication/src/githubServer.ts index c9f0a8c07..a9f94ccf6 100644 --- a/extensions/github-authentication/src/githubServer.ts +++ b/extensions/github-authentication/src/githubServer.ts @@ -228,9 +228,9 @@ export class GitHubServer implements IGitHubServer { if (result.ok) { try { - const json = await result.json(); + const json = await result.json() as { id: number; login: string }; this._logger.info('Got account info!'); - return { id: json.id, accountName: json.login }; + return { id: `${json.id}`, accountName: json.login }; } catch (e) { this._logger.error(`Unexpected error parsing response from GitHub: ${e.message ?? e}`); throw e; diff --git a/extensions/github/.vscodeignore b/extensions/github/.vscodeignore index 1ee958238..24b1bd4e7 100644 --- a/extensions/github/.vscodeignore +++ b/extensions/github/.vscodeignore @@ -4,5 +4,4 @@ out/** build/** extension.webpack.config.js tsconfig.json -yarn.lock package-lock.json diff --git a/extensions/github/package.nls.json b/extensions/github/package.nls.json index ad3cf82e0..5ead7903a 100644 --- a/extensions/github/package.nls.json +++ b/extensions/github/package.nls.json @@ -5,7 +5,7 @@ "config.gitAuthentication": "Controls whether to enable automatic GitHub authentication for git commands within VS Code.", "config.gitProtocol": "Controls which protocol is used to clone a GitHub repository", "welcome.publishFolder": { - "message": "You can directly publish this folder to a GitHub repository. Once published, you'll have access to source control features powered by git and GitHub.\n[$(github) Publish to GitHub](command:github.publish)", + "message": "You can directly publish this folder to a GitHub repository. Once published, you'll have access to source control features powered by Git and GitHub.\n[$(github) Publish to GitHub](command:github.publish)", "comment": [ "{Locked='$(github)'}", "Do not translate '$(github)'. It will be rendered as an icon", @@ -15,7 +15,7 @@ ] }, "welcome.publishWorkspaceFolder": { - "message": "You can directly publish a workspace folder to a GitHub repository. Once published, you'll have access to source control features powered by git and GitHub.\n[$(github) Publish to GitHub](command:github.publish)", + "message": "You can directly publish a workspace folder to a GitHub repository. Once published, you'll have access to source control features powered by Git and GitHub.\n[$(github) Publish to GitHub](command:github.publish)", "comment": [ "{Locked='$(github)'}", "Do not translate '$(github)'. It will be rendered as an icon", diff --git a/extensions/go/cgmanifest.json b/extensions/go/cgmanifest.json index bd8f2d610..39db8ac97 100644 --- a/extensions/go/cgmanifest.json +++ b/extensions/go/cgmanifest.json @@ -6,12 +6,12 @@ "git": { "name": "go-syntax", "repositoryUrl": "https://github.com/worlpaker/go-syntax", - "commitHash": "21f28840e04d4fa04682d19d6fe64de437f40b64" + "commitHash": "b40fb01f2cf48bc24e6f4030373311b0402b158e" } }, "license": "MIT", "description": "The file syntaxes/go.tmLanguage.json is from https://github.com/worlpaker/go-syntax, which in turn was derived from https://github.com/jeff-hykin/better-go-syntax.", - "version": "0.7.5" + "version": "0.7.6" } ], "version": 1 diff --git a/extensions/go/syntaxes/go.tmLanguage.json b/extensions/go/syntaxes/go.tmLanguage.json index b8a6604de..bc56a1b97 100644 --- a/extensions/go/syntaxes/go.tmLanguage.json +++ b/extensions/go/syntaxes/go.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/worlpaker/go-syntax/commit/21f28840e04d4fa04682d19d6fe64de437f40b64", + "version": "https://github.com/worlpaker/go-syntax/commit/b40fb01f2cf48bc24e6f4030373311b0402b158e", "name": "Go", "scopeName": "source.go", "patterns": [ @@ -1845,7 +1845,7 @@ }, { "comment": "one type only", - "match": "(?:((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?' || lastCharacter === '/')) { - doAutoInsert('autoClose', document, lastChange); + if (lastChange.rangeLength === 0 && isSingleLine(lastChange.text)) { + const lastCharacter = lastChange.text[lastChange.text.length - 1]; + if (isEnabled['autoQuote'] && lastCharacter === '=') { + doAutoInsert('autoQuote', document, lastChange); + } else if (isEnabled['autoClose'] && (lastCharacter === '>' || lastCharacter === '/')) { + doAutoInsert('autoClose', document, lastChange); + } } } + function isSingleLine(text: string): boolean { + return !/\n/.test(text); + } + function doAutoInsert(kind: 'autoQuote' | 'autoClose', document: TextDocument, lastChange: TextDocumentContentChangeEvent) { const rangeStart = lastChange.range.start; const version = document.version; diff --git a/extensions/ipynb/.vscodeignore b/extensions/ipynb/.vscodeignore index f157f8e96..2d13f5a0c 100644 --- a/extensions/ipynb/.vscodeignore +++ b/extensions/ipynb/.vscodeignore @@ -5,7 +5,6 @@ out/** tsconfig.json extension.webpack.config.js extension-browser.webpack.config.js -yarn.lock package-lock.json .gitignore esbuild.js diff --git a/extensions/ipynb/extension-browser.webpack.config.js b/extensions/ipynb/extension-browser.webpack.config.js index e9bc478c0..a9dbdb8b0 100644 --- a/extensions/ipynb/extension-browser.webpack.config.js +++ b/extensions/ipynb/extension-browser.webpack.config.js @@ -12,10 +12,10 @@ const withBrowserDefaults = require('../shared.webpack.config').browser; const config = withBrowserDefaults({ context: __dirname, entry: { - extension: './src/ipynbMain.ts' + extension: './src/ipynbMain.browser.ts' }, output: { - filename: 'ipynbMain.js' + filename: 'ipynbMain.browser.js' } }); diff --git a/extensions/ipynb/extension.webpack.config.js b/extensions/ipynb/extension.webpack.config.js index 784411bb0..aad5f5584 100644 --- a/extensions/ipynb/extension.webpack.config.js +++ b/extensions/ipynb/extension.webpack.config.js @@ -8,13 +8,19 @@ 'use strict'; const withDefaults = require('../shared.webpack.config'); +const path = require('path'); module.exports = withDefaults({ context: __dirname, entry: { - extension: './src/ipynbMain.ts', + ['ipynbMain.node']: './src/ipynbMain.node.ts', + notebookSerializerWorker: './src/notebookSerializerWorker.ts', }, output: { - filename: 'ipynbMain.js' - } + path: path.resolve(__dirname, 'dist'), + filename: '[name].js' + }, + plugins: [ + ...withDefaults.nodePlugins(__dirname), // add plugins, don't replace inherited + ] }); diff --git a/extensions/ipynb/package.json b/extensions/ipynb/package.json index d881eb8ca..c2fe8c2a0 100644 --- a/extensions/ipynb/package.json +++ b/extensions/ipynb/package.json @@ -22,8 +22,8 @@ "workspace", "ui" ], - "main": "./out/ipynbMain.js", - "browser": "./dist/browser/ipynbMain.js", + "main": "./out/ipynbMain.node.js", + "browser": "./dist/browser/ipynbMain.browser.js", "capabilities": { "virtualWorkspaces": true, "untrustedWorkspaces": { @@ -39,6 +39,12 @@ "scope": "resource", "markdownDescription": "%ipynb.pasteImagesAsAttachments.enabled%", "default": true + }, + "ipynb.experimental.serialization": { + "type": "boolean", + "scope": "resource", + "markdownDescription": "%ipynb.experimental.serialization%", + "default": false } } } diff --git a/extensions/ipynb/package.nls.json b/extensions/ipynb/package.nls.json index 7a3d95181..9fc163137 100644 --- a/extensions/ipynb/package.nls.json +++ b/extensions/ipynb/package.nls.json @@ -2,6 +2,7 @@ "displayName": ".ipynb Support", "description": "Provides basic support for opening and reading Jupyter's .ipynb notebook files", "ipynb.pasteImagesAsAttachments.enabled": "Enable/disable pasting of images into Markdown cells in ipynb notebook files. Pasted images are inserted as attachments to the cell.", + "ipynb.experimental.serialization": "Experimental feature to serialize the Jupyter notebook in a worker thread. Not supported when the Extension host is running as a web worker.", "newUntitledIpynb.title": "New Jupyter Notebook", "newUntitledIpynb.shortTitle": "Jupyter Notebook", "openIpynbInNotebookEditor.title": "Open IPYNB File In Notebook Editor", diff --git a/extensions/ipynb/src/common.ts b/extensions/ipynb/src/common.ts index d81951d2d..3fda0bc74 100644 --- a/extensions/ipynb/src/common.ts +++ b/extensions/ipynb/src/common.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import type * as nbformat from '@jupyterlab/nbformat'; -import { workspace } from 'vscode'; /** * Metadata we store in VS Code cell output items. @@ -66,6 +65,3 @@ export interface CellMetadata { execution_count?: number; } -export function useCustomPropertyInMetadata() { - return !workspace.getConfiguration('jupyter', undefined).get('experimental.dropCustomMetadata', true); -} diff --git a/extensions/ipynb/src/constants.ts b/extensions/ipynb/src/constants.ts index 43e13b3b5..9a82ccfae 100644 --- a/extensions/ipynb/src/constants.ts +++ b/extensions/ipynb/src/constants.ts @@ -3,9 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; +import type { DocumentSelector } from 'vscode'; export const defaultNotebookFormat = { major: 4, minor: 2 }; export const ATTACHMENT_CLEANUP_COMMANDID = 'ipynb.cleanInvalidImageAttachment'; -export const JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR: vscode.DocumentSelector = { notebookType: 'jupyter-notebook', language: 'markdown' }; +export const JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR: DocumentSelector = { notebookType: 'jupyter-notebook', language: 'markdown' }; + +// Copied from NotebookCellKind.Markup as we cannot import it from vscode directly in worker threads. +export const NotebookCellKindMarkup = 1; +// Copied from NotebookCellKind.Code as we cannot import it from vscode directly in worker threads. +export const NotebookCellKindCode = 2; + +export enum CellOutputMimeTypes { + error = 'application/vnd.code.notebook.error', + stderr = 'application/vnd.code.notebook.stderr', + stdout = 'application/vnd.code.notebook.stdout' +} + +export const textMimeTypes = ['text/plain', 'text/markdown', 'text/latex', CellOutputMimeTypes.stderr, CellOutputMimeTypes.stdout]; + diff --git a/extensions/ipynb/src/deserializers.ts b/extensions/ipynb/src/deserializers.ts index 920689c74..de467f660 100644 --- a/extensions/ipynb/src/deserializers.ts +++ b/extensions/ipynb/src/deserializers.ts @@ -5,7 +5,8 @@ import type * as nbformat from '@jupyterlab/nbformat'; import { extensions, NotebookCellData, NotebookCellExecutionSummary, NotebookCellKind, NotebookCellOutput, NotebookCellOutputItem, NotebookData } from 'vscode'; -import { CellMetadata, CellOutputMetadata, useCustomPropertyInMetadata } from './common'; +import { CellMetadata, CellOutputMetadata } from './common'; +import { textMimeTypes } from './constants'; const jupyterLanguageToMonacoLanguageMapping = new Map([ ['c#', 'csharp'], @@ -89,15 +90,6 @@ function sortOutputItemsBasedOnDisplayOrder(outputItems: NotebookCellOutputItem[ .sort((outputItemA, outputItemB) => outputItemA.index - outputItemB.index).map(item => item.item); } - -enum CellOutputMimeTypes { - error = 'application/vnd.code.notebook.error', - stderr = 'application/vnd.code.notebook.stderr', - stdout = 'application/vnd.code.notebook.stdout' -} - -export const textMimeTypes = ['text/plain', 'text/markdown', 'text/latex', CellOutputMimeTypes.stderr, CellOutputMimeTypes.stdout]; - function concatMultilineString(str: string | string[], trim?: boolean): string { const nonLineFeedWhiteSpaceTrim = /(^[\t\f\v\r ]+|[\t\f\v\r ]+$)/g; if (Array.isArray(str)) { @@ -154,51 +146,25 @@ function convertJupyterOutputToBuffer(mime: string, value: unknown): NotebookCel function getNotebookCellMetadata(cell: nbformat.IBaseCell): { [key: string]: any; } { - if (useCustomPropertyInMetadata()) { - const cellMetadata: { [key: string]: any } = {}; - // We put this only for VSC to display in diff view. - // Else we don't use this. - const custom: CellMetadata = {}; - - if (cell.cell_type === 'code' && typeof cell['execution_count'] === 'number') { - custom.execution_count = cell['execution_count']; - } - - if (cell['metadata']) { - custom['metadata'] = JSON.parse(JSON.stringify(cell['metadata'])); - } - - if ('id' in cell && typeof cell.id === 'string') { - custom.id = cell.id; - } - - cellMetadata.custom = custom; - - if (cell['attachments']) { - cellMetadata.attachments = JSON.parse(JSON.stringify(cell['attachments'])); - } - return cellMetadata; - } else { - // We put this only for VSC to display in diff view. - // Else we don't use this. - const cellMetadata: CellMetadata = {}; - if (cell.cell_type === 'code' && typeof cell['execution_count'] === 'number') { - cellMetadata.execution_count = cell['execution_count']; - } + // We put this only for VSC to display in diff view. + // Else we don't use this. + const cellMetadata: CellMetadata = {}; + if (cell.cell_type === 'code' && typeof cell['execution_count'] === 'number') { + cellMetadata.execution_count = cell['execution_count']; + } - if (cell['metadata']) { - cellMetadata['metadata'] = JSON.parse(JSON.stringify(cell['metadata'])); - } + if (cell['metadata']) { + cellMetadata['metadata'] = JSON.parse(JSON.stringify(cell['metadata'])); + } - if ('id' in cell && typeof cell.id === 'string') { - cellMetadata.id = cell.id; - } + if ('id' in cell && typeof cell.id === 'string') { + cellMetadata.id = cell.id; + } - if (cell['attachments']) { - cellMetadata.attachments = JSON.parse(JSON.stringify(cell['attachments'])); - } - return cellMetadata; + if (cell['attachments']) { + cellMetadata.attachments = JSON.parse(JSON.stringify(cell['attachments'])); } + return cellMetadata; } function getOutputMetadata(output: nbformat.IOutput): CellOutputMetadata { @@ -382,7 +348,7 @@ export function jupyterNotebookModelToNotebookData( preferredLanguage: string ): NotebookData { const notebookContentWithoutCells = { ...notebookContent, cells: [] }; - if (!notebookContent.cells || notebookContent.cells.length === 0) { + if (!Array.isArray(notebookContent.cells)) { throw new Error('Notebook content is missing cells'); } @@ -391,6 +357,6 @@ export function jupyterNotebookModelToNotebookData( .filter((item): item is NotebookCellData => !!item); const notebookData = new NotebookData(cells); - notebookData.metadata = useCustomPropertyInMetadata() ? { custom: notebookContentWithoutCells } : notebookContentWithoutCells; + notebookData.metadata = notebookContentWithoutCells; return notebookData; } diff --git a/extensions/ipynb/src/helper.ts b/extensions/ipynb/src/helper.ts index fd8125088..beab091f5 100644 --- a/extensions/ipynb/src/helper.ts +++ b/extensions/ipynb/src/helper.ts @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { CancellationError } from 'vscode'; + export function deepClone(obj: T): T { if (!obj || typeof obj !== 'object') { return obj; @@ -140,3 +142,119 @@ export class Delayer { export interface ITask { (): T; } + + +/** + * Copied from src/vs/base/common/uuid.ts + */ +export function generateUuid() { + // use `randomValues` if possible + function getRandomValues(bucket: Uint8Array): Uint8Array { + for (let i = 0; i < bucket.length; i++) { + bucket[i] = Math.floor(Math.random() * 256); + } + return bucket; + } + + // prep-work + const _data = new Uint8Array(16); + const _hex: string[] = []; + for (let i = 0; i < 256; i++) { + _hex.push(i.toString(16).padStart(2, '0')); + } + + // get data + getRandomValues(_data); + + // set version bits + _data[6] = (_data[6] & 0x0f) | 0x40; + _data[8] = (_data[8] & 0x3f) | 0x80; + + // print as string + let i = 0; + let result = ''; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += '-'; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += '-'; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += '-'; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += '-'; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + result += _hex[_data[i++]]; + return result; +} + +export type ValueCallback = (value: T | Promise) => void; + +const enum DeferredOutcome { + Resolved, + Rejected +} + + +/** + * Creates a promise whose resolution or rejection can be controlled imperatively. + */ +export class DeferredPromise { + + private completeCallback!: ValueCallback; + private errorCallback!: (err: unknown) => void; + private outcome?: { outcome: DeferredOutcome.Rejected; value: any } | { outcome: DeferredOutcome.Resolved; value: T }; + + public get isRejected() { + return this.outcome?.outcome === DeferredOutcome.Rejected; + } + + public get isResolved() { + return this.outcome?.outcome === DeferredOutcome.Resolved; + } + + public get isSettled() { + return !!this.outcome; + } + + public get value() { + return this.outcome?.outcome === DeferredOutcome.Resolved ? this.outcome?.value : undefined; + } + + public readonly p: Promise; + + constructor() { + this.p = new Promise((c, e) => { + this.completeCallback = c; + this.errorCallback = e; + }); + } + + public complete(value: T) { + return new Promise(resolve => { + this.completeCallback(value); + this.outcome = { outcome: DeferredOutcome.Resolved, value }; + resolve(); + }); + } + + public error(err: unknown) { + return new Promise(resolve => { + this.errorCallback(err); + this.outcome = { outcome: DeferredOutcome.Rejected, value: err }; + resolve(); + }); + } + + public cancel() { + return this.error(new CancellationError()); + } +} diff --git a/extensions/ipynb/src/ipynbMain.browser.ts b/extensions/ipynb/src/ipynbMain.browser.ts new file mode 100644 index 000000000..030a6b541 --- /dev/null +++ b/extensions/ipynb/src/ipynbMain.browser.ts @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import * as main from './ipynbMain'; +import { NotebookSerializer } from './notebookSerializer.web'; + +export function activate(context: vscode.ExtensionContext) { + return main.activate(context, new NotebookSerializer(context)); +} + +export function deactivate() { + return main.deactivate(); +} diff --git a/extensions/ipynb/src/ipynbMain.node.ts b/extensions/ipynb/src/ipynbMain.node.ts new file mode 100644 index 000000000..3ec39fee6 --- /dev/null +++ b/extensions/ipynb/src/ipynbMain.node.ts @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import * as main from './ipynbMain'; +import { NotebookSerializer } from './notebookSerializer.node'; + +export function activate(context: vscode.ExtensionContext) { + return main.activate(context, new NotebookSerializer(context)); +} + +export function deactivate() { + return main.deactivate(); +} diff --git a/extensions/ipynb/src/ipynbMain.ts b/extensions/ipynb/src/ipynbMain.ts index 6d73107ef..5dc9098a9 100644 --- a/extensions/ipynb/src/ipynbMain.ts +++ b/extensions/ipynb/src/ipynbMain.ts @@ -4,11 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { NotebookSerializer } from './notebookSerializer'; import { activate as keepNotebookModelStoreInSync } from './notebookModelStoreSync'; import { notebookImagePasteSetup } from './notebookImagePaste'; import { AttachmentCleaner } from './notebookAttachmentCleaner'; -import { useCustomPropertyInMetadata } from './common'; +import { serializeNotebookToString } from './serializers'; // From {nbformat.INotebookMetadata} in @jupyterlab/coreutils type NotebookMetadata = { @@ -29,16 +28,11 @@ type NotebookMetadata = { [propName: string]: unknown; }; -export function activate(context: vscode.ExtensionContext) { - const serializer = new NotebookSerializer(context); +export function activate(context: vscode.ExtensionContext, serializer: vscode.NotebookSerializer) { keepNotebookModelStoreInSync(context); context.subscriptions.push(vscode.workspace.registerNotebookSerializer('jupyter-notebook', serializer, { transientOutputs: false, - transientCellMetadata: useCustomPropertyInMetadata() ? { - breakpointMargin: true, - custom: false, - attachments: false - } : { + transientCellMetadata: { breakpointMargin: true, id: false, metadata: false, @@ -51,11 +45,7 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.workspace.registerNotebookSerializer('interactive', serializer, { transientOutputs: false, - transientCellMetadata: useCustomPropertyInMetadata() ? { - breakpointMargin: true, - custom: false, - attachments: false - } : { + transientCellMetadata: { breakpointMargin: true, id: false, metadata: false, @@ -84,14 +74,7 @@ export function activate(context: vscode.ExtensionContext) { const language = 'python'; const cell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, '', language); const data = new vscode.NotebookData([cell]); - data.metadata = useCustomPropertyInMetadata() ? { - custom: { - cells: [], - metadata: {}, - nbformat: 4, - nbformat_minor: 2 - } - } : { + data.metadata = { cells: [], metadata: {}, nbformat: 4, @@ -119,10 +102,10 @@ export function activate(context: vscode.ExtensionContext) { return { get dropCustomMetadata() { - return !useCustomPropertyInMetadata(); + return true; }, - exportNotebook: (notebook: vscode.NotebookData): string => { - return exportNotebook(notebook, serializer); + exportNotebook: (notebook: vscode.NotebookData): Promise => { + return Promise.resolve(serializeNotebookToString(notebook)); }, setNotebookMetadata: async (resource: vscode.Uri, metadata: Partial): Promise => { const document = vscode.workspace.notebookDocuments.find(doc => doc.uri.toString() === resource.toString()); @@ -131,33 +114,16 @@ export function activate(context: vscode.ExtensionContext) { } const edit = new vscode.WorkspaceEdit(); - if (useCustomPropertyInMetadata()) { - edit.set(resource, [vscode.NotebookEdit.updateNotebookMetadata({ - ...document.metadata, - custom: { - ...(document.metadata.custom ?? {}), - metadata: { - ...(document.metadata.custom?.metadata ?? {}), - ...metadata - }, - } - })]); - } else { - edit.set(resource, [vscode.NotebookEdit.updateNotebookMetadata({ - ...document.metadata, - metadata: { - ...(document.metadata.metadata ?? {}), - ...metadata - }, - })]); - } + edit.set(resource, [vscode.NotebookEdit.updateNotebookMetadata({ + ...document.metadata, + metadata: { + ...(document.metadata.metadata ?? {}), + ...metadata + }, + })]); return vscode.workspace.applyEdit(edit); }, }; } -function exportNotebook(notebook: vscode.NotebookData, serializer: NotebookSerializer): string { - return serializer.serializeNotebookToString(notebook); -} - export function deactivate() { } diff --git a/extensions/ipynb/src/notebookModelStoreSync.ts b/extensions/ipynb/src/notebookModelStoreSync.ts index a32662164..451085718 100644 --- a/extensions/ipynb/src/notebookModelStoreSync.ts +++ b/extensions/ipynb/src/notebookModelStoreSync.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { Disposable, ExtensionContext, NotebookCellKind, NotebookDocument, NotebookDocumentChangeEvent, NotebookEdit, workspace, WorkspaceEdit, type NotebookCell, type NotebookDocumentWillSaveEvent } from 'vscode'; -import { getCellMetadata, getVSCodeCellLanguageId, removeVSCodeCellLanguageId, setVSCodeCellLanguageId, sortObjectPropertiesRecursively } from './serializers'; -import { CellMetadata, useCustomPropertyInMetadata } from './common'; -import { getNotebookMetadata } from './notebookSerializer'; +import { getCellMetadata, getVSCodeCellLanguageId, removeVSCodeCellLanguageId, setVSCodeCellLanguageId, sortObjectPropertiesRecursively, getNotebookMetadata } from './serializers'; +import { CellMetadata } from './common'; import type * as nbformat from '@jupyterlab/nbformat'; +import { generateUuid } from './helper'; const noop = () => { // @@ -108,17 +108,12 @@ function trackAndUpdateCellMetadata(notebook: NotebookDocument, updates: { cell: pendingNotebookCellModelUpdates.set(notebook, pendingUpdates); const edit = new WorkspaceEdit(); updates.forEach(({ cell, metadata }) => { - let newMetadata: any = {}; - if (useCustomPropertyInMetadata()) { - newMetadata = { ...(cell.metadata), custom: metadata }; - } else { - newMetadata = { ...cell.metadata, ...metadata }; - if (!metadata.execution_count && newMetadata.execution_count) { - delete newMetadata.execution_count; - } - if (!metadata.attachments && newMetadata.attachments) { - delete newMetadata.attachments; - } + const newMetadata = { ...cell.metadata, ...metadata }; + if (!metadata.execution_count && newMetadata.execution_count) { + delete newMetadata.execution_count; + } + if (!metadata.attachments && newMetadata.attachments) { + delete newMetadata.attachments; } edit.set(cell.notebook.uri, [NotebookEdit.updateCellMetadata(cell.index, sortObjectPropertiesRecursively(newMetadata))]); }); @@ -247,55 +242,3 @@ function generateCellId(notebook: NotebookDocument) { } } - -/** - * Copied from src/vs/base/common/uuid.ts - */ -function generateUuid() { - // use `randomValues` if possible - function getRandomValues(bucket: Uint8Array): Uint8Array { - for (let i = 0; i < bucket.length; i++) { - bucket[i] = Math.floor(Math.random() * 256); - } - return bucket; - } - - // prep-work - const _data = new Uint8Array(16); - const _hex: string[] = []; - for (let i = 0; i < 256; i++) { - _hex.push(i.toString(16).padStart(2, '0')); - } - - // get data - getRandomValues(_data); - - // set version bits - _data[6] = (_data[6] & 0x0f) | 0x40; - _data[8] = (_data[8] & 0x3f) | 0x80; - - // print as string - let i = 0; - let result = ''; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += '-'; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += '-'; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += '-'; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += '-'; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - result += _hex[_data[i++]]; - return result; -} diff --git a/extensions/ipynb/src/notebookSerializer.node.ts b/extensions/ipynb/src/notebookSerializer.node.ts new file mode 100644 index 000000000..5a6a21018 --- /dev/null +++ b/extensions/ipynb/src/notebookSerializer.node.ts @@ -0,0 +1,91 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { DeferredPromise, generateUuid } from './helper'; +import { NotebookSerializerBase } from './notebookSerializer'; + +export class NotebookSerializer extends NotebookSerializerBase { + private experimentalSave = vscode.workspace.getConfiguration('ipynb').get('experimental.serialization', false); + private worker?: import('node:worker_threads').Worker; + private tasks = new Map>(); + + constructor(context: vscode.ExtensionContext) { + super(context); + context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('ipynb.experimental.serialization')) { + this.experimentalSave = vscode.workspace.getConfiguration('ipynb').get('experimental.serialization', false); + } + })); + } + + override dispose() { + try { + void this.worker?.terminate(); + } catch { + // + } + super.dispose(); + } + + public override async serializeNotebook(data: vscode.NotebookData, token: vscode.CancellationToken): Promise { + if (this.disposed) { + return new Uint8Array(0); + } + + if (this.experimentalSave) { + return this.serializeViaWorker(data); + } + + return super.serializeNotebook(data, token); + } + + private async startWorker() { + if (this.disposed) { + throw new Error('Serializer disposed'); + } + if (this.worker) { + return this.worker; + } + const { Worker } = await import('node:worker_threads'); + const outputDir = getOutputDir(this.context); + this.worker = new Worker(vscode.Uri.joinPath(this.context.extensionUri, outputDir, 'notebookSerializerWorker.js').fsPath, {}); + this.worker.on('exit', (exitCode) => { + if (!this.disposed) { + console.error(`IPynb Notebook Serializer Worker exited unexpectedly`, exitCode); + } + this.worker = undefined; + }); + this.worker.on('message', (result: { data: Uint8Array; id: string }) => { + const task = this.tasks.get(result.id); + if (task) { + task.complete(result.data); + this.tasks.delete(result.id); + } + }); + this.worker.on('error', (err) => { + if (!this.disposed) { + console.error(`IPynb Notebook Serializer Worker errored unexpectedly`, err); + } + }); + return this.worker; + } + private async serializeViaWorker(data: vscode.NotebookData): Promise { + const worker = await this.startWorker(); + const id = generateUuid(); + + const deferred = new DeferredPromise(); + this.tasks.set(id, deferred); + worker.postMessage({ data, id }); + + return deferred.p; + } +} + + +function getOutputDir(context: vscode.ExtensionContext): string { + const main = context.extension.packageJSON.main as string; + return main.indexOf('/dist/') !== -1 ? 'dist' : 'out'; +} diff --git a/extensions/ipynb/src/notebookSerializer.ts b/extensions/ipynb/src/notebookSerializer.ts index 1d44a4588..898b4ff93 100644 --- a/extensions/ipynb/src/notebookSerializer.ts +++ b/extensions/ipynb/src/notebookSerializer.ts @@ -6,14 +6,19 @@ import type * as nbformat from '@jupyterlab/nbformat'; import * as detectIndent from 'detect-indent'; import * as vscode from 'vscode'; -import { defaultNotebookFormat } from './constants'; import { getPreferredLanguage, jupyterNotebookModelToNotebookData } from './deserializers'; -import { createJupyterCellFromNotebookCell, pruneCell, sortObjectPropertiesRecursively } from './serializers'; import * as fnv from '@enonic/fnv-plus'; -import { useCustomPropertyInMetadata } from './common'; +import { serializeNotebookToString } from './serializers'; -export class NotebookSerializer implements vscode.NotebookSerializer { - constructor(readonly context: vscode.ExtensionContext) { +export abstract class NotebookSerializerBase extends vscode.Disposable implements vscode.NotebookSerializer { + protected disposed: boolean = false; + constructor(protected readonly context: vscode.ExtensionContext) { + super(() => { }); + } + + override dispose() { + this.disposed = true; + super.dispose(); } public async deserializeNotebook(content: Uint8Array, _token: vscode.CancellationToken): Promise { @@ -52,13 +57,6 @@ export class NotebookSerializer implements vscode.NotebookSerializer { // Ensure we always have a blank cell. if ((json.cells || []).length === 0) { json.cells = [ - { - cell_type: 'code', - execution_count: null, - metadata: {}, - outputs: [], - source: '' - } ]; } @@ -78,33 +76,13 @@ export class NotebookSerializer implements vscode.NotebookSerializer { return data; } - public serializeNotebook(data: vscode.NotebookData, _token: vscode.CancellationToken): Uint8Array { - return new TextEncoder().encode(this.serializeNotebookToString(data)); - } - - public serializeNotebookToString(data: vscode.NotebookData): string { - const notebookContent = getNotebookMetadata(data); - // use the preferred language from document metadata or the first cell language as the notebook preferred cell language - const preferredCellLanguage = notebookContent.metadata?.language_info?.name ?? data.cells.find(cell => cell.kind === vscode.NotebookCellKind.Code)?.languageId; - - notebookContent.cells = data.cells - .map(cell => createJupyterCellFromNotebookCell(cell, preferredCellLanguage)) - .map(pruneCell); + public async serializeNotebook(data: vscode.NotebookData, _token: vscode.CancellationToken): Promise { + if (this.disposed) { + return new Uint8Array(0); + } - const indentAmount = data.metadata && 'indentAmount' in data.metadata && typeof data.metadata.indentAmount === 'string' ? - data.metadata.indentAmount : - ' '; - // ipynb always ends with a trailing new line (we add this so that SCMs do not show unnecessary changes, resulting from a missing trailing new line). - return JSON.stringify(sortObjectPropertiesRecursively(notebookContent), undefined, indentAmount) + '\n'; + const serialized = serializeNotebookToString(data); + return new TextEncoder().encode(serialized); } -} -export function getNotebookMetadata(document: vscode.NotebookDocument | vscode.NotebookData) { - const existingContent: Partial = (useCustomPropertyInMetadata() ? document.metadata?.custom : document.metadata) || {}; - const notebookContent: Partial = {}; - notebookContent.cells = existingContent.cells || []; - notebookContent.nbformat = existingContent.nbformat || defaultNotebookFormat.major; - notebookContent.nbformat_minor = existingContent.nbformat_minor ?? defaultNotebookFormat.minor; - notebookContent.metadata = existingContent.metadata || {}; - return notebookContent; } diff --git a/src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemChangesMenu.d.ts b/extensions/ipynb/src/notebookSerializer.web.ts similarity index 70% rename from src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemChangesMenu.d.ts rename to extensions/ipynb/src/notebookSerializer.web.ts index a9d758fa2..6352cb97d 100644 --- a/src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemChangesMenu.d.ts +++ b/extensions/ipynb/src/notebookSerializer.web.ts @@ -3,5 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// empty placeholder declaration for the `scm/historyItemChanges/title`-menu contribution point -// https://github.com/microsoft/vscode/issues/201997 +import { NotebookSerializerBase } from './notebookSerializer'; + +export class NotebookSerializer extends NotebookSerializerBase { +} diff --git a/extensions/ipynb/src/notebookSerializerWorker.ts b/extensions/ipynb/src/notebookSerializerWorker.ts new file mode 100644 index 000000000..594af6da7 --- /dev/null +++ b/extensions/ipynb/src/notebookSerializerWorker.ts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { parentPort } from 'worker_threads'; +import { serializeNotebookToString } from './serializers'; +import type { NotebookData } from 'vscode'; + + +if (parentPort) { + parentPort.on('message', ({ id, data }: { id: string; data: NotebookData }) => { + if (parentPort) { + const json = serializeNotebookToString(data); + const bytes = new TextEncoder().encode(json); + parentPort.postMessage({ id, data: bytes }); + } + }); +} diff --git a/extensions/ipynb/src/serializers.ts b/extensions/ipynb/src/serializers.ts index eedad8027..e1896ee3b 100644 --- a/extensions/ipynb/src/serializers.ts +++ b/extensions/ipynb/src/serializers.ts @@ -4,24 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import type * as nbformat from '@jupyterlab/nbformat'; -import { NotebookCell, NotebookCellData, NotebookCellKind, NotebookCellOutput } from 'vscode'; -import { CellOutputMetadata, useCustomPropertyInMetadata, type CellMetadata } from './common'; -import { textMimeTypes } from './deserializers'; +import type { NotebookCell, NotebookCellData, NotebookCellOutput, NotebookData, NotebookDocument } from 'vscode'; +import { CellOutputMetadata, type CellMetadata } from './common'; +import { textMimeTypes, NotebookCellKindMarkup, CellOutputMimeTypes, defaultNotebookFormat } from './constants'; const textDecoder = new TextDecoder(); -enum CellOutputMimeTypes { - error = 'application/vnd.code.notebook.error', - stderr = 'application/vnd.code.notebook.stderr', - stdout = 'application/vnd.code.notebook.stdout' -} - export function createJupyterCellFromNotebookCell( vscCell: NotebookCellData, - preferredLanguage: string | undefined + preferredLanguage: string | undefined, ): nbformat.IRawCell | nbformat.IMarkdownCell | nbformat.ICodeCell { let cell: nbformat.IRawCell | nbformat.IMarkdownCell | nbformat.ICodeCell; - if (vscCell.kind === NotebookCellKind.Markup) { + if (vscCell.kind === NotebookCellKindMarkup) { cell = createMarkdownCellFromNotebookCell(vscCell); } else if (vscCell.languageId === 'raw') { cell = createRawCellFromNotebookCell(vscCell); @@ -57,18 +51,6 @@ export function sortObjectPropertiesRecursively(obj: any): any { export function getCellMetadata(options: { cell: NotebookCell | NotebookCellData } | { metadata?: { [key: string]: any } }): CellMetadata { if ('cell' in options) { const cell = options.cell; - if (useCustomPropertyInMetadata()) { - const metadata: CellMetadata = { - // it contains the cell id, and the cell metadata, along with other nb cell metadata - ...(cell.metadata?.custom ?? {}) - }; - // promote the cell attachments to the top level - const attachments = cell.metadata?.custom?.attachments ?? cell.metadata?.attachments; - if (attachments) { - metadata.attachments = attachments; - } - return metadata; - } const metadata = { // it contains the cell id, and the cell metadata, along with other nb cell metadata ...(cell.metadata ?? {}) @@ -77,18 +59,6 @@ export function getCellMetadata(options: { cell: NotebookCell | NotebookCellData return metadata; } else { const cell = options; - if (useCustomPropertyInMetadata()) { - const metadata: CellMetadata = { - // it contains the cell id, and the cell metadata, along with other nb cell metadata - ...(cell.metadata?.custom ?? {}) - }; - // promote the cell attachments to the top level - const attachments = cell.metadata?.custom?.attachments ?? cell.metadata?.attachments; - if (attachments) { - metadata.attachments = attachments; - } - return metadata; - } const metadata = { // it contains the cell id, and the cell metadata, along with other nb cell metadata ...(cell.metadata ?? {}) @@ -121,12 +91,15 @@ function createCodeCellFromNotebookCell(cell: NotebookCellData, preferredLanguag removeVSCodeCellLanguageId(cellMetadata); } - const codeCell: any = { + const codeCell: nbformat.ICodeCell = { cell_type: 'code', - // Possible the metadata was edited as part of diff view - // In diff view we display execution_count as part of metadata, hence when execution count changes in metadata, - // We need to change that here as well, i.e. give preference to any execution_count value in metadata. - execution_count: cellMetadata.execution_count ?? cell.executionSummary?.executionOrder ?? null, + // Metadata should always contain the execution_count. + // When ever execution summary data changes we will update the metadata to contain the execution count. + // Failing to do so means we have a problem. + // Also do not read the value of executionSummary here, as its possible user reverted changes to metadata + // & in that case execution summary could contain the data, but metadata will not. + // In such cases we do not want to re-set the metadata with the value from execution summary (remember, user reverted that). + execution_count: cellMetadata.execution_count ?? null, source: splitMultilineString(cell.value.replace(/\r\n/g, '\n')), outputs: (cell.outputs || []).map(translateCellDisplayOutput), metadata: cellMetadata.metadata @@ -472,3 +445,36 @@ function fixupOutput(output: nbformat.IOutput): nbformat.IOutput { } return result; } + + +export function serializeNotebookToString(data: NotebookData): string { + const notebookContent = getNotebookMetadata(data); + // use the preferred language from document metadata or the first cell language as the notebook preferred cell language + const preferredCellLanguage = notebookContent.metadata?.language_info?.name ?? data.cells.find(cell => cell.kind === 2)?.languageId; + + notebookContent.cells = data.cells + .map(cell => createJupyterCellFromNotebookCell(cell, preferredCellLanguage)) + .map(pruneCell); + + const indentAmount = data.metadata && 'indentAmount' in data.metadata && typeof data.metadata.indentAmount === 'string' ? + data.metadata.indentAmount : + ' '; + + return serializeNotebookToJSON(notebookContent, indentAmount); +} +function serializeNotebookToJSON(notebookContent: Partial, indentAmount: string): string { + // ipynb always ends with a trailing new line (we add this so that SCMs do not show unnecessary changes, resulting from a missing trailing new line). + const sorted = sortObjectPropertiesRecursively(notebookContent); + + return JSON.stringify(sorted, undefined, indentAmount) + '\n'; +} + +export function getNotebookMetadata(document: NotebookDocument | NotebookData) { + const existingContent: Partial = document.metadata || {}; + const notebookContent: Partial = {}; + notebookContent.cells = existingContent.cells || []; + notebookContent.nbformat = existingContent.nbformat || defaultNotebookFormat.major; + notebookContent.nbformat_minor = existingContent.nbformat_minor ?? defaultNotebookFormat.minor; + notebookContent.metadata = existingContent.metadata || {}; + return notebookContent; +} diff --git a/extensions/ipynb/src/test/notebookModelStoreSync.test.ts b/extensions/ipynb/src/test/notebookModelStoreSync.test.ts index 1afca8c12..acb6ec546 100644 --- a/extensions/ipynb/src/test/notebookModelStoreSync.test.ts +++ b/extensions/ipynb/src/test/notebookModelStoreSync.test.ts @@ -8,673 +8,525 @@ import * as sinon from 'sinon'; import { CancellationTokenSource, Disposable, EventEmitter, ExtensionContext, NotebookCellKind, NotebookDocumentChangeEvent, NotebookDocumentWillSaveEvent, NotebookEdit, NotebookRange, TextDocumentSaveReason, workspace, type CancellationToken, type NotebookCell, type NotebookDocument, type WorkspaceEdit, type WorkspaceEditMetadata } from 'vscode'; import { activate } from '../notebookModelStoreSync'; -[true, false].forEach(useCustomPropertyInMetadata => { - suite(`Notebook Model Store Sync (${useCustomPropertyInMetadata ? 'with custom metadata (standard behaviour)' : 'without custom metadata'})`, () => { - let disposables: Disposable[] = []; - let onDidChangeNotebookDocument: EventEmitter; - let onWillSaveNotebookDocument: AsyncEmitter; - let notebook: NotebookDocument; - let token: CancellationTokenSource; - let editsApplied: WorkspaceEdit[] = []; - let pendingPromises: Promise[] = []; - let cellMetadataUpdates: NotebookEdit[] = []; - let applyEditStub: sinon.SinonStub<[edit: WorkspaceEdit, metadata?: WorkspaceEditMetadata | undefined], Thenable>; - setup(() => { - disposables = []; - notebook = { - notebookType: '', - metadata: {} - } as NotebookDocument; - sinon.stub(workspace, 'getConfiguration').callsFake((section, scope) => { - if (section === 'jupyter') { - return { - get: () => { - return !useCustomPropertyInMetadata; - } - }; - } else { - return (workspace.getConfiguration as any).wrappedMethod.call(workspace, section, scope); - } - }); - token = new CancellationTokenSource(); - disposables.push(token); - sinon.stub(notebook, 'notebookType').get(() => 'jupyter-notebook'); - applyEditStub = sinon.stub(workspace, 'applyEdit').callsFake((edit: WorkspaceEdit) => { - editsApplied.push(edit); - return Promise.resolve(true); - }); - const context = { subscriptions: [] as Disposable[] } as ExtensionContext; - onDidChangeNotebookDocument = new EventEmitter(); - disposables.push(onDidChangeNotebookDocument); - onWillSaveNotebookDocument = new AsyncEmitter(); - - sinon.stub(NotebookEdit, 'updateCellMetadata').callsFake((index, metadata) => { - const edit = (NotebookEdit.updateCellMetadata as any).wrappedMethod.call(NotebookEdit, index, metadata); - cellMetadataUpdates.push(edit); - return edit; - } - ); - sinon.stub(workspace, 'onDidChangeNotebookDocument').callsFake(cb => - onDidChangeNotebookDocument.event(cb) - ); - sinon.stub(workspace, 'onWillSaveNotebookDocument').callsFake(cb => - onWillSaveNotebookDocument.event(cb) - ); - activate(context); - }); - teardown(async () => { - await Promise.allSettled(pendingPromises); - editsApplied = []; - pendingPromises = []; - cellMetadataUpdates = []; - disposables.forEach(d => d.dispose()); - disposables = []; - sinon.restore(); +suite(`Notebook Model Store Sync`, () => { + let disposables: Disposable[] = []; + let onDidChangeNotebookDocument: EventEmitter; + let onWillSaveNotebookDocument: AsyncEmitter; + let notebook: NotebookDocument; + let token: CancellationTokenSource; + let editsApplied: WorkspaceEdit[] = []; + let pendingPromises: Promise[] = []; + let cellMetadataUpdates: NotebookEdit[] = []; + let applyEditStub: sinon.SinonStub<[edit: WorkspaceEdit, metadata?: WorkspaceEditMetadata | undefined], Thenable>; + setup(() => { + disposables = []; + notebook = { + notebookType: '', + metadata: {} + } as NotebookDocument; + token = new CancellationTokenSource(); + disposables.push(token); + sinon.stub(notebook, 'notebookType').get(() => 'jupyter-notebook'); + applyEditStub = sinon.stub(workspace, 'applyEdit').callsFake((edit: WorkspaceEdit) => { + editsApplied.push(edit); + return Promise.resolve(true); }); + const context = { subscriptions: [] as Disposable[] } as ExtensionContext; + onDidChangeNotebookDocument = new EventEmitter(); + disposables.push(onDidChangeNotebookDocument); + onWillSaveNotebookDocument = new AsyncEmitter(); + + sinon.stub(NotebookEdit, 'updateCellMetadata').callsFake((index, metadata) => { + const edit = (NotebookEdit.updateCellMetadata as any).wrappedMethod.call(NotebookEdit, index, metadata); + cellMetadataUpdates.push(edit); + return edit; + } + ); + sinon.stub(workspace, 'onDidChangeNotebookDocument').callsFake(cb => + onDidChangeNotebookDocument.event(cb) + ); + sinon.stub(workspace, 'onWillSaveNotebookDocument').callsFake(cb => + onWillSaveNotebookDocument.event(cb) + ); + activate(context); + }); + teardown(async () => { + await Promise.allSettled(pendingPromises); + editsApplied = []; + pendingPromises = []; + cellMetadataUpdates = []; + disposables.forEach(d => d.dispose()); + disposables = []; + sinon.restore(); + }); - test('Empty cell will not result in any updates', async () => { - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [], - cellChanges: [] - }; + test('Empty cell will not result in any updates', async () => { + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [], + cellChanges: [] + }; - onDidChangeNotebookDocument.fire(e); + onDidChangeNotebookDocument.fire(e); - assert.strictEqual(editsApplied.length, 0); - }); - test('Adding cell for non Jupyter Notebook will not result in any updates', async () => { - sinon.stub(notebook, 'notebookType').get(() => 'some-other-type'); - const cell: NotebookCell = { - document: {} as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: {}, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [ - { - range: new NotebookRange(0, 0), - removedCells: [], - addedCells: [cell] - } - ], - cellChanges: [] - }; + assert.strictEqual(editsApplied.length, 0); + }); + test('Adding cell for non Jupyter Notebook will not result in any updates', async () => { + sinon.stub(notebook, 'notebookType').get(() => 'some-other-type'); + const cell: NotebookCell = { + document: {} as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: {}, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [ + { + range: new NotebookRange(0, 0), + removedCells: [], + addedCells: [cell] + } + ], + cellChanges: [] + }; - onDidChangeNotebookDocument.fire(e); + onDidChangeNotebookDocument.fire(e); - assert.strictEqual(editsApplied.length, 0); - assert.strictEqual(cellMetadataUpdates.length, 0); - }); - test('Adding cell will result in an update to the metadata', async () => { - const cell: NotebookCell = { - document: {} as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: {}, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [ - { - range: new NotebookRange(0, 0), - removedCells: [], - addedCells: [cell] - } - ], - cellChanges: [] - }; + assert.strictEqual(editsApplied.length, 0); + assert.strictEqual(cellMetadataUpdates.length, 0); + }); + test('Adding cell will result in an update to the metadata', async () => { + const cell: NotebookCell = { + document: {} as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: {}, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [ + { + range: new NotebookRange(0, 0), + removedCells: [], + addedCells: [cell] + } + ], + cellChanges: [] + }; - onDidChangeNotebookDocument.fire(e); + onDidChangeNotebookDocument.fire(e); - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); - const newMetadata = cellMetadataUpdates[0].newCellMetadata; - if (useCustomPropertyInMetadata) { - assert.deepStrictEqual(newMetadata, { custom: { metadata: {} } }); - } else { - assert.deepStrictEqual(newMetadata, { metadata: {} }); - } - }); - test('Add cell id if nbformat is 4.5', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ custom: { nbformat: 4, nbformat_minor: 5 } })); - } else { - sinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 })); - } - const cell: NotebookCell = { - document: {} as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: {}, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [ - { - range: new NotebookRange(0, 0), - removedCells: [], - addedCells: [cell] - } - ], - cellChanges: [] - }; + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); + const newMetadata = cellMetadataUpdates[0].newCellMetadata; + assert.deepStrictEqual(newMetadata, { metadata: {} }); + }); + test('Add cell id if nbformat is 4.5', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 })); + const cell: NotebookCell = { + document: {} as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: {}, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [ + { + range: new NotebookRange(0, 0), + removedCells: [], + addedCells: [cell] + } + ], + cellChanges: [] + }; + + onDidChangeNotebookDocument.fire(e); + + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); + const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; + assert.strictEqual(Object.keys(newMetadata).length, 2); + assert.deepStrictEqual(newMetadata.metadata, {}); + assert.ok(newMetadata.id); + }); + test('Do not add cell id if one already exists', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 })); + const cell: NotebookCell = { + document: {} as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: { + id: '1234' + }, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [ + { + range: new NotebookRange(0, 0), + removedCells: [], + addedCells: [cell] + } + ], + cellChanges: [] + }; + + onDidChangeNotebookDocument.fire(e); + + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); + const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; + assert.strictEqual(Object.keys(newMetadata).length, 2); + assert.deepStrictEqual(newMetadata.metadata, {}); + assert.strictEqual(newMetadata.id, '1234'); + }); + test('Do not perform any updates if cell id and metadata exists', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 })); + const cell: NotebookCell = { + document: {} as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: { + id: '1234', + metadata: {} + }, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [ + { + range: new NotebookRange(0, 0), + removedCells: [], + addedCells: [cell] + } + ], + cellChanges: [] + }; - onDidChangeNotebookDocument.fire(e); - - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); - const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; - if (useCustomPropertyInMetadata) { - assert.strictEqual(Object.keys(newMetadata).length, 1); - assert.strictEqual(Object.keys(newMetadata.custom).length, 2); - assert.deepStrictEqual(newMetadata.custom.metadata, {}); - assert.ok(newMetadata.custom.id); - } else { - assert.strictEqual(Object.keys(newMetadata).length, 2); - assert.deepStrictEqual(newMetadata.metadata, {}); - assert.ok(newMetadata.id); - } - }); - test('Do not add cell id if one already exists', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ custom: { nbformat: 4, nbformat_minor: 5 } })); - } else { - sinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 })); - } - const cell: NotebookCell = { - document: {} as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: useCustomPropertyInMetadata ? { - custom: { - id: '1234' - } - } : { - id: '1234' - }, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [ - { - range: new NotebookRange(0, 0), - removedCells: [], - addedCells: [cell] - } - ], - cellChanges: [] - }; + onDidChangeNotebookDocument.fire(e); - onDidChangeNotebookDocument.fire(e); - - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); - const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; - if (useCustomPropertyInMetadata) { - assert.strictEqual(Object.keys(newMetadata).length, 1); - assert.strictEqual(Object.keys(newMetadata.custom).length, 2); - assert.deepStrictEqual(newMetadata.custom.metadata, {}); - assert.strictEqual(newMetadata.custom.id, '1234'); - } else { - assert.strictEqual(Object.keys(newMetadata).length, 2); - assert.deepStrictEqual(newMetadata.metadata, {}); - assert.strictEqual(newMetadata.id, '1234'); - } - }); - test('Do not perform any updates if cell id and metadata exists', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ custom: { nbformat: 4, nbformat_minor: 5 } })); - } else { - sinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 })); + assert.strictEqual(editsApplied.length, 0); + assert.strictEqual(cellMetadataUpdates.length, 0); + }); + test('Store language id in custom metadata, whilst preserving existing metadata', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ + nbformat: 4, nbformat_minor: 5, + metadata: { + language_info: { name: 'python' } } - const cell: NotebookCell = { - document: {} as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: useCustomPropertyInMetadata ? { - custom: { - id: '1234', - metadata: {} - } - } : { - id: '1234', - metadata: {} - }, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [ - { - range: new NotebookRange(0, 0), - removedCells: [], - addedCells: [cell] - } - ], - cellChanges: [] - }; - - onDidChangeNotebookDocument.fire(e); + })); + const cell: NotebookCell = { + document: { + languageId: 'javascript' + } as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: { + id: '1234', + metadata: { + collapsed: true, scrolled: true + } + }, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [], + cellChanges: [ + { + cell, + document: { + languageId: 'javascript' + } as any, + metadata: undefined, + outputs: undefined, + executionSummary: undefined + } + ] + }; - assert.strictEqual(editsApplied.length, 0); - assert.strictEqual(cellMetadataUpdates.length, 0); - }); - test('Store language id in custom metadata, whilst preserving existing metadata', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ - custom: { - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'python' } - } - } - })); - } else { - sinon.stub(notebook, 'metadata').get(() => ({ - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'python' } - } - })); - } - const cell: NotebookCell = { - document: { - languageId: 'javascript' - } as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: useCustomPropertyInMetadata ? { - custom: { - id: '1234', - metadata: { - collapsed: true, scrolled: true - } - } - } : { - id: '1234', - metadata: { - collapsed: true, scrolled: true - } - }, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [], - cellChanges: [ - { - cell, - document: { - languageId: 'javascript' - } as any, - metadata: undefined, - outputs: undefined, - executionSummary: undefined - } - ] - }; + onDidChangeNotebookDocument.fire(e); - onDidChangeNotebookDocument.fire(e); - - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); - const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; - if (useCustomPropertyInMetadata) { - assert.strictEqual(Object.keys(newMetadata).length, 1); - assert.strictEqual(Object.keys(newMetadata.custom).length, 2); - assert.deepStrictEqual(newMetadata.custom.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'javascript' } }); - assert.strictEqual(newMetadata.custom.id, '1234'); - } else { - assert.strictEqual(Object.keys(newMetadata).length, 2); - assert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'javascript' } }); - assert.strictEqual(newMetadata.id, '1234'); - } - }); - test('No changes when language is javascript', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ - custom: { - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'javascript' } - } - } - })); - } else { - sinon.stub(notebook, 'metadata').get(() => ({ - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'javascript' } - } - })); + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); + const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; + assert.strictEqual(Object.keys(newMetadata).length, 2); + assert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'javascript' } }); + assert.strictEqual(newMetadata.id, '1234'); + }); + test('No changes when language is javascript', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ + nbformat: 4, nbformat_minor: 5, + metadata: { + language_info: { name: 'javascript' } } - const cell: NotebookCell = { - document: { - languageId: 'javascript' - } as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: useCustomPropertyInMetadata ? { - custom: { - id: '1234', - metadata: { - collapsed: true, scrolled: true - } - } - } : { - id: '1234', - metadata: { - collapsed: true, scrolled: true - } - }, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [], - cellChanges: [ - { - cell, - document: undefined, - metadata: undefined, - outputs: undefined, - executionSummary: undefined - } - ] - }; + })); + const cell: NotebookCell = { + document: { + languageId: 'javascript' + } as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: { + id: '1234', + metadata: { + collapsed: true, scrolled: true + } + }, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [], + cellChanges: [ + { + cell, + document: undefined, + metadata: undefined, + outputs: undefined, + executionSummary: undefined + } + ] + }; - onDidChangeNotebookDocument.fire(e); + onDidChangeNotebookDocument.fire(e); - assert.strictEqual(editsApplied.length, 0); - assert.strictEqual(cellMetadataUpdates.length, 0); - }); - test('Remove language from metadata when cell language matches kernel language', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ - custom: { - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'javascript' } - } - } - })); - } else { - sinon.stub(notebook, 'metadata').get(() => ({ - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'javascript' } - } - })); + assert.strictEqual(editsApplied.length, 0); + assert.strictEqual(cellMetadataUpdates.length, 0); + }); + test('Remove language from metadata when cell language matches kernel language', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ + nbformat: 4, nbformat_minor: 5, + metadata: { + language_info: { name: 'javascript' } } - const cell: NotebookCell = { - document: { - languageId: 'javascript' - } as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: useCustomPropertyInMetadata ? { - custom: { - id: '1234', - metadata: { - vscode: { languageId: 'python' }, - collapsed: true, scrolled: true - } - } - } : { - id: '1234', - metadata: { - vscode: { languageId: 'python' }, - collapsed: true, scrolled: true - } - }, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [], - cellChanges: [ - { - cell, - document: { - languageId: 'javascript' - } as any, - metadata: undefined, - outputs: undefined, - executionSummary: undefined - } - ] - }; + })); + const cell: NotebookCell = { + document: { + languageId: 'javascript' + } as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: { + id: '1234', + metadata: { + vscode: { languageId: 'python' }, + collapsed: true, scrolled: true + } + }, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [], + cellChanges: [ + { + cell, + document: { + languageId: 'javascript' + } as any, + metadata: undefined, + outputs: undefined, + executionSummary: undefined + } + ] + }; - onDidChangeNotebookDocument.fire(e); - - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); - const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; - if (useCustomPropertyInMetadata) { - assert.strictEqual(Object.keys(newMetadata).length, 1); - assert.strictEqual(Object.keys(newMetadata.custom).length, 2); - assert.deepStrictEqual(newMetadata.custom.metadata, { collapsed: true, scrolled: true }); - assert.strictEqual(newMetadata.custom.id, '1234'); - } else { - assert.strictEqual(Object.keys(newMetadata).length, 2); - assert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true }); - assert.strictEqual(newMetadata.id, '1234'); - } - }); - test('Update language in metadata', async () => { - if (useCustomPropertyInMetadata) { - sinon.stub(notebook, 'metadata').get(() => ({ - custom: { - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'javascript' } - } - } - })); - } else { + onDidChangeNotebookDocument.fire(e); - sinon.stub(notebook, 'metadata').get(() => ({ - nbformat: 4, nbformat_minor: 5, - metadata: { - language_info: { name: 'javascript' } - } - })); + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); + const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; + assert.strictEqual(Object.keys(newMetadata).length, 2); + assert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true }); + assert.strictEqual(newMetadata.id, '1234'); + }); + test('Update language in metadata', async () => { + sinon.stub(notebook, 'metadata').get(() => ({ + nbformat: 4, nbformat_minor: 5, + metadata: { + language_info: { name: 'javascript' } } - const cell: NotebookCell = { - document: { - languageId: 'powershell' - } as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: useCustomPropertyInMetadata ? { - custom: { - id: '1234', - metadata: { - vscode: { languageId: 'python' }, - collapsed: true, scrolled: true - } - } - } : { - id: '1234', - metadata: { - vscode: { languageId: 'python' }, - collapsed: true, scrolled: true - } - }, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [], - cellChanges: [ - { - cell, - document: { - languageId: 'powershell' - } as any, - metadata: undefined, - outputs: undefined, - executionSummary: undefined - } - ] - }; + })); + const cell: NotebookCell = { + document: { + languageId: 'powershell' + } as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: { + id: '1234', + metadata: { + vscode: { languageId: 'python' }, + collapsed: true, scrolled: true + } + }, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [], + cellChanges: [ + { + cell, + document: { + languageId: 'powershell' + } as any, + metadata: undefined, + outputs: undefined, + executionSummary: undefined + } + ] + }; - onDidChangeNotebookDocument.fire(e); - - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); - const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; - if (useCustomPropertyInMetadata) { - assert.strictEqual(Object.keys(newMetadata).length, 1); - assert.strictEqual(Object.keys(newMetadata.custom).length, 2); - assert.deepStrictEqual(newMetadata.custom.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'powershell' } }); - assert.strictEqual(newMetadata.custom.id, '1234'); - } else { - assert.strictEqual(Object.keys(newMetadata).length, 2); - assert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'powershell' } }); - assert.strictEqual(newMetadata.id, '1234'); - } - }); + onDidChangeNotebookDocument.fire(e); - test('Will save event without any changes', async () => { - await onWillSaveNotebookDocument.fireAsync({ notebook, reason: TextDocumentSaveReason.Manual }, token.token); + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); + const newMetadata = cellMetadataUpdates[0].newCellMetadata || {}; + assert.strictEqual(Object.keys(newMetadata).length, 2); + assert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'powershell' } }); + assert.strictEqual(newMetadata.id, '1234'); + }); + + test('Will save event without any changes', async () => { + await onWillSaveNotebookDocument.fireAsync({ notebook, reason: TextDocumentSaveReason.Manual }, token.token); + }); + test('Wait for pending updates to complete when saving', async () => { + let resolveApplyEditPromise: (value: boolean) => void; + const promise = new Promise((resolve) => resolveApplyEditPromise = resolve); + applyEditStub.restore(); + sinon.stub(workspace, 'applyEdit').callsFake((edit: WorkspaceEdit) => { + editsApplied.push(edit); + return promise; }); - test('Wait for pending updates to complete when saving', async () => { - let resolveApplyEditPromise: (value: boolean) => void; - const promise = new Promise((resolve) => resolveApplyEditPromise = resolve); - applyEditStub.restore(); - sinon.stub(workspace, 'applyEdit').callsFake((edit: WorkspaceEdit) => { - editsApplied.push(edit); - return promise; - }); - const cell: NotebookCell = { - document: {} as any, - executionSummary: {}, - index: 0, - kind: NotebookCellKind.Code, - metadata: {}, - notebook, - outputs: [] - }; - const e: NotebookDocumentChangeEvent = { - notebook, - metadata: undefined, - contentChanges: [ - { - range: new NotebookRange(0, 0), - removedCells: [], - addedCells: [cell] - } - ], - cellChanges: [] - }; + const cell: NotebookCell = { + document: {} as any, + executionSummary: {}, + index: 0, + kind: NotebookCellKind.Code, + metadata: {}, + notebook, + outputs: [] + }; + const e: NotebookDocumentChangeEvent = { + notebook, + metadata: undefined, + contentChanges: [ + { + range: new NotebookRange(0, 0), + removedCells: [], + addedCells: [cell] + } + ], + cellChanges: [] + }; - onDidChangeNotebookDocument.fire(e); + onDidChangeNotebookDocument.fire(e); - assert.strictEqual(editsApplied.length, 1); - assert.strictEqual(cellMetadataUpdates.length, 1); + assert.strictEqual(editsApplied.length, 1); + assert.strictEqual(cellMetadataUpdates.length, 1); - // Try to save. - let saveCompleted = false; - const saved = onWillSaveNotebookDocument.fireAsync({ - notebook, - reason: TextDocumentSaveReason.Manual - }, token.token); - saved.finally(() => saveCompleted = true); - await new Promise((resolve) => setTimeout(resolve, 10)); + // Try to save. + let saveCompleted = false; + const saved = onWillSaveNotebookDocument.fireAsync({ + notebook, + reason: TextDocumentSaveReason.Manual + }, token.token); + saved.finally(() => saveCompleted = true); + await new Promise((resolve) => setTimeout(resolve, 10)); - // Verify we have not yet completed saving. - assert.strictEqual(saveCompleted, false); + // Verify we have not yet completed saving. + assert.strictEqual(saveCompleted, false); - resolveApplyEditPromise!(true); - await new Promise((resolve) => setTimeout(resolve, 1)); + resolveApplyEditPromise!(true); + await new Promise((resolve) => setTimeout(resolve, 1)); - // Should have completed saving. - saved.finally(() => saveCompleted = true); - }); + // Should have completed saving. + saved.finally(() => saveCompleted = true); + }); - interface IWaitUntil { - token: CancellationToken; - waitUntil(thenable: Promise): void; + interface IWaitUntil { + token: CancellationToken; + waitUntil(thenable: Promise): void; + } + + interface IWaitUntil { + token: CancellationToken; + waitUntil(thenable: Promise): void; + } + type IWaitUntilData = Omit, 'token'>; + + class AsyncEmitter { + private listeners: ((d: T) => void)[] = []; + get event(): (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => Disposable { + + return (listener, thisArgs, _disposables) => { + this.listeners.push(listener.bind(thisArgs)); + return { + dispose: () => { + // + } + }; + }; } - - interface IWaitUntil { - token: CancellationToken; - waitUntil(thenable: Promise): void; + dispose() { + this.listeners = []; } - type IWaitUntilData = Omit, 'token'>; - - class AsyncEmitter { - private listeners: ((d: T) => void)[] = []; - get event(): (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => Disposable { - - return (listener, thisArgs, _disposables) => { - this.listeners.push(listener.bind(thisArgs)); - return { - dispose: () => { - // - } - }; - }; + async fireAsync(data: IWaitUntilData, token: CancellationToken): Promise { + if (!this.listeners.length) { + return; } - dispose() { - this.listeners = []; - } - async fireAsync(data: IWaitUntilData, token: CancellationToken): Promise { - if (!this.listeners.length) { - return; - } - const promises: Promise[] = []; - this.listeners.forEach(cb => { - const event = { - ...data, - token, - waitUntil: (thenable: Promise) => { - promises.push(thenable); - } - } as T; - cb(event); - }); - - await Promise.all(promises); - } + const promises: Promise[] = []; + this.listeners.forEach(cb => { + const event = { + ...data, + token, + waitUntil: (thenable: Promise) => { + promises.push(thenable); + } + } as T; + cb(event); + }); + + await Promise.all(promises); } - }); + } }); diff --git a/extensions/ipynb/src/test/serializers.test.ts b/extensions/ipynb/src/test/serializers.test.ts index cc7f53fe4..cb461539c 100644 --- a/extensions/ipynb/src/test/serializers.test.ts +++ b/extensions/ipynb/src/test/serializers.test.ts @@ -19,267 +19,215 @@ function deepStripProperties(obj: any, props: string[]) { } } } -[true, false].forEach(useCustomPropertyInMetadata => { - suite(`ipynb serializer (${useCustomPropertyInMetadata ? 'with custom metadata (standard behaviour)' : 'without custom metadata'})`, () => { - let disposables: vscode.Disposable[] = []; - setup(() => { - disposables = []; - sinon.stub(vscode.workspace, 'getConfiguration').callsFake((section, scope) => { - if (section === 'jupyter') { - return { - get: () => { - return !useCustomPropertyInMetadata; - } - }; - } else { - return (vscode.workspace.getConfiguration as any).wrappedMethod.call(vscode.workspace, section, scope); +suite(`ipynb serializer`, () => { + let disposables: vscode.Disposable[] = []; + setup(() => { + disposables = []; + }); + teardown(async () => { + disposables.forEach(d => d.dispose()); + disposables = []; + sinon.restore(); + }); + + const base64EncodedImage = + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOUlZL6DwAB/wFSU1jVmgAAAABJRU5ErkJggg=='; + test('Deserialize', async () => { + const cells: nbformat.ICell[] = [ + { + cell_type: 'code', + execution_count: 10, + outputs: [], + source: 'print(1)', + metadata: {} + }, + { + cell_type: 'markdown', + source: '# HEAD', + metadata: {} + } + ]; + const notebook = jupyterNotebookModelToNotebookData({ cells }, 'python'); + assert.ok(notebook); + + const expectedCodeCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, 'print(1)', 'python'); + expectedCodeCell.outputs = []; + expectedCodeCell.metadata = { execution_count: 10, metadata: {} }; + expectedCodeCell.executionSummary = { executionOrder: 10 }; + + const expectedMarkdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# HEAD', 'markdown'); + expectedMarkdownCell.outputs = []; + expectedMarkdownCell.metadata = { + metadata: {} + }; + + assert.deepStrictEqual(notebook.cells, [expectedCodeCell, expectedMarkdownCell]); + }); + + + test('Serialize', async () => { + const markdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown'); + markdownCell.metadata = { + attachments: { + 'image.png': { + 'image/png': 'abc' } - }); + }, + id: '123', + metadata: { + foo: 'bar' + } + }; + + const cellMetadata = getCellMetadata({ cell: markdownCell }); + assert.deepStrictEqual(cellMetadata, { + id: '123', + metadata: { + foo: 'bar', + }, + attachments: { + 'image.png': { + 'image/png': 'abc' + } + } }); - teardown(async () => { - disposables.forEach(d => d.dispose()); - disposables = []; - sinon.restore(); + + const markdownCell2 = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown'); + markdownCell2.metadata = { + id: '123', + metadata: { + foo: 'bar' + }, + attachments: { + 'image.png': { + 'image/png': 'abc' + } + } + }; + + const nbMarkdownCell = createMarkdownCellFromNotebookCell(markdownCell); + const nbMarkdownCell2 = createMarkdownCellFromNotebookCell(markdownCell2); + assert.deepStrictEqual(nbMarkdownCell, nbMarkdownCell2); + + assert.deepStrictEqual(nbMarkdownCell, { + cell_type: 'markdown', + source: ['# header1'], + metadata: { + foo: 'bar', + }, + attachments: { + 'image.png': { + 'image/png': 'abc' + } + }, + id: '123' }); + }); - const base64EncodedImage = - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOUlZL6DwAB/wFSU1jVmgAAAABJRU5ErkJggg=='; - test('Deserialize', async () => { + suite('Outputs', () => { + function validateCellOutputTranslation( + outputs: nbformat.IOutput[], + expectedOutputs: vscode.NotebookCellOutput[], + propertiesToExcludeFromComparison: string[] = [] + ) { const cells: nbformat.ICell[] = [ { cell_type: 'code', execution_count: 10, - outputs: [], + outputs, source: 'print(1)', metadata: {} - }, - { - cell_type: 'markdown', - source: '# HEAD', - metadata: {} } ]; const notebook = jupyterNotebookModelToNotebookData({ cells }, 'python'); - assert.ok(notebook); - const expectedCodeCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, 'print(1)', 'python'); - expectedCodeCell.outputs = []; - expectedCodeCell.metadata = useCustomPropertyInMetadata ? { custom: { execution_count: 10, metadata: {} } } : { execution_count: 10, metadata: {} }; - expectedCodeCell.executionSummary = { executionOrder: 10 }; - - const expectedMarkdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# HEAD', 'markdown'); - expectedMarkdownCell.outputs = []; - expectedMarkdownCell.metadata = useCustomPropertyInMetadata ? { - custom: { metadata: {} } - } : { - metadata: {} - }; + // OutputItems contain an `id` property generated by VSC. + // Exclude that property when comparing. + const propertiesToExclude = propertiesToExcludeFromComparison.concat(['id']); + const actualOuts = notebook.cells[0].outputs; + deepStripProperties(actualOuts, propertiesToExclude); + deepStripProperties(expectedOutputs, propertiesToExclude); + assert.deepStrictEqual(actualOuts, expectedOutputs); + } - assert.deepStrictEqual(notebook.cells, [expectedCodeCell, expectedMarkdownCell]); + test('Empty output', () => { + validateCellOutputTranslation([], []); }); - - test('Serialize', async () => { - const markdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown'); - markdownCell.metadata = useCustomPropertyInMetadata ? { - attachments: { - 'image.png': { - 'image/png': 'abc' - } - }, - custom: { - id: '123', - metadata: { - foo: 'bar' - } - } - } : { - attachments: { - 'image.png': { - 'image/png': 'abc' - } - }, - id: '123', - metadata: { - foo: 'bar' - } - }; - - const cellMetadata = getCellMetadata({ cell: markdownCell }); - assert.deepStrictEqual(cellMetadata, { - id: '123', - metadata: { - foo: 'bar', - }, - attachments: { - 'image.png': { - 'image/png': 'abc' - } - } - }); - - const markdownCell2 = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown'); - markdownCell2.metadata = useCustomPropertyInMetadata ? { - custom: { - id: '123', - metadata: { - foo: 'bar' + test('Stream output', () => { + validateCellOutputTranslation( + [ + { + output_type: 'stream', + name: 'stderr', + text: 'Error' }, - attachments: { - 'image.png': { - 'image/png': 'abc' - } + { + output_type: 'stream', + name: 'stdout', + text: 'NoError' } - } - } : { - id: '123', - metadata: { - foo: 'bar' - }, - attachments: { - 'image.png': { - 'image/png': 'abc' + ], + [ + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('Error')], { + outputType: 'stream' + }), + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('NoError')], { + outputType: 'stream' + }) + ] + ); + }); + test('Stream output and line endings', () => { + validateCellOutputTranslation( + [ + { + output_type: 'stream', + name: 'stdout', + text: [ + 'Line1\n', + '\n', + 'Line3\n', + 'Line4' + ] } - } - }; - - const nbMarkdownCell = createMarkdownCellFromNotebookCell(markdownCell); - const nbMarkdownCell2 = createMarkdownCellFromNotebookCell(markdownCell2); - assert.deepStrictEqual(nbMarkdownCell, nbMarkdownCell2); - - assert.deepStrictEqual(nbMarkdownCell, { - cell_type: 'markdown', - source: ['# header1'], - metadata: { - foo: 'bar', - }, - attachments: { - 'image.png': { - 'image/png': 'abc' + ], + [ + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Line1\n\nLine3\nLine4')], { + outputType: 'stream' + }) + ] + ); + validateCellOutputTranslation( + [ + { + output_type: 'stream', + name: 'stdout', + text: [ + 'Hello\n', + 'Hello\n', + 'Hello\n', + 'Hello\n', + 'Hello\n', + 'Hello\n' + ] } - }, - id: '123' - }); + ], + [ + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Hello\nHello\nHello\nHello\nHello\nHello\n')], { + outputType: 'stream' + }) + ] + ); }); - - suite('Outputs', () => { - function validateCellOutputTranslation( - outputs: nbformat.IOutput[], - expectedOutputs: vscode.NotebookCellOutput[], - propertiesToExcludeFromComparison: string[] = [] - ) { - const cells: nbformat.ICell[] = [ + test('Multi-line Stream output', () => { + validateCellOutputTranslation( + [ { - cell_type: 'code', - execution_count: 10, - outputs, - source: 'print(1)', - metadata: {} - } - ]; - const notebook = jupyterNotebookModelToNotebookData({ cells }, 'python'); - - // OutputItems contain an `id` property generated by VSC. - // Exclude that property when comparing. - const propertiesToExclude = propertiesToExcludeFromComparison.concat(['id']); - const actualOuts = notebook.cells[0].outputs; - deepStripProperties(actualOuts, propertiesToExclude); - deepStripProperties(expectedOutputs, propertiesToExclude); - assert.deepStrictEqual(actualOuts, expectedOutputs); - } - - test('Empty output', () => { - validateCellOutputTranslation([], []); - }); - - test('Stream output', () => { - validateCellOutputTranslation( - [ - { - output_type: 'stream', - name: 'stderr', - text: 'Error' - }, - { - output_type: 'stream', - name: 'stdout', - text: 'NoError' - } - ], - [ - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('Error')], { - outputType: 'stream' - }), - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('NoError')], { - outputType: 'stream' - }) - ] - ); - }); - test('Stream output and line endings', () => { - validateCellOutputTranslation( - [ - { - output_type: 'stream', - name: 'stdout', - text: [ - 'Line1\n', - '\n', - 'Line3\n', - 'Line4' - ] - } - ], - [ - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Line1\n\nLine3\nLine4')], { - outputType: 'stream' - }) - ] - ); - validateCellOutputTranslation( - [ - { - output_type: 'stream', - name: 'stdout', - text: [ - 'Hello\n', - 'Hello\n', - 'Hello\n', - 'Hello\n', - 'Hello\n', - 'Hello\n' - ] - } - ], - [ - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Hello\nHello\nHello\nHello\nHello\nHello\n')], { - outputType: 'stream' - }) - ] - ); - }); - test('Multi-line Stream output', () => { - validateCellOutputTranslation( - [ - { - name: 'stdout', - output_type: 'stream', - text: [ - 'Epoch 1/5\n', - '...\n', - 'Epoch 2/5\n', - '...\n', - 'Epoch 3/5\n', - '...\n', - 'Epoch 4/5\n', - '...\n', - 'Epoch 5/5\n', - '...\n' - ] - } - ], - [ - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout(['Epoch 1/5\n', + name: 'stdout', + output_type: 'stream', + text: [ + 'Epoch 1/5\n', '...\n', 'Epoch 2/5\n', '...\n', @@ -288,35 +236,35 @@ function deepStripProperties(obj: any, props: string[]) { 'Epoch 4/5\n', '...\n', 'Epoch 5/5\n', - '...\n'].join(''))], { - outputType: 'stream' - }) - ] - ); - }); + '...\n' + ] + } + ], + [ + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout(['Epoch 1/5\n', + '...\n', + 'Epoch 2/5\n', + '...\n', + 'Epoch 3/5\n', + '...\n', + 'Epoch 4/5\n', + '...\n', + 'Epoch 5/5\n', + '...\n'].join(''))], { + outputType: 'stream' + }) + ] + ); + }); - test('Multi-line Stream output (last empty line should not be saved in ipynb)', () => { - validateCellOutputTranslation( - [ - { - name: 'stderr', - output_type: 'stream', - text: [ - 'Epoch 1/5\n', - '...\n', - 'Epoch 2/5\n', - '...\n', - 'Epoch 3/5\n', - '...\n', - 'Epoch 4/5\n', - '...\n', - 'Epoch 5/5\n', - '...\n' - ] - } - ], - [ - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr(['Epoch 1/5\n', + test('Multi-line Stream output (last empty line should not be saved in ipynb)', () => { + validateCellOutputTranslation( + [ + { + name: 'stderr', + output_type: 'stream', + text: [ + 'Epoch 1/5\n', '...\n', 'Epoch 2/5\n', '...\n', @@ -325,423 +273,436 @@ function deepStripProperties(obj: any, props: string[]) { 'Epoch 4/5\n', '...\n', 'Epoch 5/5\n', - '...\n', - // This last empty line should not be saved in ipynb. - '\n'].join(''))], { - outputType: 'stream' - }) - ] - ); - }); + '...\n' + ] + } + ], + [ + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr(['Epoch 1/5\n', + '...\n', + 'Epoch 2/5\n', + '...\n', + 'Epoch 3/5\n', + '...\n', + 'Epoch 4/5\n', + '...\n', + 'Epoch 5/5\n', + '...\n', + // This last empty line should not be saved in ipynb. + '\n'].join(''))], { + outputType: 'stream' + }) + ] + ); + }); - test('Streamed text with Ansi characters', async () => { - validateCellOutputTranslation( - [ + test('Streamed text with Ansi characters', async () => { + validateCellOutputTranslation( + [ + { + name: 'stderr', + text: '\u001b[K\u001b[33m✅ \u001b[0m Loading\n', + output_type: 'stream' + } + ], + [ + new vscode.NotebookCellOutput( + [vscode.NotebookCellOutputItem.stderr('\u001b[K\u001b[33m✅ \u001b[0m Loading\n')], { - name: 'stderr', - text: '\u001b[K\u001b[33m✅ \u001b[0m Loading\n', - output_type: 'stream' + outputType: 'stream' } - ], - [ - new vscode.NotebookCellOutput( - [vscode.NotebookCellOutputItem.stderr('\u001b[K\u001b[33m✅ \u001b[0m Loading\n')], - { - outputType: 'stream' - } - ) - ] - ); - }); + ) + ] + ); + }); - test('Streamed text with angle bracket characters', async () => { - validateCellOutputTranslation( - [ - { - name: 'stderr', - text: '1 is < 2', - output_type: 'stream' - } - ], - [ - new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('1 is < 2')], { - outputType: 'stream' - }) - ] - ); - }); + test('Streamed text with angle bracket characters', async () => { + validateCellOutputTranslation( + [ + { + name: 'stderr', + text: '1 is < 2', + output_type: 'stream' + } + ], + [ + new vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('1 is < 2')], { + outputType: 'stream' + }) + ] + ); + }); - test('Streamed text with angle bracket characters and ansi chars', async () => { - validateCellOutputTranslation( - [ + test('Streamed text with angle bracket characters and ansi chars', async () => { + validateCellOutputTranslation( + [ + { + name: 'stderr', + text: '1 is < 2\u001b[K\u001b[33m✅ \u001b[0m Loading\n', + output_type: 'stream' + } + ], + [ + new vscode.NotebookCellOutput( + [vscode.NotebookCellOutputItem.stderr('1 is < 2\u001b[K\u001b[33m✅ \u001b[0m Loading\n')], { - name: 'stderr', - text: '1 is < 2\u001b[K\u001b[33m✅ \u001b[0m Loading\n', - output_type: 'stream' + outputType: 'stream' } - ], - [ - new vscode.NotebookCellOutput( - [vscode.NotebookCellOutputItem.stderr('1 is < 2\u001b[K\u001b[33m✅ \u001b[0m Loading\n')], - { - outputType: 'stream' - } - ) - ] - ); - }); + ) + ] + ); + }); - test('Error', async () => { - validateCellOutputTranslation( - [ + test('Error', async () => { + validateCellOutputTranslation( + [ + { + ename: 'Error Name', + evalue: 'Error Value', + traceback: ['stack1', 'stack2', 'stack3'], + output_type: 'error' + } + ], + [ + new vscode.NotebookCellOutput( + [ + vscode.NotebookCellOutputItem.error({ + name: 'Error Name', + message: 'Error Value', + stack: ['stack1', 'stack2', 'stack3'].join('\n') + }) + ], { - ename: 'Error Name', - evalue: 'Error Value', - traceback: ['stack1', 'stack2', 'stack3'], - output_type: 'error' - } - ], - [ - new vscode.NotebookCellOutput( - [ - vscode.NotebookCellOutputItem.error({ - name: 'Error Name', - message: 'Error Value', - stack: ['stack1', 'stack2', 'stack3'].join('\n') - }) - ], - { - outputType: 'error', - originalError: { - ename: 'Error Name', - evalue: 'Error Value', - traceback: ['stack1', 'stack2', 'stack3'], - output_type: 'error' - } + outputType: 'error', + originalError: { + ename: 'Error Name', + evalue: 'Error Value', + traceback: ['stack1', 'stack2', 'stack3'], + output_type: 'error' } - ) - ] - ); - }); - - ['display_data', 'execute_result'].forEach(output_type => { - suite(`Rich output for output_type = ${output_type}`, () => { - // Properties to exclude when comparing. - let propertiesToExcludeFromComparison: string[] = []; - setup(() => { - if (output_type === 'display_data') { - // With display_data the execution_count property will never exist in the output. - // We can ignore that (as it will never exist). - // But we leave it in the case of `output_type === 'execute_result'` - propertiesToExcludeFromComparison = ['execution_count', 'executionCount']; } - }); + ) + ] + ); + }); - test('Text mimeType output', async () => { - validateCellOutputTranslation( - [ + ['display_data', 'execute_result'].forEach(output_type => { + suite(`Rich output for output_type = ${output_type}`, () => { + // Properties to exclude when comparing. + let propertiesToExcludeFromComparison: string[] = []; + setup(() => { + if (output_type === 'display_data') { + // With display_data the execution_count property will never exist in the output. + // We can ignore that (as it will never exist). + // But we leave it in the case of `output_type === 'execute_result'` + propertiesToExcludeFromComparison = ['execution_count', 'executionCount']; + } + }); + + test('Text mimeType output', async () => { + validateCellOutputTranslation( + [ + { + data: { + 'text/plain': 'Hello World!' + }, + output_type, + metadata: {}, + execution_count: 1 + } + ], + [ + new vscode.NotebookCellOutput( + [new vscode.NotebookCellOutputItem(Buffer.from('Hello World!', 'utf8'), 'text/plain')], { - data: { - 'text/plain': 'Hello World!' - }, - output_type, - metadata: {}, - execution_count: 1 + outputType: output_type, + metadata: {}, // display_data & execute_result always have metadata. + executionCount: 1 } - ], - [ - new vscode.NotebookCellOutput( - [new vscode.NotebookCellOutputItem(Buffer.from('Hello World!', 'utf8'), 'text/plain')], - { - outputType: output_type, - metadata: {}, // display_data & execute_result always have metadata. - executionCount: 1 - } - ) - ], - propertiesToExcludeFromComparison - ); - }); + ) + ], + propertiesToExcludeFromComparison + ); + }); - test('png,jpeg images', async () => { - validateCellOutputTranslation( - [ + test('png,jpeg images', async () => { + validateCellOutputTranslation( + [ + { + execution_count: 1, + data: { + 'image/png': base64EncodedImage, + 'image/jpeg': base64EncodedImage + }, + metadata: {}, + output_type + } + ], + [ + new vscode.NotebookCellOutput( + [ + new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png'), + new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/jpeg') + ], { - execution_count: 1, - data: { - 'image/png': base64EncodedImage, - 'image/jpeg': base64EncodedImage - }, - metadata: {}, - output_type + executionCount: 1, + outputType: output_type, + metadata: {} // display_data & execute_result always have metadata. } - ], - [ - new vscode.NotebookCellOutput( - [ - new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png'), - new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/jpeg') - ], - { - executionCount: 1, - outputType: output_type, - metadata: {} // display_data & execute_result always have metadata. - } - ) - ], - propertiesToExcludeFromComparison - ); - }); + ) + ], + propertiesToExcludeFromComparison + ); + }); - test('png image with a light background', async () => { - validateCellOutputTranslation( - [ + test('png image with a light background', async () => { + validateCellOutputTranslation( + [ + { + execution_count: 1, + data: { + 'image/png': base64EncodedImage + }, + metadata: { + needs_background: 'light' + }, + output_type + } + ], + [ + new vscode.NotebookCellOutput( + [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], { - execution_count: 1, - data: { - 'image/png': base64EncodedImage - }, + executionCount: 1, metadata: { needs_background: 'light' }, - output_type + outputType: output_type } - ], - [ - new vscode.NotebookCellOutput( - [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], - { - executionCount: 1, - metadata: { - needs_background: 'light' - }, - outputType: output_type - } - ) - ], - propertiesToExcludeFromComparison - ); - }); + ) + ], + propertiesToExcludeFromComparison + ); + }); - test('png image with a dark background', async () => { - validateCellOutputTranslation( - [ + test('png image with a dark background', async () => { + validateCellOutputTranslation( + [ + { + execution_count: 1, + data: { + 'image/png': base64EncodedImage + }, + metadata: { + needs_background: 'dark' + }, + output_type + } + ], + [ + new vscode.NotebookCellOutput( + [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], { - execution_count: 1, - data: { - 'image/png': base64EncodedImage - }, + executionCount: 1, metadata: { needs_background: 'dark' }, - output_type + outputType: output_type } - ], - [ - new vscode.NotebookCellOutput( - [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], - { - executionCount: 1, - metadata: { - needs_background: 'dark' - }, - outputType: output_type - } - ) - ], - propertiesToExcludeFromComparison - ); - }); + ) + ], + propertiesToExcludeFromComparison + ); + }); - test('png image with custom dimensions', async () => { - validateCellOutputTranslation( - [ + test('png image with custom dimensions', async () => { + validateCellOutputTranslation( + [ + { + execution_count: 1, + data: { + 'image/png': base64EncodedImage + }, + metadata: { + 'image/png': { height: '111px', width: '999px' } + }, + output_type + } + ], + [ + new vscode.NotebookCellOutput( + [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], { - execution_count: 1, - data: { - 'image/png': base64EncodedImage - }, + executionCount: 1, metadata: { 'image/png': { height: '111px', width: '999px' } }, - output_type + outputType: output_type } - ], - [ - new vscode.NotebookCellOutput( - [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], - { - executionCount: 1, - metadata: { - 'image/png': { height: '111px', width: '999px' } - }, - outputType: output_type - } - ) - ], - propertiesToExcludeFromComparison - ); - }); + ) + ], + propertiesToExcludeFromComparison + ); + }); - test('png allowed to scroll', async () => { - validateCellOutputTranslation( - [ + test('png allowed to scroll', async () => { + validateCellOutputTranslation( + [ + { + execution_count: 1, + data: { + 'image/png': base64EncodedImage + }, + metadata: { + unconfined: true, + 'image/png': { width: '999px' } + }, + output_type + } + ], + [ + new vscode.NotebookCellOutput( + [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], { - execution_count: 1, - data: { - 'image/png': base64EncodedImage - }, + executionCount: 1, metadata: { unconfined: true, 'image/png': { width: '999px' } }, - output_type + outputType: output_type } - ], - [ - new vscode.NotebookCellOutput( - [new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')], - { - executionCount: 1, - metadata: { - unconfined: true, - 'image/png': { width: '999px' } - }, - outputType: output_type - } - ) - ], - propertiesToExcludeFromComparison - ); - }); + ) + ], + propertiesToExcludeFromComparison + ); }); }); }); + }); - suite('Output Order', () => { - test('Verify order of outputs', async () => { - const dataAndExpectedOrder: { output: nbformat.IDisplayData; expectedMimeTypesOrder: string[] }[] = [ - { - output: { - data: { - 'application/vnd.vegalite.v4+json': 'some json', - 'text/html': 'Hello' - }, - metadata: {}, - output_type: 'display_data' + suite('Output Order', () => { + test('Verify order of outputs', async () => { + const dataAndExpectedOrder: { output: nbformat.IDisplayData; expectedMimeTypesOrder: string[] }[] = [ + { + output: { + data: { + 'application/vnd.vegalite.v4+json': 'some json', + 'text/html': 'Hello' }, - expectedMimeTypesOrder: ['application/vnd.vegalite.v4+json', 'text/html'] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'application/vnd.vegalite.v4+json': 'some json', - 'application/javascript': 'some js', - 'text/plain': 'some text', - 'text/html': 'Hello' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: ['application/vnd.vegalite.v4+json', 'text/html'] + }, + { + output: { + data: { + 'application/vnd.vegalite.v4+json': 'some json', + 'application/javascript': 'some js', + 'text/plain': 'some text', + 'text/html': 'Hello' }, - expectedMimeTypesOrder: [ - 'application/vnd.vegalite.v4+json', - 'text/html', - 'application/javascript', - 'text/plain' - ] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'application/vnd.vegalite.v4+json': '', // Empty, should give preference to other mimetypes. - 'application/javascript': 'some js', - 'text/plain': 'some text', - 'text/html': 'Hello' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: [ + 'application/vnd.vegalite.v4+json', + 'text/html', + 'application/javascript', + 'text/plain' + ] + }, + { + output: { + data: { + 'application/vnd.vegalite.v4+json': '', // Empty, should give preference to other mimetypes. + 'application/javascript': 'some js', + 'text/plain': 'some text', + 'text/html': 'Hello' }, - expectedMimeTypesOrder: [ - 'text/html', - 'application/javascript', - 'text/plain', - 'application/vnd.vegalite.v4+json' - ] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'text/plain': 'some text', - 'text/html': 'Hello' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: [ + 'text/html', + 'application/javascript', + 'text/plain', + 'application/vnd.vegalite.v4+json' + ] + }, + { + output: { + data: { + 'text/plain': 'some text', + 'text/html': 'Hello' }, - expectedMimeTypesOrder: ['text/html', 'text/plain'] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'application/javascript': 'some js', - 'text/plain': 'some text' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: ['text/html', 'text/plain'] + }, + { + output: { + data: { + 'application/javascript': 'some js', + 'text/plain': 'some text' }, - expectedMimeTypesOrder: ['application/javascript', 'text/plain'] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'image/svg+xml': 'some svg', - 'text/plain': 'some text' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: ['application/javascript', 'text/plain'] + }, + { + output: { + data: { + 'image/svg+xml': 'some svg', + 'text/plain': 'some text' }, - expectedMimeTypesOrder: ['image/svg+xml', 'text/plain'] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'text/latex': 'some latex', - 'text/plain': 'some text' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: ['image/svg+xml', 'text/plain'] + }, + { + output: { + data: { + 'text/latex': 'some latex', + 'text/plain': 'some text' }, - expectedMimeTypesOrder: ['text/latex', 'text/plain'] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'application/vnd.jupyter.widget-view+json': 'some widget', - 'text/plain': 'some text' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: ['text/latex', 'text/plain'] + }, + { + output: { + data: { + 'application/vnd.jupyter.widget-view+json': 'some widget', + 'text/plain': 'some text' }, - expectedMimeTypesOrder: ['application/vnd.jupyter.widget-view+json', 'text/plain'] + metadata: {}, + output_type: 'display_data' }, - { - output: { - data: { - 'text/plain': 'some text', - 'image/svg+xml': 'some svg', - 'image/png': 'some png' - }, - metadata: {}, - output_type: 'display_data' + expectedMimeTypesOrder: ['application/vnd.jupyter.widget-view+json', 'text/plain'] + }, + { + output: { + data: { + 'text/plain': 'some text', + 'image/svg+xml': 'some svg', + 'image/png': 'some png' }, - expectedMimeTypesOrder: ['image/png', 'image/svg+xml', 'text/plain'] - } - ]; + metadata: {}, + output_type: 'display_data' + }, + expectedMimeTypesOrder: ['image/png', 'image/svg+xml', 'text/plain'] + } + ]; - dataAndExpectedOrder.forEach(({ output, expectedMimeTypesOrder }) => { - const sortedOutputs = jupyterCellOutputToCellOutput(output); - const mimeTypes = sortedOutputs.items.map((item) => item.mime).join(','); - assert.equal(mimeTypes, expectedMimeTypesOrder.join(',')); - }); + dataAndExpectedOrder.forEach(({ output, expectedMimeTypesOrder }) => { + const sortedOutputs = jupyterCellOutputToCellOutput(output); + const mimeTypes = sortedOutputs.items.map((item) => item.mime).join(','); + assert.equal(mimeTypes, expectedMimeTypesOrder.join(',')); }); }); }); diff --git a/extensions/jake/.vscodeignore b/extensions/jake/.vscodeignore index 74215d83d..360fcfd1c 100644 --- a/extensions/jake/.vscodeignore +++ b/extensions/jake/.vscodeignore @@ -2,5 +2,4 @@ src/** tsconfig.json out/** extension.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/json-language-features/.vscodeignore b/extensions/json-language-features/.vscodeignore index 39da57a9a..807b3e4cb 100644 --- a/extensions/json-language-features/.vscodeignore +++ b/extensions/json-language-features/.vscodeignore @@ -10,11 +10,9 @@ server/tsconfig.json server/test/** server/bin/** server/build/** -server/yarn.lock server/package-lock.json server/.npmignore server/README.md -yarn.lock package-lock.json CONTRIBUTING.md server/extension.webpack.config.js diff --git a/extensions/json-language-features/server/.npmignore b/extensions/json-language-features/server/.npmignore index 9b97a6afd..960a01cc7 100644 --- a/extensions/json-language-features/server/.npmignore +++ b/extensions/json-language-features/server/.npmignore @@ -5,7 +5,6 @@ src/ test/ tsconfig.json .gitignore -yarn.lock package-lock.json extension.webpack.config.js vscode-json-languageserver-*.tgz diff --git a/extensions/less/cgmanifest.json b/extensions/less/cgmanifest.json index 69a66b5d9..a3598df87 100644 --- a/extensions/less/cgmanifest.json +++ b/extensions/less/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "language-less", "repositoryUrl": "https://github.com/radium-v/Better-Less", - "commitHash": "fb9c21917193746433743a7c971b70230b40bc2b" + "commitHash": "63c0cba9792e49e255cce0f6dd03250fb30591e6" } }, "license": "MIT", diff --git a/extensions/less/syntaxes/less.tmLanguage.json b/extensions/less/syntaxes/less.tmLanguage.json index 6f57a48e0..b7e51e831 100644 --- a/extensions/less/syntaxes/less.tmLanguage.json +++ b/extensions/less/syntaxes/less.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/radium-v/Better-Less/commit/fb9c21917193746433743a7c971b70230b40bc2b", + "version": "https://github.com/radium-v/Better-Less/commit/63c0cba9792e49e255cce0f6dd03250fb30591e6", "name": "Less", "scopeName": "source.css.less", "patterns": [ @@ -50,7 +50,7 @@ }, "at-charset": { "begin": "\\s*((@)charset\\b)\\s*", - "captures": { + "beginCaptures": { "1": { "name": "keyword.control.at-rule.charset.less" }, @@ -66,9 +66,132 @@ } ] }, + "at-container": { + "begin": "(?=\\s*@container)", + "end": "\\s*(\\})", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.end.less" + } + }, + "patterns": [ + { + "begin": "((@)container)", + "beginCaptures": { + "1": { + "name": "keyword.control.at-rule.container.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + }, + "3": { + "name": "support.constant.container.less" + } + }, + "end": "(?=\\{)", + "name": "meta.at-rule.container.less", + "patterns": [ + { + "begin": "\\s*(?=[^{;])", + "end": "\\s*(?=[{;])", + "patterns": [ + { + "match": "\\b(not|and|or)\\b", + "name": "keyword.operator.comparison.less" + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.at-rule.container-query.less", + "patterns": [ + { + "captures": { + "1": { + "name": "support.type.property-name.less" + } + }, + "match": "\\b(aspect-ratio|block-size|height|inline-size|orientation|width)\\b", + "name": "support.constant.size-feature.less" + }, + { + "match": "((<|>)=?)|=|\\/", + "name": "keyword.operator.comparison.less" + }, + { + "match": ":", + "name": "punctuation.separator.key-value.less" + }, + { + "match": "portrait|landscape", + "name": "support.constant.property-value.less" + }, + { + "include": "#numeric-values" + }, + { + "match": "\\/", + "name": "keyword.operator.arithmetic.less" + }, + { + "include": "#var-function" + }, + { + "include": "#less-variables" + }, + { + "include": "#less-variable-interpolation" + } + ] + }, + { + "include": "#style-function" + }, + { + "match": "--|(?:-?(?:(?:[a-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R]))))(?:(?:[-\\da-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))*", + "name": "variable.parameter.container-name.css" + }, + { + "include": "#arbitrary-repetition" + }, + { + "include": "#less-variables" + } + ] + } + ] + }, + { + "begin": "\\s*(\\{)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.block.begin.less" + } + }, + "end": "(?=\\})", + "patterns": [ + { + "include": "#rule-list-body" + }, + { + "include": "$self" + } + ] + } + ] + }, "at-counter-style": { "begin": "\\s*((@)counter-style\\b)\\s+(?:(?i:\\b(decimal|none)\\b)|(-?(?:[[_a-zA-Z][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*))\\s*(?=\\{|$)", - "captures": { + "beginCaptures": { "1": { "name": "keyword.control.at-rule.counter-style.less" }, @@ -132,7 +255,7 @@ }, "at-font-face": { "begin": "\\s*((@)font-face)\\s*(?=\\{|$)", - "captures": { + "beginCaptures": { "1": { "name": "keyword.control.at-rule.font-face.less" }, @@ -219,7 +342,7 @@ ] }, "at-keyframes": { - "begin": "\\s*((@)(-webkit-|-moz-|-o-)?keyframes)(?=.*?\\{)", + "begin": "\\s*((@)keyframes)(?=.*?\\{)", "beginCaptures": { "1": { "name": "keyword.control.at-rule.keyframe.less" @@ -227,9 +350,6 @@ "2": { "name": "punctuation.definition.keyword.less" }, - "3": { - "name": "support.type.property-vendor.less" - }, "4": { "name": "support.constant.keyframe.less" } @@ -394,6 +514,9 @@ { "include": "#at-charset" }, + { + "include": "#at-container" + }, { "include": "#at-counter-style" }, @@ -508,44 +631,6 @@ } ] }, - "at-viewport": { - "begin": "((@(-ms-)?)viewport)", - "beginCaptures": { - "1": { - "name": "keyword.control.at-rule.viewport.less" - }, - "2": { - "name": "punctuation.definition.keyword.less" - }, - "3": { - "name": "support.type.vendor-prefix.less" - } - }, - "end": "\\}", - "endCaptures": { - "0": { - "name": "punctuation.definition.block.end.less" - } - }, - "name": "meta.at-rule.viewport.less", - "patterns": [ - { - "begin": "\\{", - "captures": { - "0": { - "name": "punctuation.definition.block.begin.less" - } - }, - "end": "(?=\\})", - "name": "meta.block.less", - "patterns": [ - { - "include": "#rule-list-body" - } - ] - } - ] - }, "attr-function": { "begin": "\\b(attr)(?=\\()", "beginCaptures": { @@ -926,12 +1011,17 @@ "patterns": [ { "begin": "/\\*", - "captures": { + "beginCaptures": { "0": { "name": "punctuation.definition.comment.less" } }, "end": "\\*/", + "endCaptures": { + "0": { + "name": "punctuation.definition.comment.less" + } + }, "name": "comment.block.less" }, { @@ -1176,10 +1266,10 @@ "include": "#time-type" }, { - "include": "#length-type" + "include": "#percentage-type" }, { - "include": "#resolution-type" + "include": "#length-type" } ] }, @@ -1398,10 +1488,10 @@ "include": "#calc-function" }, { - "include": "#length-type" + "include": "#percentage-type" }, { - "include": "#percentage-type" + "include": "#length-type" } ] } @@ -1451,6 +1541,10 @@ "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(Hz|kHz))\\b", "name": "constant.numeric.less" }, + "global-property-values": { + "match": "\\b(?:initial|inherit|unset|revert-layer|revert)\\b", + "name": "support.constant.property-value.less" + }, "gradient-functions": { "patterns": [ { @@ -1707,13 +1801,21 @@ } }, "length-type": { - "captures": { - "1": { - "name": "keyword.other.unit.less" + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "(?:[-+]?)(?:\\d+\\.\\d+|\\.?\\d+)(?:[eE][-+]?\\d+)?(em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|m|q|in|pt|pc|px|fr|dpi|dpcm|dppx|x)", + "name": "constant.numeric.less" + }, + { + "match": "\\b(?:[-+]?)0\\b", + "name": "constant.numeric.less" } - }, - "match": "0|(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(em|ex|ch|rem|vw|vh|vmin|vmax|(c|m)?m|q|in|pt|pc|px|fr))\\b", - "name": "constant.numeric.less" + ] }, "less-boolean-function": { "begin": "\\b(boolean)(?=\\()", @@ -2645,9 +2747,6 @@ { "include": "#less-variables" }, - { - "include": "#dimensions" - }, { "include": "#numeric-values" }, @@ -2939,14 +3038,6 @@ { "include": "#comma-delimiter" }, - { - "captures": { - "1": { - "name": "punctuation.terminator.rule.less" - } - }, - "match": "\\s*(;)|(?=[})])" - }, { "include": "#property-values" }, @@ -2954,17 +3045,14 @@ "include": "#rule-list-body" } ] - } - ] - }, - "less-number-units": { - "patterns": [ - { - "match": "\\b((c|m)?m|in|p(t|c)|m?s|g?rad|deg|turn)\\b", - "name": "keyword.other.unit.less" }, { - "match": "\\b(r?em|ex|ch|vw|vh|vmin|vmax|cm|mm|q|in|pt|pc|px|fr|s|ms|Hz|kHz|dpi|dpcm|dppx|deg|grad|rad|turn)\\b" + "captures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "match": "(;)|(?=[})])" } ] }, @@ -3350,16 +3438,23 @@ "name": "variable.other.readwrite.less" }, "less-variables": { - "captures": { - "1": { - "name": "punctuation.definition.variable.less" + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "match": "\\s*(@@?)([-\\w]+)", + "name": "variable.other.readwrite.less" }, - "2": { - "name": "support.other.variable.less" + { + "include": "#less-variable-interpolation" } - }, - "match": "\\s*(@@?)([-\\w]+)", - "name": "variable.other.readwrite.less" + ] }, "literal-string": { "patterns": [ @@ -3487,16 +3582,10 @@ "name": "meta.group.less", "patterns": [ { - "begin": "((-webkit-|-o-)?((min|max)-)?(-moz-)?(((device-)?(height|width|aspect-ratio|pixel-ratio))|(color(-index)?)|monochrome|resolution))|grid|scan|orientation\\s*(?=[:)])", + "begin": "(--|(?:-?(?:(?:[a-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R]))))(?:(?:[-\\da-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))*)\\s*(?=[:)])", "beginCaptures": { "0": { "name": "support.type.property-name.media.less" - }, - "2": { - "name": "support.type.vendor-prefix.less" - }, - "5": { - "name": "support.type.vendor-prefix.less" } }, "end": "(((\\+_?)?):)|(?=\\))", @@ -3585,7 +3674,7 @@ ] }, "number-type": { - "match": "[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))", + "match": "(?:[-+]?)(?:\\d+\\.\\d+|\\.?\\d+)(?:[eE][-+]?\\d+)?", "name": "constant.numeric.less" }, "numeric-values": { @@ -3607,7 +3696,7 @@ "name": "keyword.other.unit.less" } }, - "match": "[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(%)", + "match": "(?:[-+]?)(?:\\d+\\.\\d+|\\.?\\d+)(?:[eE][-+]?\\d+)?(%)", "name": "constant.numeric.less" }, "property-list": { @@ -3632,18 +3721,16 @@ "patterns": [ { "comment": "align-content, align-items, align-self, justify-content, justify-items, justify-self", - "match": "(?x)\\b(?:\n flex-start|flex-end|start|end|space-between|space-around|space-evenly\n |stretch|baseline|safe|unsafe|legacy|anchor-center|first|last|self-start|self-end\n)\\b", + "match": "(?x)\\b( flex-start | flex-end | start | end | space-between | space-around | space-evenly | stretch | baseline | safe | unsafe | legacy | anchor-center | first | last | self-start | self-end )\\b", "name": "support.constant.property-value.less" }, { "comment": "alignment-baseline", - "match": "(?x)\\b(?:\n text-before-edge|before-edge|middle|central|text-after-edge\n |after-edge|ideographic|alphabetic|hanging|mathematical|top|center|bottom\n)\\b", + "match": "(?x)\\b( text-before-edge | before-edge | middle | central | text-after-edge | after-edge | ideographic | alphabetic | hanging | mathematical | top | center | bottom )\\b", "name": "support.constant.property-value.less" }, { - "comment": "all/global values", - "match": "\\b(?:initial|inherit|unset|revert-layer|revert)\\b", - "name": "support.constant.property-value.less" + "include": "#global-property-values" }, { "include": "#cubic-bezier-function" @@ -3683,15 +3770,15 @@ }, { "comment": "animation-timing-function", - "match": "\\b(?:linear|ease-in-out|ease-in|ease-out|ease|step-start|step-end)\\b", + "match": "(?x)\\b(linear | ease-in-out | ease-in | ease-out | ease | step-start | step-end)\\b", "name": "support.constant.property-value.less" }, { - "match": "(?x)\\b(\n absolute|active|add\n|all(-(petite|small)-caps|-scroll)?\n|alpha(betic)?\n|alternate(-reverse)?\n|always|annotation|antialiased|at\n|auto(hiding-scrollbar)?\n|avoid(-column|-page|-region)?\n|background(-color|-image|-position|-size)?\n|backwards|balance|baseline|below|bevel|bicubic|bidi-override|blink\n|block(-(line-height|start|end))?\n|blur\n|bold(er)?\n|border-top-left-radius\n|border-top-right-radius\n|border-bottom-left-radius\n|border-bottom-right-radius\n|border-end-end-radius\n|border-end-start-radius\n|border-start-end-radius\n|border-start-start-radius\n|border-block-start-color\n|border-block-start-style\n|border-block-start-width\n|border-block-start\n|border-block-end-color\n|border-block-end-style\n|border-block-end-width\n|border-block-end\n|border-block-color\n|border-block-style\n|border-block-width\n|border-block\n|border-inline-start-color\n|border-inline-start-style\n|border-inline-start-width\n|border-inline-start\n|border-inline-end-color\n|border-inline-end-style\n|border-inline-end-width\n|border-inline-end\n|border-inline-color\n|border-inline-style\n|border-inline-width\n|border-inline\n|border-top-color\n|border-top-style\n|border-top-width\n|border-top\n|border-right-color\n|border-right-style\n|border-right-width\n|border-right\n|border-bottom-color\n|border-bottom-style\n|border-bottom-width\n|border-bottom\n|border-left-color\n|border-left-style\n|border-left-width\n|border-left\n|border-image-outset\n|border-image-repeat\n|border-image-slice\n|border-image-source\n|border-image-width\n|border-image\n|border-color\n|border-style\n|border-width\n|border-radius\n|border-collapse\n|border-spacing\n|border\n|both\n|bottom\n|box(-shadow)?\n|break-(all|word|spaces)\n|brightness\n|butt(on)?\n|capitalize\n|cent(er|ral)\n|char(acter-variant)?\n|cjk-ideographic|clip|clone|close-quote\n|closest-(corner|side)\n|col-resize|collapse\n|color(-stop|-burn|-dodge)?\n|column((-count|-gap|-reverse|-rule(-color|-width)?|-width)|s)?\n|common-ligatures|condensed|consider-shifts|contain\n|content(-box|s)?\n|contextual|contrast|cover\n|crisp(-e|E)dges\n|crop\n|cross(hair)?\n|da(rken|shed)\n|default|dense|diagonal-fractions|difference|disabled\n|discard|discretionary-ligatures|disregard-shifts\n|distribute(-all-lines|-letter|-space)?\n|dotted|double|drop-shadow\n|(nwse|nesw|ns|ew|sw|se|nw|ne|w|s|e|n)-resize\n|ease(-in-out|-in|-out)?\n|element|ellipsis|embed|end|EndColorStr|evenodd\n|exclu(de(-ruby)?|sion)\n|expanded\n|(extra|semi|ultra)-(condensed|expanded)\n|farthest-(corner|side)?\n|fill(-box|-opacity)?\n|filter\n|fit-content\n|fixed\n|flat\n|flex((-basis|-end|-grow|-shrink|-start)|box)?\n|flip|flood-color\n|font(-size(-adjust)?|-stretch|-weight)?\n|forwards\n|from(-image)?\n|full-width|gap|geometricPrecision|glyphs|gradient|grayscale\n|grid((-column|-row)?-gap|-height)?\n|groove|hand|hanging|hard-light|height|help|hidden|hide\n|historical-(forms|ligatures)\n|horizontal(-tb)?\n|hue\n|ideograph(-alpha|-numeric|-parenthesis|-space|ic)\n|inactive|include-ruby|infinite|inherit|initial\n|inline(-(block|box|flex(box)?|line-height|table|start|end))?\n|inset|inside\n|inter(-ideograph|-word|sect)\n|invert|isolat(e|ion)|italic\n|jis(04|78|83|90)\n|justify(-all)?\n|keep-all\n|large[r]?\n|last|layout|left|letter-spacing\n|light(e[nr]|ing-color)\n|line(-edge|-height|-through)?\n|linear(-gradient|RGB)?\n|lining-nums|list-item|local|loose|lowercase|lr-tb|ltr\n|lumin(osity|ance)|manual\n|manipulation\n|margin(-bottom|-box|-left|-right|-top)?\n|marker(-offset|s)?\n|match-parent\n|mathematical\n|max-(content|height|lines|size|width)\n|medium|middle\n|min-(content|height|width)\n|miter|mixed|move|multiply|newspaper\n|no-(change|clip|(close|open)-quote|(common|discretionary|historical)-ligatures|contextual|drop|repeat)\n|none|nonzero|normal|not-allowed|nowrap|oblique\n|offset(-after|-before|-end|-start)?\n|oldstyle-nums|opacity|open-quote\n|optimize(Legibility|Precision|Quality|Speed)\n|order|ordinal|ornaments\n|outline(-color|-offset|-width)?\n|outset|outside|over(line|-edge|lay)\n|padding(-bottom|-box|-left|-right|-top|-box)?\n|page|paint(ed)?|paused\n|pan-(x|left|right|y|up|down)\n|perspective-origin\n|petite-caps|pixelated|pointer\n|pinch-zoom\n|pretty\n|pre(-line|-wrap)?\n|preserve(-3d|-breaks|-spaces)?\n|progid:DXImageTransform.Microsoft.(Alpha|Blur|dropshadow|gradient|Shadow)\n|progress\n|proportional-(nums|width)\n|radial-gradient|recto|region|relative\n|repeat(-[xy])?\n|repeating-(linear|radial)-gradient\n|replaced|reset-size|reverse|revert(-layer)?|ridge|right\n|round\n|row(-gap|-resize|-reverse)?\n|rtl|ruby|running|saturat(e|ion)|screen\n|scroll(-position|bar)?\n|separate|sepia\n|scale-down\n|shape-(image-threshold|margin|outside)\n|show\n|sideways(-lr|-rl)?\n|simplified\n|size\n|slashed-zero|slice\n|small(-caps|er)?\n|smooth|snap|solid|soft-light\n|space(-around|-between)?\n|span|sRGB\n|stable\n|stack(ed-fractions)?\n|start(ColorStr)?\n|static\n|step-(end|start)\n|sticky\n|stop-(color|opacity)\n|stretch|strict\n|stroke(-box|-dash(array|offset)|-miterlimit|-opacity|-width)?\n|style(set)?\n|stylistic\n|sub(grid|pixel-antialiased|tract)?\n|super|swash\n|table(-caption|-cell|(-column|-footer|-header|-row)-group|-column|-row)?\n|tabular-nums|tb-rl\n|text((-bottom|-(decoration|emphasis)-color|-indent|-(over|under)-edge|-shadow|-size(-adjust)?|-top)|field)?\n|thi(ck|n)\n|titling-ca(ps|se)\n|to[p]?\n|touch|traditional\n|transform(-origin)?\n|under(-edge|line)?\n|unicase|unset|uppercase|upright\n|use-(glyph-orientation|script)\n|verso\n|vertical(-align|-ideographic|-lr|-rl|-text)?\n|view-box\n|viewport-fill(-opacity)?\n|visibility\n|visible(Fill|Painted|Stroke)?\n|wait|wavy|weight|whitespace|(device-)?width|word-spacing\n|wrap(-reverse)?\n|x{1,2}-(large|small)\n|z-index|zero\n|zoom(-in|-out)?\n|((?xi:arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|decimal-leading-zero|decimal|devanagari|disclosure-closed|disclosure-open|disc|ethiopic-numeric|georgian|gujarati|gurmukhi|hebrew|hiragana-iroha|hiragana|japanese-formal|japanese-informal|kannada|katakana-iroha|katakana|khmer|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian|upper-latin|upper-roman)))\\b", + "match": "(?x)\\b( absolute | active | add | all-petite-caps | all-small-caps | all-scroll | all | alphabetic | alpha | alternate-reverse | alternate | always | annotation | antialiased | at | autohiding-scrollbar | auto | avoid-column | avoid-page | avoid-region | avoid | background-color | background-image | background-position | background-size | background-repeat | background | backwards | balance | baseline | below | bevel | bicubic | bidi-override | blink | block-line-height | block-start | block-end | block | blur | bolder | bold | border-top-left-radius | border-top-right-radius | border-bottom-left-radius | border-bottom-right-radius | border-end-end-radius | border-end-start-radius | border-start-end-radius | border-start-start-radius | border-block-start-color | border-block-start-style | border-block-start-width | border-block-start | border-block-end-color | border-block-end-style | border-block-end-width | border-block-end | border-block-color | border-block-style | border-block-width | border-block | border-inline-start-color | border-inline-start-style | border-inline-start-width | border-inline-start | border-inline-end-color | border-inline-end-style | border-inline-end-width | border-inline-end | border-inline-color | border-inline-style | border-inline-width | border-inline | border-top-color | border-top-style | border-top-width | border-top | border-right-color | border-right-style | border-right-width | border-right | border-bottom-color | border-bottom-style | border-bottom-width | border-bottom | border-left-color | border-left-style | border-left-width | border-left | border-image-outset | border-image-repeat | border-image-slice | border-image-source | border-image-width | border-image | border-color | border-style | border-width | border-radius | border-collapse | border-spacing | border | both | bottom | box-shadow | box | break-all | break-word | break-spaces | brightness | butt(on)? | capitalize | central | center | char(acter-variant)? | cjk-ideographic | clip | clone | close-quote | closest-corner | closest-side | col-resize | collapse | color-stop | color-burn | color-dodge | color | column-count | column-gap | column-reverse | column-rule-color | column-rule-width | column-rule | column-width | columns | column | common-ligatures | condensed | consider-shifts | contain | content-box | contents? | contextual | contrast | cover | crisp-edges | crispEdges | crop | crosshair | cross | darken | dashed | default | dense | device-width | diagonal-fractions | difference | disabled | discard | discretionary-ligatures | disregard-shifts | distribute-all-lines | distribute-letter | distribute-space | distribute | dotted | double | drop-shadow | [nsew]{1,4}-resize | ease-in-out | ease-in | ease-out | ease | element | ellipsis | embed | end | EndColorStr | evenodd | exclude-ruby | exclusion | expanded | extra-condensed | extra-expanded | farthest-corner | farthest-side | farthest | fill-box | fill-opacity | fill | filter | fit-content | fixed | flat | flex-basis | flex-end | flex-grow | flex-shrink | flex-start | flexbox | flex | flip | flood-color | font-size-adjust | font-size | font-stretch | font-weight | font | forwards | from-image | from | full-width | gap | geometricPrecision | glyphs | gradient | grayscale | grid-column-gap | grid-column | grid-row-gap | grid-row | grid-gap | grid-height | grid | groove | hand | hanging | hard-light | height | help | hidden | hide | historical-forms | historical-ligatures | horizontal-tb | horizontal | hue | ideographic | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space | inactive | include-ruby | infinite | inherit | initial | inline-end | inline-size | inline-start | inline-table | inline-line-height | inline-flexbox | inline-flex | inline-box | inline-block | inline | inset | inside | inter-ideograph | inter-word | intersect | invert | isolate | isolation | italic | jis(04|78|83|90) | justify-all | justify | keep-all | larger | large | last | layout | left | letter-spacing | lighten | lighter | lighting-color | linear-gradient | linearRGB | linear | line-edge | line-height | line-through | line | lining-nums | list-item | local | loose | lowercase | lr-tb | ltr | luminosity | luminance | manual | manipulation | margin-bottom | margin-box | margin-left | margin-right | margin-top | margin | marker(-offset|s)? | match-parent | mathematical | max-(content|height|lines|size|width) | medium | middle | min-(content|height|width) | miter | mixed | move | multiply | newspaper | no-change | no-clip | no-close-quote | no-open-quote | no-common-ligatures | no-discretionary-ligatures | no-historical-ligatures | no-contextual | no-drop | no-repeat | none | nonzero | normal | not-allowed | nowrap | oblique | offset-after | offset-before | offset-end | offset-start | offset | oldstyle-nums | opacity | open-quote | optimize(Legibility|Precision|Quality|Speed) | order | ordinal | ornaments | outline-color | outline-offset | outline-width | outline | outset | outside | overline | over-edge | overlay | padding(-bottom|-box|-left|-right|-top|-box)? | page | paint(ed)? | paused | pan-(x|left|right|y|up|down) | perspective-origin | petite-caps | pixelated | pointer | pinch-zoom | pretty | pre(-line|-wrap)? | preserve-3d | preserve-breaks | preserve-spaces | preserve | progid:DXImageTransform\\.Microsoft\\.(Alpha|Blur|dropshadow|gradient|Shadow) | progress | proportional-nums | proportional-width | radial-gradient | recto | region | relative | repeating-linear-gradient | repeating-radial-gradient | repeat-x | repeat-y | repeat | replaced | reset-size | reverse | revert-layer | revert | ridge | right | round | row-gap | row-resize | row-reverse | row | rtl | ruby | running | saturate | saturation | screen | scrollbar | scroll-position | scroll | separate | sepia | scale-down | semi-condensed | semi-expanded | shape-image-threshold | shape-margin | shape-outside | show | sideways-lr | sideways-rl | sideways | simplified | size | slashed-zero | slice | small-caps | smaller | small | smooth | snap | solid | soft-light | space-around | space-between | space | span | sRGB | stable | stacked-fractions | stack | startColorStr | start | static | step-end | step-start | sticky | stop-color | stop-opacity | stretch | strict | stroke-box | stroke-dasharray | stroke-dashoffset | stroke-miterlimit | stroke-opacity | stroke-width | stroke | styleset | style | stylistic | subgrid | subpixel-antialiased | subtract | super | swash | table-caption | table-cell | table-column-group | table-footer-group | table-header-group | table-row-group | table-column | table-row | table | tabular-nums | tb-rl | text((-bottom|-(decoration|emphasis)-color|-indent|-(over|under)-edge|-shadow|-size(-adjust)?|-top)|field)? | thick |thin | titling-caps | titling-case | top | touch | to | traditional | transform-origin | transform-style | transform | ultra-condensed | ultra-expanded | under-edge | underline | unicase | unset | uppercase | upright | use-glyph-orientation | use-script | verso | vertical(-align|-ideographic|-lr|-rl|-text)? | view-box | viewport-fill-opacity | viewport-fill | visibility | visibleFill | visiblePainted | visibleStroke | visible | wait | wavy | weight | whitespace | width | word-spacing | wrap-reverse | wrap-reverse | wrap | xx?-(large|small) | z-index | zero | zoom-in | zoom-out | zoom | arabic-indic | armenian | bengali | cambodian | circle | cjk-decimal | cjk-earthly-branch | cjk-heavenly-stem | decimal-leading-zero | decimal | devanagari | disclosure-closed | disclosure-open | disc | ethiopic-numeric | georgian | gujarati | gurmukhi | hebrew | hiragana-iroha | hiragana | japanese-formal | japanese-informal | kannada | katakana-iroha | katakana | khmer | korean-hangul-formal | korean-hanja-formal | korean-hanja-informal | lao | lower-alpha | lower-armenian | lower-greek | lower-latin | lower-roman | malayalam | mongolian | myanmar | oriya | persian | simp-chinese-formal | simp-chinese-informal | square | tamil | telugu | thai | tibetan | trad-chinese-formal | trad-chinese-informal | upper-alpha | upper-armenian | upper-latin | upper-roman)\\b", "name": "support.constant.property-value.less" }, { - "match": "\\b(?i:sans-serif|serif|monospace|fantasy|cursive)\\b(?=\\s*[;,\\n}])", + "match": "\\b(sans-serif|serif|monospace|fantasy|cursive)\\b(?=\\s*[;,\\n}])", "name": "support.constant.font-name.less" } ] @@ -3701,9 +3788,6 @@ { "include": "#comment-block" }, - { - "include": "#vendor-prefix" - }, { "include": "#builtin-functions" }, @@ -3742,11 +3826,46 @@ } ] }, - "pseudo-classes": { + "pseudo-selectors": { "patterns": [ { - "begin": "(:)(dir|lang)(?=\\()", - "captures": { + "begin": "(:)(dir)(?=\\()", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "entity.other.attribute-name.pseudo-class.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "match": "ltr|rtl", + "name": "variable.parameter.dir.less" + }, + { + "include": "#less-variables" + } + ] + } + ] + }, + { + "begin": "(:)(lang)(?=\\()", + "beginCaptures": { "1": { "name": "punctuation.definition.entity.less" } @@ -3768,6 +3887,12 @@ }, "end": "(?=\\))", "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#literal-string" + }, { "include": "#unquoted-string" } @@ -3777,7 +3902,7 @@ }, { "begin": "(:)(not)(?=\\()", - "captures": { + "beginCaptures": { "1": { "name": "punctuation.definition.entity.less" } @@ -3808,7 +3933,7 @@ }, { "begin": "(:)(nth(-last)?-(child|of-type))(?=\\()", - "captures": { + "beginCaptures": { "1": { "name": "punctuation.definition.entity.less" }, @@ -3816,13 +3941,14 @@ "name": "entity.other.attribute-name.pseudo-class.less" } }, + "contentName": "meta.function-call.less", "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.group.end.less" } }, - "name": "meta.function-call.less", + "name": "entity.other.attribute-name.pseudo-class.less", "patterns": [ { "begin": "\\(", @@ -3841,10 +3967,16 @@ { "captures": { "1": { + "name": "keyword.operator.arithmetic.less" + }, + "2": { "name": "keyword.other.unit.less" + }, + "4": { + "name": "keyword.operator.arithmetic.less" } }, - "match": "(?:[-+]?(?:\\d+)?(n)(\\s*[-+]\\s*\\d+)?|[-+]?\\s*\\d+)", + "match": "(?:([-+])?(?:\\d+)?(n)(\\s*([-+])\\s*\\d+)?|[-+]?\\s*\\d+)", "name": "constant.numeric.less" }, { @@ -3861,8 +3993,8 @@ ] }, { - "begin": "(:)(host-context)(?=\\()", - "captures": { + "begin": "(:)(host-context|host|has|is|not|where)(?=\\()", + "beginCaptures": { "1": { "name": "punctuation.definition.entity.less" } @@ -3900,27 +4032,24 @@ "name": "entity.other.attribute-name.pseudo-class.less" } }, - "match": "(:)(active|any|checked|default|disabled|empty|enabled|first(-(child|of-type))?|fullscreen|focus|host|hover|indeterminate|in-range|invalid|last-(child|of-type)|left|link|only-(child|of-type)|optional|out-of-range|read-(only|write)|required|right|root|scope|target|valid|visited)", + "match": "(?x)(:)( active | any-link | autofill | blank | buffering | checked | current | default | defined | disabled | empty | enabled | first-child | first-of-type | first | focus-visible | focus-within | focus | fullscreen | future | host | hover | in-range | indeterminate | invalid | last-child | last-of-type | left | local-link | link | modal | muted | only-child | only-of-type | optional | out-of-range | past | paused | picture-in-picture | placeholder-shown | playing | popover-open | read-only | read-write | required | right | root | scope | seeking | stalled | target-within | target | user-invalid | user-valid | valid | visited | volume-locked )\\b", "name": "meta.function-call.less" - } - ] - }, - "pseudo-elements": { - "patterns": [ + }, { - "begin": "(::)(slotted)(?=\\()", - "captures": { + "begin": "(::?)(highlight|part|state)(?=\\s*(\\())", + "beginCaptures": { "1": { "name": "punctuation.definition.entity.less" } }, + "comment": "::highlight()", "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.group.end.less" } }, - "name": "entity.other.attribute-name.pseudo-class.less", + "name": "entity.other.attribute-name.pseudo-element.less", "patterns": [ { "begin": "\\(", @@ -3930,6 +4059,44 @@ } }, "end": "(?=\\))", + "patterns": [ + { + "match": "--|(?:-?(?:(?:[a-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R]))))(?:(?:[-\\da-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))*", + "name": "variable.parameter.less" + }, + { + "include": "#less-variables" + } + ] + } + ] + }, + { + "begin": "(::?)slotted(?=\\s*(\\())", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "comment": "::slotted()", + "contentName": "meta.function-call.less", + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "entity.other.attribute-name.pseudo-element.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "name": "meta.group.less", "patterns": [ { "include": "#selectors" @@ -3942,15 +4109,23 @@ "captures": { "1": { "name": "punctuation.definition.entity.less" - }, - "2": { + } + }, + "comment": "defined pseudo-elements", + "match": "(?x)(::?)(after | backdrop | before | cue | file-selector-button | first-letter | first-line | grammar-error | marker | placeholder | selection | spelling-error | target-text | view-transition-group | view-transition-image-pair | view-transition-new | view-transition-old | view-transition)\\b", + "name": "entity.other.attribute-name.pseudo-element.less" + }, + { + "captures": { + "1": { "name": "punctuation.definition.entity.less" }, - "3": { - "name": "support.type.vendor-prefix.less" + "2": { + "name": "meta.namespace.vendor-prefix.less" } }, - "match": "(?:(:{1,2})(?:before|after|first-line|first-letter)|(::)(-(?:moz|ms|webkit)-)?(?:(-?(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)))\\b", + "comment": "other possible pseudo-elements", + "match": "(?x)(::?)(-\\w+-)(--|(?:-?(?:(?:[a-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R]))))(?:(?:[-\\da-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))*)\\b", "name": "entity.other.attribute-name.pseudo-element.less" } ] @@ -4008,15 +4183,6 @@ } ] }, - "resolution-type": { - "captures": { - "1": { - "name": "keyword.other.unit.less" - } - }, - "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(dpi|dpcm|dppx))\\b", - "name": "constant.numeric.less" - }, "rule-list": { "patterns": [ { @@ -4062,17 +4228,81 @@ "include": "#less-variable-assignment" }, { - "include": "#less-variable-interpolation" + "begin": "(?=[-\\w]*?@\\{.*\\}[-\\w]*?\\s*:[^;{(]*(?=[;})]))", + "end": "(?=\\s*(;)|(?=[})]))", + "patterns": [ + { + "begin": "(?=[^\\s:])", + "end": "(?=(((\\+_?)?):)[\\s\\t]*)", + "name": "support.type.property-name.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + } + ] + }, + { + "begin": "(((\\+_?)?):)(?=[\\s\\t]*)", + "beginCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + }, + "contentName": "support.type.property-name.less", + "end": "(?=\\s*(;)|(?=[})]))", + "patterns": [ + { + "include": "#property-values" + } + ] + } + ] }, { "begin": "(?=[-a-z])", "end": "$|(?![-a-z])", "patterns": [ { - "include": "#vendor-prefix" + "include": "#custom-property-name" }, { - "include": "#custom-property-name" + "begin": "(-[\\w-]+?-)((?:(?:[a-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))(?:(?:[-\\da-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))*)\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + }, + "1": { + "name": "meta.namespace.vendor-prefix.less" + } + }, + "comment": "vendor-prefixed properties", + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "begin": "(((\\+_?)?):)(?=[\\s\\t]*)", + "beginCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + }, + "contentName": "meta.property-value.less", + "end": "(?=\\s*(;)|(?=[})]))", + "patterns": [ + { + "include": "#property-values" + }, + { + "match": "[\\w-]+", + "name": "support.constant.property-value.less" + } + ] + } + ] }, { "include": "#filter-function" @@ -4431,7 +4661,49 @@ ] }, { - "match": "(?x)\\b( accent-height | align-content | align-items | align-self | alignment-baseline | all | animation-timing-function | animation-range-start | animation-range-end | animation-range | animation-play-state | animation-name | animation-iteration-count | animation-fill-mode | animation-duration | animation-direction | animation-delay | animation-composition | animation | appearance | ascent | azimuth | backface-visibility | background-size | background-repeat-y | background-repeat-x | background-repeat | background-position-y | background-position-x | background-position | background-origin | background-image | background-color | background-clip | background-blend-mode | background-attachment | background | baseline-shift | begin | bias | blend-mode | border-top-left-radius | border-top-right-radius | border-bottom-left-radius | border-bottom-right-radius | border-end-end-radius | border-end-start-radius | border-start-end-radius | border-start-start-radius | border-block-start-color | border-block-start-style | border-block-start-width | border-block-start | border-block-end-color | border-block-end-style | border-block-end-width | border-block-end | border-block-color | border-block-style | border-block-width | border-block | border-inline-start-color | border-inline-start-style | border-inline-start-width | border-inline-start | border-inline-end-color | border-inline-end-style | border-inline-end-width | border-inline-end | border-inline-color | border-inline-style | border-inline-width | border-inline | border-top-color | border-top-style | border-top-width | border-top | border-right-color | border-right-style | border-right-width | border-right | border-bottom-color | border-bottom-style | border-bottom-width | border-bottom | border-left-color | border-left-style | border-left-width | border-left | border-image-outset | border-image-repeat | border-image-slice | border-image-source | border-image-width | border-image | border-color | border-style | border-width | border-radius | border-collapse | border-spacing | border | bottom | box-(align|decoration-break|direction|flex|ordinal-group|orient|pack|shadow|sizing) | break-(after|before|inside) | caption-side | clear | clip-path | clip-rule | clip | color(-(interpolation(-filters)?|profile|rendering))? | columns | column-(break-before|count|fill|gap|(rule(-(color|style|width))?)|span|width) | contain(-intrinsic-((((block|inline)-)?size)|height|width))? | content | counter-(increment|reset) | cursor | (c|d|f)(x|y) | direction | display | divisor | dominant-baseline | dur | elevation | empty-cells | enable-background | end | fallback | fill(-(opacity|rule))? | filter | flex(-(align|basis|direction|flow|grow|item-align|line-pack|negative|order|pack|positive|preferred-size|shrink|wrap))? | float | flood-(color|opacity) | font-display | font-family | font-feature-settings | font-kerning | font-language-override | font-size(-adjust)? | font-smoothing | font-stretch | font-style | font-synthesis | font-variant(-(alternates|caps|east-asian|ligatures|numeric|position))? | font-weight | font | fr | ((column|row)-)?gap | glyph-orientation-(horizontal|vertical) | grid-(area|gap) | grid-auto-(columns|flow|rows) | grid-(column|row)(-(end|gap|start))? | grid-template(-(areas|columns|rows))? | height | hyphens | image-(orientation|rendering|resolution) | inset(-(block|inline))?(-(start|end))? | isolation | justify-content | justify-items | justify-self | kerning | left | letter-spacing | lighting-color | line-(box-contain|break|clamp|height) | list-style(-(image|position|type))? | (margin|padding)(-(bottom|left|right|top)|(-(block|inline)?(-(end|start))?))? | marker(-(end|mid|start))? | mask(-(clip||composite|image|origin|position|repeat|size|type))? | (max|min)-(height|width) | mix-blend-mode | nbsp-mode | negative | object-(fit|position) | opacity | operator | order | orphans | outline(-(color|offset|style|width))? | overflow(-((inline|block)|scrolling|wrap|x|y))? | overscroll-behavior(-block|-(inline|x|y))? | pad(ding(-(bottom|left|right|top))?)? | page(-break-(after|before|inside))? | paint-order | pause(-(after|before))? | perspective(-origin(-(x|y))?)? | pitch(-range)? | place-content | place-self | pointer-events | position | prefix | quotes | range | resize | right | rotate | scale | scroll-behavior | shape-(image-threshold|margin|outside|rendering) | size | speak(-as)? | src | stop-(color|opacity) | stroke(-(dash(array|offset)|line(cap|join)|miterlimit|opacity|width))? | suffix | symbols | system | tab-size | table-layout | tap-highlight-color | text-align(-last)? | text-decoration(-(color|line|style))? | text-emphasis(-(color|position|style))? | text-(anchor|fill-color|height|indent|justify|orientation|overflow|rendering|size-adjust|shadow|transform|underline-position|wrap) | top | touch-action | transform(-origin(-(x|y))?) | transform(-style)? | transition(-(delay|duration|property|timing-function))? | translate | unicode-(bidi|range) | user-(drag|select) | vertical-align | visibility | white-space(-collapse)? | widows | width | will-change | word-(break|spacing|wrap) | writing-mode | z-index | zoom )\\b", + "begin": "\\bcontainer(?:-name)?(?=\\s*?:)", + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "support.type.property-name.less", + "patterns": [ + { + "begin": "(((\\+_?)?):)(?=[\\s\\t]*)", + "beginCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + }, + "contentName": "meta.property-value.less", + "end": "(?=\\s*(;)|(?=[})]))", + "patterns": [ + { + "match": "\\bdefault\\b", + "name": "invalid.illegal.property-value.less" + }, + { + "include": "#global-property-values" + }, + { + "include": "#custom-property-name" + }, + { + "contentName": "variable.other.constant.container-name.less", + "match": "--|(?:-?(?:(?:[a-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R]))))(?:(?:[-\\da-zA-Z_]|[\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}\\x{200D}\\x{203F}\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}])|(?:\\\\(?:\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\s\\R])))*", + "name": "support.constant.property-value.less" + }, + { + "include": "#property-values" + } + ] + } + ] + }, + { + "match": "(?x)\\b( accent-height | align-content | align-items | align-self | alignment-baseline | all | animation-timing-function | animation-range-start | animation-range-end | animation-range | animation-play-state | animation-name | animation-iteration-count | animation-fill-mode | animation-duration | animation-direction | animation-delay | animation-composition | animation | appearance | ascent | aspect-ratio | azimuth | backface-visibility | background-size | background-repeat-y | background-repeat-x | background-repeat | background-position-y | background-position-x | background-position | background-origin | background-image | background-color | background-clip | background-blend-mode | background-attachment | background | baseline-shift | begin | bias | blend-mode | border-top-left-radius | border-top-right-radius | border-bottom-left-radius | border-bottom-right-radius | border-end-end-radius | border-end-start-radius | border-start-end-radius | border-start-start-radius | border-block-start-color | border-block-start-style | border-block-start-width | border-block-start | border-block-end-color | border-block-end-style | border-block-end-width | border-block-end | border-block-color | border-block-style | border-block-width | border-block | border-inline-start-color | border-inline-start-style | border-inline-start-width | border-inline-start | border-inline-end-color | border-inline-end-style | border-inline-end-width | border-inline-end | border-inline-color | border-inline-style | border-inline-width | border-inline | border-top-color | border-top-style | border-top-width | border-top | border-right-color | border-right-style | border-right-width | border-right | border-bottom-color | border-bottom-style | border-bottom-width | border-bottom | border-left-color | border-left-style | border-left-width | border-left | border-image-outset | border-image-repeat | border-image-slice | border-image-source | border-image-width | border-image | border-color | border-style | border-width | border-radius | border-collapse | border-spacing | border | bottom | box-(align|decoration-break|direction|flex|ordinal-group|orient|pack|shadow|sizing) | break-(after|before|inside) | caption-side | clear | clip-path | clip-rule | clip | color(-(interpolation(-filters)?|profile|rendering))? | columns | column-(break-before|count|fill|gap|(rule(-(color|style|width))?)|span|width) | container-name | container-type | container | contain-intrinsic-block-size | contain-intrinsic-inline-size | contain-intrinsic-height | contain-intrinsic-size | contain-intrinsic-width | contain | content | counter-(increment|reset) | cursor | [cdf][xy] | direction | display | divisor | dominant-baseline | dur | elevation | empty-cells | enable-background | end | fallback | fill(-(opacity|rule))? | filter | flex(-(align|basis|direction|flow|grow|item-align|line-pack|negative|order|pack|positive|preferred-size|shrink|wrap))? | float | flood-(color|opacity) | font-display | font-family | font-feature-settings | font-kerning | font-language-override | font-size(-adjust)? | font-smoothing | font-stretch | font-style | font-synthesis | font-variant(-(alternates|caps|east-asian|ligatures|numeric|position))? | font-weight | font | fr | ((column|row)-)?gap | glyph-orientation-(horizontal|vertical) | grid-(area|gap) | grid-auto-(columns|flow|rows) | grid-(column|row)(-(end|gap|start))? | grid-template(-(areas|columns|rows))? | grid | height | hyphens | image-(orientation|rendering|resolution) | inset(-(block|inline))?(-(start|end))? | isolation | justify-content | justify-items | justify-self | kerning | left | letter-spacing | lighting-color | line-(box-contain|break|clamp|height) | list-style(-(image|position|type))? | (margin|padding)(-(bottom|left|right|top)|(-(block|inline)?(-(end|start))?))? | marker(-(end|mid|start))? | mask(-(clip||composite|image|origin|position|repeat|size|type))? | (max|min)-(height|width) | mix-blend-mode | nbsp-mode | negative | object-(fit|position) | opacity | operator | order | orphans | outline(-(color|offset|style|width))? | overflow(-((inline|block)|scrolling|wrap|x|y))? | overscroll-behavior(-block|-(inline|x|y))? | pad(ding(-(bottom|left|right|top))?)? | page(-break-(after|before|inside))? | paint-order | pause(-(after|before))? | perspective(-origin(-(x|y))?)? | pitch(-range)? | place-content | place-self | pointer-events | position | prefix | quotes | range | resize | right | rotate | scale | scroll-behavior | shape-(image-threshold|margin|outside|rendering) | size | speak(-as)? | src | stop-(color|opacity) | stroke(-(dash(array|offset)|line(cap|join)|miterlimit|opacity|width))? | suffix | symbols | system | tab-size | table-layout | tap-highlight-color | text-align(-last)? | text-decoration(-(color|line|style))? | text-emphasis(-(color|position|style))? | text-(anchor|fill-color|height|indent|justify|orientation|overflow|rendering|size-adjust|shadow|transform|underline-position|wrap) | top | touch-action | transform(-origin(-(x|y))?) | transform(-style)? | transition(-(delay|duration|property|timing-function))? | translate | unicode-(bidi|range) | user-(drag|select) | vertical-align | visibility | white-space(-collapse)? | widows | width | will-change | word-(break|spacing|wrap) | writing-mode | z-index | zoom )\\b", "name": "support.type.property-name.less" }, { @@ -4599,10 +4871,7 @@ ] }, { - "include": "#pseudo-elements" - }, - { - "include": "#pseudo-classes" + "include": "#pseudo-selectors" }, { "include": "#less-extend" @@ -4621,12 +4890,17 @@ }, { "begin": "\\[", - "captures": { + "beginCaptures": { "0": { - "name": "punctuation.definition.entity.less" + "name": "punctuation.section.braces.begin.less" } }, "end": "\\]", + "endCaptures": { + "0": { + "name": "punctuation.section.braces.end.less" + } + }, "name": "meta.attribute-selector.less", "patterns": [ { @@ -4641,7 +4915,7 @@ }, { "begin": "\\s*([~*|^$]?=)\\s*", - "captures": { + "beginCaptures": { "1": { "name": "keyword.operator.attribute-selector.less" } @@ -4898,6 +5172,37 @@ } ] }, + "style-function": { + "begin": "\\b(style)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.style.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#rule-list-body" + } + ] + } + ] + }, "symbols-function": { "begin": "\\b(symbols)(?=\\()", "beginCaptures": { @@ -5400,10 +5705,6 @@ } ] }, - "vendor-prefix": { - "match": "-(?:webkit|moz(-osx)?|ms|o)-", - "name": "support.type.vendor-prefix.less" - }, "view-function": { "begin": "\\b(view)(?=\\()", "beginCaptures": { @@ -5433,10 +5734,10 @@ "name": "support.constant.property-value.less" }, { - "include": "#length-type" + "include": "#percentage-type" }, { - "include": "#percentage-type" + "include": "#length-type" }, { "include": "#less-variables" diff --git a/extensions/markdown-language-features/.vscodeignore b/extensions/markdown-language-features/.vscodeignore index bbd727a24..0d35b6200 100644 --- a/extensions/markdown-language-features/.vscodeignore +++ b/extensions/markdown-language-features/.vscodeignore @@ -9,7 +9,6 @@ out/** extension.webpack.config.js extension-browser.webpack.config.js cgmanifest.json -yarn.lock package-lock.json preview-src/** webpack.config.js diff --git a/extensions/markdown-language-features/package-lock.json b/extensions/markdown-language-features/package-lock.json index cfeb2c762..4e0de48a0 100644 --- a/extensions/markdown-language-features/package-lock.json +++ b/extensions/markdown-language-features/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@vscode/extension-telemetry": "^0.9.0", - "dompurify": "^3.0.5", + "dompurify": "^3.1.3", "highlight.js": "^11.8.0", "markdown-it": "^12.3.2", "markdown-it-front-matter": "^0.2.4", @@ -352,9 +352,9 @@ } }, "node_modules/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.3.tgz", + "integrity": "sha512-5sOWYSNPaxz6o2MUPvtyxTTqR4D3L77pr5rUQoWgD5ROQtVIZQgJkXbo1DLlK3vj11YGw5+LnF4SYti4gZmwng==" }, "node_modules/domutils": { "version": "3.1.0", diff --git a/extensions/markdown-language-features/package.json b/extensions/markdown-language-features/package.json index ad6446073..a4555a9e5 100644 --- a/extensions/markdown-language-features/package.json +++ b/extensions/markdown-language-features/package.json @@ -764,7 +764,7 @@ }, "dependencies": { "@vscode/extension-telemetry": "^0.9.0", - "dompurify": "^3.0.5", + "dompurify": "^3.1.3", "highlight.js": "^11.8.0", "markdown-it": "^12.3.2", "markdown-it-front-matter": "^0.2.4", diff --git a/extensions/markdown-language-features/preview-src/index.ts b/extensions/markdown-language-features/preview-src/index.ts index b54b09ef7..33c84e0a3 100644 --- a/extensions/markdown-language-features/preview-src/index.ts +++ b/extensions/markdown-language-features/preview-src/index.ts @@ -332,11 +332,11 @@ document.addEventListener('click', event => { let hrefText = node.getAttribute('data-href'); if (!hrefText) { + hrefText = node.getAttribute('href'); // Pass through known schemes - if (passThroughLinkSchemes.some(scheme => node.href.startsWith(scheme))) { + if (passThroughLinkSchemes.some(scheme => hrefText.startsWith(scheme))) { return; } - hrefText = node.getAttribute('href'); } // If original link doesn't look like a url, delegate back to VS Code to resolve diff --git a/extensions/markdown-math/.vscodeignore b/extensions/markdown-math/.vscodeignore index 4a8c70b16..85f550b7d 100644 --- a/extensions/markdown-math/.vscodeignore +++ b/extensions/markdown-math/.vscodeignore @@ -4,7 +4,6 @@ extension-browser.webpack.config.js extension.webpack.config.js esbuild.js cgmanifest.json -yarn.lock package-lock.json webpack.config.js tsconfig.json diff --git a/extensions/media-preview/.vscodeignore b/extensions/media-preview/.vscodeignore index 601e6fa30..532c87f6f 100644 --- a/extensions/media-preview/.vscodeignore +++ b/extensions/media-preview/.vscodeignore @@ -6,7 +6,6 @@ out/** extension.webpack.config.js extension-browser.webpack.config.js cgmanifest.json -yarn.lock package-lock.json preview-src/** webpack.config.js diff --git a/extensions/media-preview/src/imagePreview/index.ts b/extensions/media-preview/src/imagePreview/index.ts index 007e466d9..e0c605c2a 100644 --- a/extensions/media-preview/src/imagePreview/index.ts +++ b/extensions/media-preview/src/imagePreview/index.ts @@ -113,8 +113,6 @@ class ImagePreview extends MediaPreview { this.updateBinarySize(); this.render(); this.updateState(); - - this.webviewEditor.webview.postMessage({ type: 'setActive', value: this.webviewEditor.active }); } public override dispose(): void { @@ -157,6 +155,10 @@ class ImagePreview extends MediaPreview { this.zoomStatusBarEntry.hide(this); } } + protected override async render(): Promise { + await super.render(); + this.webviewEditor.webview.postMessage({ type: 'setActive', value: this.webviewEditor.active }); + } protected override async getWebviewContents(): Promise { const version = Date.now().toString(); diff --git a/extensions/merge-conflict/.vscodeignore b/extensions/merge-conflict/.vscodeignore index b12e30a18..3a8a2a96a 100644 --- a/extensions/merge-conflict/.vscodeignore +++ b/extensions/merge-conflict/.vscodeignore @@ -3,5 +3,4 @@ tsconfig.json out/** extension.webpack.config.js extension-browser.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/microsoft-authentication/.vscodeignore b/extensions/microsoft-authentication/.vscodeignore index 0e10c404a..98b90d34d 100644 --- a/extensions/microsoft-authentication/.vscodeignore +++ b/extensions/microsoft-authentication/.vscodeignore @@ -4,7 +4,6 @@ out/test/** out/** extension.webpack.config.js extension-browser.webpack.config.js -yarn.lock package-lock.json src/** .gitignore diff --git a/extensions/microsoft-authentication/extension-browser.webpack.config.js b/extensions/microsoft-authentication/extension-browser.webpack.config.js index 0d395fc0f..1590cef5e 100644 --- a/extensions/microsoft-authentication/extension-browser.webpack.config.js +++ b/extensions/microsoft-authentication/extension-browser.webpack.config.js @@ -24,6 +24,7 @@ module.exports = withBrowserDefaults({ alias: { './node/authServer': path.resolve(__dirname, 'src/browser/authServer'), './node/buffer': path.resolve(__dirname, 'src/browser/buffer'), + './node/fetch': path.resolve(__dirname, 'src/browser/fetch'), './node/authProvider': path.resolve(__dirname, 'src/browser/authProvider'), } } diff --git a/extensions/microsoft-authentication/package-lock.json b/extensions/microsoft-authentication/package-lock.json index 924da288e..8f05b14f0 100644 --- a/extensions/microsoft-authentication/package-lock.json +++ b/extensions/microsoft-authentication/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@azure/ms-rest-azure-env": "^2.0.0", - "@azure/msal-node": "^2.13.0", + "@azure/msal-node": "^2.13.1", "@vscode/extension-telemetry": "^0.9.0", "vscode-tas-client": "^0.1.84" }, @@ -31,19 +31,19 @@ "integrity": "sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw==" }, "node_modules/@azure/msal-common": { - "version": "14.14.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.1.tgz", - "integrity": "sha512-2Q3tqNz/PZLfSr8BvcHZVpRRfSn4MjGSqjj9J+HlBsmbf1Uu4P0WeXnemjTJwwx9KrmplsrN3UkZ/LPOR720rw==", + "version": "14.14.2", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.2.tgz", + "integrity": "sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog==", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.13.0.tgz", - "integrity": "sha512-DhP97ycs7qlCVzzzWGzJiwAFyFj5okno74E4FUZ61oCLfKh4IxA1kxirqzrWuYZWpBe9HVPL6GA4NvmlEOBN5Q==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.13.1.tgz", + "integrity": "sha512-sijfzPNorKt6+9g1/miHwhj6Iapff4mPQx1azmmZExgzUROqWTM1o3ACyxDja0g47VpowFy/sxTM/WsuCyXTiw==", "dependencies": { - "@azure/msal-common": "14.14.1", + "@azure/msal-common": "14.14.2", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, diff --git a/extensions/microsoft-authentication/package.json b/extensions/microsoft-authentication/package.json index ad6a4d5cb..15acb5db2 100644 --- a/extensions/microsoft-authentication/package.json +++ b/extensions/microsoft-authentication/package.json @@ -126,7 +126,7 @@ }, "dependencies": { "@azure/ms-rest-azure-env": "^2.0.0", - "@azure/msal-node": "^2.13.0", + "@azure/msal-node": "^2.13.1", "@vscode/extension-telemetry": "^0.9.0", "vscode-tas-client": "^0.1.84" }, diff --git a/extensions/microsoft-authentication/src/AADHelper.ts b/extensions/microsoft-authentication/src/AADHelper.ts index 713f5f12e..9722145dd 100644 --- a/extensions/microsoft-authentication/src/AADHelper.ts +++ b/extensions/microsoft-authentication/src/AADHelper.ts @@ -11,6 +11,7 @@ import { generateCodeChallenge, generateCodeVerifier, randomUUID } from './crypt import { BetterTokenStorage, IDidChangeInOtherWindowEvent } from './betterSecretStorage'; import { LoopbackAuthServer } from './node/authServer'; import { base64Decode } from './node/buffer'; +import fetch from './node/fetch'; import { UriEventHandler } from './UriEventHandler'; import TelemetryReporter from '@vscode/extension-telemetry'; import { Environment } from '@azure/ms-rest-azure-env'; @@ -805,11 +806,10 @@ export class AzureActiveDirectoryService { let result; let errorMessage: string | undefined; try { - result = await fetch(endpoint, { + result = await fetch(endpoint.toString(), { method: 'POST', headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - 'Content-Length': postData.length.toString() + 'Content-Type': 'application/x-www-form-urlencoded' }, body: postData }); diff --git a/extensions/microsoft-authentication/src/browser/fetch.ts b/extensions/microsoft-authentication/src/browser/fetch.ts new file mode 100644 index 000000000..c61281ca8 --- /dev/null +++ b/extensions/microsoft-authentication/src/browser/fetch.ts @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export default fetch; diff --git a/extensions/microsoft-authentication/src/common/event.ts b/extensions/microsoft-authentication/src/common/event.ts new file mode 100644 index 000000000..1df992cf8 --- /dev/null +++ b/extensions/microsoft-authentication/src/common/event.ts @@ -0,0 +1,107 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { Event } from 'vscode'; + +/** + * The EventBufferer is useful in situations in which you want + * to delay firing your events during some code. + * You can wrap that code and be sure that the event will not + * be fired during that wrap. + * + * ``` + * const emitter: Emitter; + * const delayer = new EventDelayer(); + * const delayedEvent = delayer.wrapEvent(emitter.event); + * + * delayedEvent(console.log); + * + * delayer.bufferEvents(() => { + * emitter.fire(); // event will not be fired yet + * }); + * + * // event will only be fired at this point + * ``` + */ +export class EventBufferer { + + private data: { buffers: Function[] }[] = []; + + wrapEvent(event: Event): Event; + wrapEvent(event: Event, reduce: (last: T | undefined, event: T) => T): Event; + wrapEvent(event: Event, reduce: (last: O | undefined, event: T) => O, initial: O): Event; + wrapEvent(event: Event, reduce?: (last: T | O | undefined, event: T) => T | O, initial?: O): Event { + return (listener, thisArgs?, disposables?) => { + return event(i => { + const data = this.data[this.data.length - 1]; + + // Non-reduce scenario + if (!reduce) { + // Buffering case + if (data) { + data.buffers.push(() => listener.call(thisArgs, i)); + } else { + // Not buffering case + listener.call(thisArgs, i); + } + return; + } + + // Reduce scenario + const reduceData = data as typeof data & { + /** + * The accumulated items that will be reduced. + */ + items?: T[]; + /** + * The reduced result cached to be shared with other listeners. + */ + reducedResult?: T | O; + }; + + // Not buffering case + if (!reduceData) { + // TODO: Is there a way to cache this reduce call for all listeners? + listener.call(thisArgs, reduce(initial, i)); + return; + } + + // Buffering case + reduceData.items ??= []; + reduceData.items.push(i); + if (reduceData.buffers.length === 0) { + // Include a single buffered function that will reduce all events when we're done buffering events + data.buffers.push(() => { + // cache the reduced result so that the value can be shared across all listeners + reduceData.reducedResult ??= initial + ? reduceData.items!.reduce(reduce as (last: O | undefined, event: T) => O, initial) + : reduceData.items!.reduce(reduce as (last: T | undefined, event: T) => T); + listener.call(thisArgs, reduceData.reducedResult); + }); + } + }, undefined, disposables); + }; + } + + bufferEvents(fn: () => R): R { + const data = { buffers: new Array() }; + this.data.push(data); + const r = fn(); + this.data.pop(); + data.buffers.forEach(flush => flush()); + return r; + } + + async bufferEventsAsync(fn: () => Promise): Promise { + const data = { buffers: new Array() }; + this.data.push(data); + try { + const r = await fn(); + return r; + } finally { + this.data.pop(); + data.buffers.forEach(flush => flush()); + } + } +} diff --git a/extensions/microsoft-authentication/src/common/loopbackClientAndOpener.ts b/extensions/microsoft-authentication/src/common/loopbackClientAndOpener.ts index 4a455ea50..3fbb03400 100644 --- a/extensions/microsoft-authentication/src/common/loopbackClientAndOpener.ts +++ b/extensions/microsoft-authentication/src/common/loopbackClientAndOpener.ts @@ -5,7 +5,7 @@ import type { ILoopbackClient, ServerAuthorizationCodeResponse } from '@azure/msal-node'; import type { UriEventHandler } from '../UriEventHandler'; -import { env, Uri } from 'vscode'; +import { env, LogOutputChannel, Uri } from 'vscode'; import { toPromise } from './async'; export interface ILoopbackClientAndOpener extends ILoopbackClient { @@ -15,12 +15,13 @@ export interface ILoopbackClientAndOpener extends ILoopbackClient { export class UriHandlerLoopbackClient implements ILoopbackClientAndOpener { constructor( private readonly _uriHandler: UriEventHandler, - private readonly _redirectUri: string + private readonly _redirectUri: string, + private readonly _logger: LogOutputChannel ) { } - async listenForAuthCode(successTemplate?: string, errorTemplate?: string): Promise { - console.log(successTemplate, errorTemplate); + async listenForAuthCode(): Promise { const url = await toPromise(this._uriHandler.event); + this._logger.debug(`Received URL event. Authority: ${url.authority}`); const result = new URL(url.toString(true)); return { diff --git a/extensions/microsoft-authentication/src/common/publicClientCache.ts b/extensions/microsoft-authentication/src/common/publicClientCache.ts index cb9339f92..925a4d1a8 100644 --- a/extensions/microsoft-authentication/src/common/publicClientCache.ts +++ b/extensions/microsoft-authentication/src/common/publicClientCache.ts @@ -7,6 +7,8 @@ import type { Disposable, Event } from 'vscode'; export interface ICachedPublicClientApplication extends Disposable { initialize(): Promise; + onDidAccountsChange: Event<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>; + onDidRemoveLastAccount: Event; acquireTokenSilent(request: SilentFlowRequest): Promise; acquireTokenInteractive(request: InteractiveRequest): Promise; removeAccount(account: AccountInfo): Promise; @@ -16,6 +18,7 @@ export interface ICachedPublicClientApplication extends Disposable { } export interface ICachedPublicClientApplicationManager { + onDidAccountsChange: Event<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>; getOrCreate(clientId: string, authority: string): Promise; getAll(): ICachedPublicClientApplication[]; } diff --git a/extensions/microsoft-authentication/src/common/scopeData.ts b/extensions/microsoft-authentication/src/common/scopeData.ts index 148658de3..4432abfed 100644 --- a/extensions/microsoft-authentication/src/common/scopeData.ts +++ b/extensions/microsoft-authentication/src/common/scopeData.ts @@ -6,6 +6,9 @@ const DEFAULT_CLIENT_ID = 'aebc6443-996d-45c2-90f0-388ff96faa56'; const DEFAULT_TENANT = 'organizations'; +const OIDC_SCOPES = ['openid', 'email', 'profile', 'offline_access']; +const GRAPH_TACK_ON_SCOPE = 'User.Read'; + export class ScopeData { /** @@ -38,22 +41,10 @@ export class ScopeData { constructor(readonly originalScopes: readonly string[] = []) { const modifiedScopes = [...originalScopes]; - if (!modifiedScopes.includes('openid')) { - modifiedScopes.push('openid'); - } - if (!modifiedScopes.includes('email')) { - modifiedScopes.push('email'); - } - if (!modifiedScopes.includes('profile')) { - modifiedScopes.push('profile'); - } - if (!modifiedScopes.includes('offline_access')) { - modifiedScopes.push('offline_access'); - } modifiedScopes.sort(); this.allScopes = modifiedScopes; this.scopeStr = modifiedScopes.join(' '); - this.scopesToSend = this.originalScopes.filter(s => !s.startsWith('VSCODE_')); + this.scopesToSend = this.getScopesToSend(modifiedScopes); this.clientId = this.getClientId(this.allScopes); this.tenant = this.getTenantId(this.allScopes); } @@ -75,4 +66,20 @@ export class ScopeData { return prev; }, undefined) ?? DEFAULT_TENANT; } + + private getScopesToSend(scopes: string[]) { + const scopesToSend = scopes.filter(s => !s.startsWith('VSCODE_')); + + const set = new Set(scopesToSend); + for (const scope of OIDC_SCOPES) { + set.delete(scope); + } + + // If we only had OIDC scopes, we need to add a tack-on scope to make the request valid + // by forcing Identity into treating this as a Graph token request. + if (!set.size) { + scopesToSend.push(GRAPH_TACK_ON_SCOPE); + } + return scopesToSend; + } } diff --git a/extensions/microsoft-authentication/src/common/test/loopbackClientAndOpener.test.ts b/extensions/microsoft-authentication/src/common/test/loopbackClientAndOpener.test.ts index 5c55567d1..69d7afaa3 100644 --- a/extensions/microsoft-authentication/src/common/test/loopbackClientAndOpener.test.ts +++ b/extensions/microsoft-authentication/src/common/test/loopbackClientAndOpener.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { env, Uri } from 'vscode'; +import { env, Uri, window } from 'vscode'; import * as sinon from 'sinon'; import { UriHandlerLoopbackClient } from '../loopbackClientAndOpener'; import { UriEventHandler } from '../../UriEventHandler'; @@ -22,7 +22,7 @@ suite('UriHandlerLoopbackClient', () => { envStub.openExternal.resolves(true); envStub.asExternalUri.callThrough(); uriHandler = new UriEventHandler(); - client = new UriHandlerLoopbackClient(uriHandler, redirectUri); + client = new UriHandlerLoopbackClient(uriHandler, redirectUri, window.createOutputChannel('test', { log: true })); }); teardown(() => { diff --git a/extensions/microsoft-authentication/src/common/test/scopeData.test.ts b/extensions/microsoft-authentication/src/common/test/scopeData.test.ts index c0b578d4e..9250d7cec 100644 --- a/extensions/microsoft-authentication/src/common/test/scopeData.test.ts +++ b/extensions/microsoft-authentication/src/common/test/scopeData.test.ts @@ -9,24 +9,29 @@ import { ScopeData } from '../scopeData'; suite('ScopeData', () => { test('should include default scopes if not present', () => { const scopeData = new ScopeData(['custom_scope']); - assert.deepStrictEqual(scopeData.allScopes, ['custom_scope', 'email', 'offline_access', 'openid', 'profile']); + assert.deepStrictEqual(scopeData.allScopes, ['custom_scope']); }); test('should not duplicate default scopes if already present', () => { - const scopeData = new ScopeData(['openid', 'email', 'profile', 'offline_access']); - assert.deepStrictEqual(scopeData.allScopes, ['email', 'offline_access', 'openid', 'profile']); + const scopeData = new ScopeData(['custom_scope', 'openid', 'email', 'profile', 'offline_access']); + assert.deepStrictEqual(scopeData.allScopes, ['custom_scope', 'email', 'offline_access', 'openid', 'profile']); }); test('should sort the scopes alphabetically', () => { - const scopeData = new ScopeData(['profile', 'email', 'openid', 'offline_access']); - assert.deepStrictEqual(scopeData.allScopes, ['email', 'offline_access', 'openid', 'profile']); + const scopeData = new ScopeData(['custom_scope', 'profile', 'email', 'openid', 'offline_access']); + assert.deepStrictEqual(scopeData.allScopes, ['custom_scope', 'email', 'offline_access', 'openid', 'profile']); }); test('should create a space-separated string of all scopes', () => { - const scopeData = new ScopeData(['custom_scope']); + const scopeData = new ScopeData(['custom_scope', 'openid', 'email', 'offline_access', 'profile']); assert.strictEqual(scopeData.scopeStr, 'custom_scope email offline_access openid profile'); }); + test('should add TACK ON scope if all scopes are OIDC scopes', () => { + const scopeData = new ScopeData(['openid', 'email', 'offline_access', 'profile']); + assert.deepStrictEqual(scopeData.scopesToSend, ['email', 'offline_access', 'openid', 'profile', 'User.Read']); + }); + test('should filter out internal VS Code scopes for scopesToSend', () => { const scopeData = new ScopeData(['custom_scope', 'VSCODE_CLIENT_ID:some_id']); assert.deepStrictEqual(scopeData.scopesToSend, ['custom_scope']); diff --git a/extensions/microsoft-authentication/src/node/authProvider.ts b/extensions/microsoft-authentication/src/node/authProvider.ts index 3925f6f58..20c8bf305 100644 --- a/extensions/microsoft-authentication/src/node/authProvider.ts +++ b/extensions/microsoft-authentication/src/node/authProvider.ts @@ -12,6 +12,7 @@ import { ICachedPublicClientApplication } from '../common/publicClientCache'; import { MicrosoftAccountType, MicrosoftAuthenticationTelemetryReporter } from '../common/telemetryReporter'; import { loopbackTemplate } from './loopbackTemplate'; import { ScopeData } from '../common/scopeData'; +import { EventBufferer } from '../common/event'; const redirectUri = 'https://vscode.dev/redirect'; const MSA_TID = '9188040d-6c67-4c5b-b112-36a304b66dad'; @@ -21,6 +22,7 @@ export class MsalAuthProvider implements AuthenticationProvider { private readonly _disposables: { dispose(): void }[]; private readonly _publicClientManager: CachedPublicClientApplicationManager; + private readonly _eventBufferer = new EventBufferer(); /** * Event to signal a change in authentication sessions for this provider. @@ -52,15 +54,39 @@ export class MsalAuthProvider implements AuthenticationProvider { context.globalState, context.secrets, this._logger, - (e) => this._handleAccountChange(e) + this._env.name ); - this._disposables.push(this._publicClientManager); - this._disposables.push(this._onDidChangeSessionsEmitter); + const accountChangeEvent = this._eventBufferer.wrapEvent( + this._publicClientManager.onDidAccountsChange, + (last, newEvent) => { + if (!last) { + return newEvent; + } + const mergedEvent = { + added: [...(last.added ?? []), ...(newEvent.added ?? [])], + deleted: [...(last.deleted ?? []), ...(newEvent.deleted ?? [])], + changed: [...(last.changed ?? []), ...(newEvent.changed ?? [])] + }; + + const dedupedEvent = { + added: Array.from(new Map(mergedEvent.added.map(item => [item.username, item])).values()), + deleted: Array.from(new Map(mergedEvent.deleted.map(item => [item.username, item])).values()), + changed: Array.from(new Map(mergedEvent.changed.map(item => [item.username, item])).values()) + }; + return dedupedEvent; + }, + { added: new Array(), deleted: new Array(), changed: new Array() } + )(e => this._handleAccountChange(e)); + this._disposables.push( + this._onDidChangeSessionsEmitter, + this._publicClientManager, + accountChangeEvent + ); } async initialize(): Promise { - await this._publicClientManager.initialize(); + await this._eventBufferer.bufferEventsAsync(() => this._publicClientManager.initialize()); // Send telemetry for existing accounts for (const cachedPca of this._publicClientManager.getAll()) { @@ -79,40 +105,44 @@ export class MsalAuthProvider implements AuthenticationProvider { * See {@link onDidChangeSessions} for more information on how this is used. * @param param0 Event that contains the added and removed accounts */ - private _handleAccountChange({ added, deleted }: { added: AccountInfo[]; deleted: AccountInfo[] }) { - const process = (a: AccountInfo) => ({ - // This shouldn't be needed - accessToken: '1234', - id: a.homeAccountId, - scopes: [], - account: { - id: a.homeAccountId, - label: a.username - }, - idToken: a.idToken, + private _handleAccountChange({ added, changed, deleted }: { added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }) { + this._logger.debug(`[_handleAccountChange] added: ${added.length}, changed: ${changed.length}, deleted: ${deleted.length}`); + this._onDidChangeSessionsEmitter.fire({ + added: added.map(this.sessionFromAccountInfo), + changed: changed.map(this.sessionFromAccountInfo), + removed: deleted.map(this.sessionFromAccountInfo) }); - this._onDidChangeSessionsEmitter.fire({ added: added.map(process), changed: [], removed: deleted.map(process) }); } //#region AuthenticationProvider methods async getSessions(scopes: string[] | undefined, options?: AuthenticationGetSessionOptions): Promise { + const askingForAll = scopes === undefined; const scopeData = new ScopeData(scopes); - this._logger.info('[getSessions]', scopes ? scopeData.scopeStr : 'all', 'starting'); - if (!scopes) { - // Do NOT use `scopes` beyond this place in the code. Use `scopeData` instead. + // Do NOT use `scopes` beyond this place in the code. Use `scopeData` instead. + this._logger.info('[getSessions]', askingForAll ? '[all]' : `[${scopeData.scopeStr}]`, 'starting'); - const allSessions: AuthenticationSession[] = []; + // This branch only gets called by Core for sign out purposes and initial population of the account menu. Since we are + // living in a world where a "session" from Core's perspective is an account, we return 1 session per account. + // See the large comment on `onDidChangeSessions` for more information. + if (askingForAll) { + const allSessionsForAccounts = new Map(); for (const cachedPca of this._publicClientManager.getAll()) { - const sessions = await this.getAllSessionsForPca(cachedPca, scopeData.originalScopes, scopeData.scopesToSend, options?.account); - allSessions.push(...sessions); + for (const account of cachedPca.accounts) { + if (allSessionsForAccounts.has(account.homeAccountId)) { + continue; + } + allSessionsForAccounts.set(account.homeAccountId, this.sessionFromAccountInfo(account)); + } } + const allSessions = Array.from(allSessionsForAccounts.values()); + this._logger.info('[getSessions] [all]', `returned ${allSessions.length} session(s)`); return allSessions; } const cachedPca = await this.getOrCreatePublicClientApplication(scopeData.clientId, scopeData.tenant); const sessions = await this.getAllSessionsForPca(cachedPca, scopeData.originalScopes, scopeData.scopesToSend, options?.account); - this._logger.info(`[getSessions] returned ${sessions.length} sessions`); + this._logger.info(`[getSessions] [${scopeData.scopeStr}] returned ${sessions.length} session(s)`); return sessions; } @@ -121,42 +151,54 @@ export class MsalAuthProvider implements AuthenticationProvider { const scopeData = new ScopeData(scopes); // Do NOT use `scopes` beyond this place in the code. Use `scopeData` instead. - this._logger.info('[createSession]', scopeData.scopeStr, 'starting'); + this._logger.info('[createSession]', `[${scopeData.scopeStr}]`, 'starting'); const cachedPca = await this.getOrCreatePublicClientApplication(scopeData.clientId, scopeData.tenant); - let result: AuthenticationResult; - try { - result = await cachedPca.acquireTokenInteractive({ - openBrowser: async (url: string) => { await env.openExternal(Uri.parse(url)); }, - scopes: scopeData.scopesToSend, - // The logic for rendering one or the other of these templates is in the - // template itself, so we pass the same one for both. - successTemplate: loopbackTemplate, - errorTemplate: loopbackTemplate - }); - } catch (e) { - if (e instanceof CancellationError) { - const yes = l10n.t('Yes'); - const result = await window.showErrorMessage( - l10n.t('Having trouble logging in?'), - { - modal: true, - detail: l10n.t('Would you like to try a different way to sign in to your Microsoft account? ({0})', 'protocol handler') - }, - yes - ); - if (!result) { + let result: AuthenticationResult | undefined; + + // Currently, the http://localhost redirect URI is only in the AzureCloud environment... even though I did make the change in the SovereignCloud environments... + // TODO: Remove this check when the change is in all environments. + let useLoopBack = this._env !== Environment.AzureCloud && scopeData.clientId === 'aebc6443-996d-45c2-90f0-388ff96faa56'; + if (!useLoopBack) { + try { + result = await cachedPca.acquireTokenInteractive({ + openBrowser: async (url: string) => { await env.openExternal(Uri.parse(url)); }, + scopes: scopeData.scopesToSend, + // The logic for rendering one or the other of these templates is in the + // template itself, so we pass the same one for both. + successTemplate: loopbackTemplate, + errorTemplate: loopbackTemplate + }); + } catch (e) { + if (e instanceof CancellationError) { + const yes = l10n.t('Yes'); + const result = await window.showErrorMessage( + l10n.t('Having trouble logging in?'), + { + modal: true, + detail: l10n.t('Would you like to try a different way to sign in to your Microsoft account? ({0})', 'protocol handler') + }, + yes + ); + if (!result) { + this._telemetryReporter.sendLoginFailedEvent(); + throw e; + } + } + // This error comes from the backend and is likely not due to the user's machine + // failing to open a port or something local that would require us to try the + // URL handler loopback client. + if (e instanceof ServerError) { this._telemetryReporter.sendLoginFailedEvent(); throw e; } + + // The user wants to try the loopback client or we got an error likely due to spinning up the server + useLoopBack = true; } - // This error comes from the backend and is likely not due to the user's machine - // failing to open a port or something local that would require us to try the - // URL handler loopback client. - if (e instanceof ServerError) { - this._telemetryReporter.sendLoginFailedEvent(); - throw e; - } - const loopbackClient = new UriHandlerLoopbackClient(this._uriHandler, redirectUri); + } + + if (useLoopBack) { + const loopbackClient = new UriHandlerLoopbackClient(this._uriHandler, redirectUri, this._logger); try { result = await cachedPca.acquireTokenInteractive({ openBrowser: (url: string) => loopbackClient.openBrowser(url), @@ -169,32 +211,48 @@ export class MsalAuthProvider implements AuthenticationProvider { } } - const session = this.toAuthenticationSession(result, scopeData.originalScopes); + if (!result) { + this._telemetryReporter.sendLoginFailedEvent(); + throw new Error('No result returned from MSAL'); + } + + const session = this.sessionFromAuthenticationResult(result, scopeData.originalScopes); this._telemetryReporter.sendLoginEvent(session.scopes); - this._logger.info('[createSession]', scopeData.scopeStr, 'returned session'); + this._logger.info('[createSession]', `[${scopeData.scopeStr}]`, 'returned session'); + // This is the only scenario in which we need to fire the _onDidChangeSessionsEmitter out of band... + // the badge flow (when the client passes no options in to getSession) will only remove a badge if a session + // was created that _matches the scopes_ that that badge requests. See `onDidChangeSessions` for more info. + // TODO: This should really be fixed in Core. this._onDidChangeSessionsEmitter.fire({ added: [session], changed: [], removed: [] }); return session; } async removeSession(sessionId: string): Promise { this._logger.info('[removeSession]', sessionId, 'starting'); + const promises = new Array>(); for (const cachedPca of this._publicClientManager.getAll()) { const accounts = cachedPca.accounts; for (const account of accounts) { if (account.homeAccountId === sessionId) { this._telemetryReporter.sendLogoutEvent(); - try { - await cachedPca.removeAccount(account); - } catch (e) { - this._telemetryReporter.sendLogoutFailedEvent(); - throw e; - } - this._logger.info('[removeSession]', sessionId, 'removed session'); - return; + promises.push(cachedPca.removeAccount(account)); + this._logger.info(`[removeSession] [${sessionId}] [${cachedPca.clientId}] [${cachedPca.authority}] removing session...`); } } } - this._logger.info('[removeSession]', sessionId, 'session not found'); + if (!promises.length) { + this._logger.info('[removeSession]', sessionId, 'session not found'); + return; + } + const results = await Promise.allSettled(promises); + for (const result of results) { + if (result.status === 'rejected') { + this._telemetryReporter.sendLogoutFailedEvent(); + this._logger.error('[removeSession]', sessionId, 'error removing session', result.reason); + } + } + + this._logger.info('[removeSession]', sessionId, `attempted to remove ${promises.length} sessions`); } //#endregion @@ -214,20 +272,22 @@ export class MsalAuthProvider implements AuthenticationProvider { ? cachedPca.accounts.filter(a => a.homeAccountId === accountFilter.id) : cachedPca.accounts; const sessions: AuthenticationSession[] = []; - for (const account of accounts) { - try { - const result = await cachedPca.acquireTokenSilent({ account, scopes: scopesToSend, redirectUri }); - sessions.push(this.toAuthenticationSession(result, originalScopes)); - } catch (e) { - // If we can't get a token silently, the account is probably in a bad state so we should skip it - // MSAL will log this already, so we don't need to log it again - continue; + return this._eventBufferer.bufferEventsAsync(async () => { + for (const account of accounts) { + try { + const result = await cachedPca.acquireTokenSilent({ account, scopes: scopesToSend, redirectUri }); + sessions.push(this.sessionFromAuthenticationResult(result, originalScopes)); + } catch (e) { + // If we can't get a token silently, the account is probably in a bad state so we should skip it + // MSAL will log this already, so we don't need to log it again + continue; + } } - } - return sessions; + return sessions; + }); } - private toAuthenticationSession(result: AuthenticationResult, scopes: readonly string[]): AuthenticationSession & { idToken: string } { + private sessionFromAuthenticationResult(result: AuthenticationResult, scopes: readonly string[]): AuthenticationSession & { idToken: string } { return { accessToken: result.accessToken, idToken: result.idToken, @@ -239,4 +299,17 @@ export class MsalAuthProvider implements AuthenticationProvider { scopes }; } + + private sessionFromAccountInfo(account: AccountInfo): AuthenticationSession { + return { + accessToken: '1234', + id: account.homeAccountId, + scopes: [], + account: { + id: account.homeAccountId, + label: account.username + }, + idToken: account.idToken, + }; + } } diff --git a/extensions/microsoft-authentication/src/node/cachedPublicClientApplication.ts b/extensions/microsoft-authentication/src/node/cachedPublicClientApplication.ts new file mode 100644 index 000000000..c67961046 --- /dev/null +++ b/extensions/microsoft-authentication/src/node/cachedPublicClientApplication.ts @@ -0,0 +1,198 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { PublicClientApplication, AccountInfo, Configuration, SilentFlowRequest, AuthenticationResult, InteractiveRequest, LogLevel } from '@azure/msal-node'; +import { Disposable, Memento, SecretStorage, LogOutputChannel, window, ProgressLocation, l10n, EventEmitter } from 'vscode'; +import { Delayer, raceCancellationAndTimeoutError } from '../common/async'; +import { SecretStorageCachePlugin } from '../common/cachePlugin'; +import { MsalLoggerOptions } from '../common/loggerOptions'; +import { ICachedPublicClientApplication } from '../common/publicClientCache'; + +export class CachedPublicClientApplication implements ICachedPublicClientApplication { + private _pca: PublicClientApplication; + private _sequencer = new Sequencer(); + private readonly _refreshDelayer = new DelayerByKey(); + + private _accounts: AccountInfo[] = []; + private readonly _disposable: Disposable; + + private readonly _loggerOptions = new MsalLoggerOptions(this._logger); + private readonly _secretStorageCachePlugin = new SecretStorageCachePlugin( + this._secretStorage, + // Include the prefix as a differentiator to other secrets + `pca:${JSON.stringify({ clientId: this._clientId, authority: this._authority })}` + ); + private readonly _config: Configuration = { + auth: { clientId: this._clientId, authority: this._authority }, + system: { + loggerOptions: { + correlationId: `${this._clientId}] [${this._authority}`, + loggerCallback: (level, message, containsPii) => this._loggerOptions.loggerCallback(level, message, containsPii), + logLevel: LogLevel.Trace + } + }, + cache: { + cachePlugin: this._secretStorageCachePlugin + } + }; + + /** + * We keep track of the last time an account was removed so we can recreate the PCA if we detect that an account was removed. + * This is due to MSAL-node not providing a way to detect when an account is removed from the cache. An internal issue has been + * filed to track this. If MSAL-node ever provides a way to detect this or handle this better in the Persistant Cache Plugin, + * we can remove this logic. + */ + private _lastCreated: Date; + + //#region Events + + private readonly _onDidAccountsChangeEmitter = new EventEmitter<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>; + readonly onDidAccountsChange = this._onDidAccountsChangeEmitter.event; + + private readonly _onDidRemoveLastAccountEmitter = new EventEmitter(); + readonly onDidRemoveLastAccount = this._onDidRemoveLastAccountEmitter.event; + + //#endregion + + constructor( + private readonly _clientId: string, + private readonly _authority: string, + private readonly _globalMemento: Memento, + private readonly _secretStorage: SecretStorage, + private readonly _logger: LogOutputChannel + ) { + this._pca = new PublicClientApplication(this._config); + this._lastCreated = new Date(); + this._disposable = Disposable.from( + this._registerOnSecretStorageChanged(), + this._onDidAccountsChangeEmitter, + this._onDidRemoveLastAccountEmitter + ); + } + + get accounts(): AccountInfo[] { return this._accounts; } + get clientId(): string { return this._clientId; } + get authority(): string { return this._authority; } + + initialize(): Promise { + return this._update(); + } + + dispose(): void { + this._disposable.dispose(); + } + + async acquireTokenSilent(request: SilentFlowRequest): Promise { + this._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${this._authority}] [${request.scopes.join(' ')}] [${request.account.username}] starting...`); + const result = await this._sequencer.queue(() => this._pca.acquireTokenSilent(request)); + this._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${this._authority}] [${request.scopes.join(' ')}] [${request.account.username}] got result`); + if (result.account && !result.fromCache) { + this._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${this._authority}] [${request.scopes.join(' ')}] [${request.account.username}] firing event due to change`); + this._setupRefresh(result); + this._onDidAccountsChangeEmitter.fire({ added: [], changed: [result.account], deleted: [] }); + } + return result; + } + + async acquireTokenInteractive(request: InteractiveRequest): Promise { + this._logger.debug(`[acquireTokenInteractive] [${this._clientId}] [${this._authority}] [${request.scopes?.join(' ')}] loopbackClientOverride: ${request.loopbackClient ? 'true' : 'false'}`); + const result = await window.withProgress( + { + location: ProgressLocation.Notification, + cancellable: true, + title: l10n.t('Signing in to Microsoft...') + }, + (_process, token) => raceCancellationAndTimeoutError( + this._pca.acquireTokenInteractive(request), + token, + 1000 * 60 * 5 + ) + ); + this._setupRefresh(result); + return result; + } + + removeAccount(account: AccountInfo): Promise { + this._globalMemento.update(`lastRemoval:${this._clientId}:${this._authority}`, new Date()); + return this._pca.getTokenCache().removeAccount(account); + } + + private _registerOnSecretStorageChanged() { + return this._secretStorageCachePlugin.onDidChange(() => this._update()); + } + + private async _update() { + const before = this._accounts; + this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication update before: ${before.length}`); + // Dates are stored as strings in the memento + const lastRemovalDate = this._globalMemento.get(`lastRemoval:${this._clientId}:${this._authority}`); + if (lastRemovalDate && this._lastCreated && Date.parse(lastRemovalDate) > this._lastCreated.getTime()) { + this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication removal detected... recreating PCA...`); + this._pca = new PublicClientApplication(this._config); + this._lastCreated = new Date(); + } + + const after = await this._pca.getAllAccounts(); + this._accounts = after; + this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication update after: ${after.length}`); + + const beforeSet = new Set(before.map(b => b.homeAccountId)); + const afterSet = new Set(after.map(a => a.homeAccountId)); + + const added = after.filter(a => !beforeSet.has(a.homeAccountId)); + const deleted = before.filter(b => !afterSet.has(b.homeAccountId)); + if (added.length > 0 || deleted.length > 0) { + this._onDidAccountsChangeEmitter.fire({ added, changed: [], deleted }); + this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication accounts changed. added: ${added.length}, deleted: ${deleted.length}`); + if (!after.length) { + this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication final account deleted. Firing event.`); + this._onDidRemoveLastAccountEmitter.fire(); + } + } + this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication update complete`); + } + + private _setupRefresh(result: AuthenticationResult) { + const on = result.refreshOn || result.expiresOn; + if (!result.account || !on) { + return; + } + + const account = result.account; + const scopes = result.scopes; + const timeToRefresh = on.getTime() - Date.now() - 5 * 60 * 1000; // 5 minutes before expiry + const key = JSON.stringify({ accountId: account.homeAccountId, scopes }); + this._logger.debug(`[_setupRefresh] [${this._clientId}] [${this._authority}] [${scopes.join(' ')}] [${account.username}] timeToRefresh: ${timeToRefresh}`); + this._refreshDelayer.trigger( + key, + // This may need the redirectUri when we switch to the broker + () => this.acquireTokenSilent({ account, scopes, redirectUri: undefined, forceRefresh: true }), + timeToRefresh > 0 ? timeToRefresh : 0 + ); + } +} + +export class Sequencer { + + private current: Promise = Promise.resolve(null); + + queue(promiseTask: () => Promise): Promise { + return this.current = this.current.then(() => promiseTask(), () => promiseTask()); + } +} + +class DelayerByKey { + private _delayers = new Map>(); + + trigger(key: string, fn: () => Promise, delay: number): Promise { + let delayer = this._delayers.get(key); + if (!delayer) { + delayer = new Delayer(delay); + this._delayers.set(key, delayer); + } + + return delayer.trigger(fn, delay); + } +} diff --git a/extensions/microsoft-authentication/src/node/fetch.ts b/extensions/microsoft-authentication/src/node/fetch.ts new file mode 100644 index 000000000..8b12a87b0 --- /dev/null +++ b/extensions/microsoft-authentication/src/node/fetch.ts @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +let _fetch: typeof fetch; +try { + _fetch = require('electron').net.fetch; +} catch { + _fetch = fetch; +} +export default _fetch; diff --git a/extensions/microsoft-authentication/src/node/publicClientCache.ts b/extensions/microsoft-authentication/src/node/publicClientCache.ts index 34bf2c3c7..fc6ce38e9 100644 --- a/extensions/microsoft-authentication/src/node/publicClientCache.ts +++ b/extensions/microsoft-authentication/src/node/publicClientCache.ts @@ -3,77 +3,98 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AccountInfo, AuthenticationResult, Configuration, InteractiveRequest, PublicClientApplication, SilentFlowRequest } from '@azure/msal-node'; -import { SecretStorageCachePlugin } from '../common/cachePlugin'; -import { SecretStorage, LogOutputChannel, Disposable, SecretStorageChangeEvent, EventEmitter, Memento, window, ProgressLocation, l10n } from 'vscode'; -import { MsalLoggerOptions } from '../common/loggerOptions'; +import { AccountInfo } from '@azure/msal-node'; +import { SecretStorage, LogOutputChannel, Disposable, EventEmitter, Memento, Event } from 'vscode'; import { ICachedPublicClientApplication, ICachedPublicClientApplicationManager } from '../common/publicClientCache'; -import { raceCancellationAndTimeoutError } from '../common/async'; +import { CachedPublicClientApplication } from './cachedPublicClientApplication'; export interface IPublicClientApplicationInfo { clientId: string; authority: string; } -const _keyPrefix = 'pca:'; - export class CachedPublicClientApplicationManager implements ICachedPublicClientApplicationManager { - // The key is the clientId and authority stringified + // The key is the clientId and authority JSON stringified private readonly _pcas = new Map(); + private readonly _pcaDisposables = new Map(); - private _initialized = false; private _disposable: Disposable; + private _pcasSecretStorage: PublicClientApplicationsSecretStorage; + + private readonly _onDidAccountsChangeEmitter = new EventEmitter<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>(); + readonly onDidAccountsChange = this._onDidAccountsChangeEmitter.event; constructor( private readonly _globalMemento: Memento, private readonly _secretStorage: SecretStorage, private readonly _logger: LogOutputChannel, - private readonly _accountChangeHandler: (e: { added: AccountInfo[]; deleted: AccountInfo[] }) => void + cloudName: string ) { - this._disposable = _secretStorage.onDidChange(e => this._handleSecretStorageChange(e)); + this._pcasSecretStorage = new PublicClientApplicationsSecretStorage(_secretStorage, cloudName); + this._disposable = Disposable.from( + this._pcasSecretStorage, + this._registerSecretStorageHandler(), + this._onDidAccountsChangeEmitter + ); + } + + private _registerSecretStorageHandler() { + return this._pcasSecretStorage.onDidChange(() => this._handleSecretStorageChange()); } async initialize() { this._logger.debug('[initialize] Initializing PublicClientApplicationManager'); - const keys = await this._secretStorage.get('publicClientApplications'); + let keys: string[] | undefined; + try { + keys = await this._pcasSecretStorage.get(); + } catch (e) { + // data is corrupted + this._logger.error('[initialize] Error initializing PublicClientApplicationManager:', e); + await this._pcasSecretStorage.delete(); + } if (!keys) { - this._initialized = true; return; } const promises = new Array>(); - try { - for (const key of JSON.parse(keys) as string[]) { - try { - const { clientId, authority } = JSON.parse(key) as IPublicClientApplicationInfo; - // Load the PCA in memory - promises.push(this.getOrCreate(clientId, authority)); - } catch (e) { - // ignore - } + for (const key of keys) { + try { + const { clientId, authority } = JSON.parse(key) as IPublicClientApplicationInfo; + // Load the PCA in memory + promises.push(this._doCreatePublicClientApplication(clientId, authority, key)); + } catch (e) { + this._logger.error('[initialize] Error intitializing PCA:', key); } - } catch (e) { - // data is corrupted - this._logger.error('[initialize] Error initializing PublicClientApplicationManager:', e); - await this._secretStorage.delete('publicClientApplications'); } - // TODO: should we do anything for when this fails? - await Promise.allSettled(promises); + const results = await Promise.allSettled(promises); + let pcasChanged = false; + for (const result of results) { + if (result.status === 'rejected') { + this._logger.error('[initialize] Error getting PCA:', result.reason); + } else { + if (!result.value.accounts.length) { + pcasChanged = true; + const pcaKey = JSON.stringify({ clientId: result.value.clientId, authority: result.value.authority }); + this._pcaDisposables.get(pcaKey)?.dispose(); + this._pcaDisposables.delete(pcaKey); + this._pcas.delete(pcaKey); + this._logger.debug(`[initialize] [${result.value.clientId}] [${result.value.authority}] PCA disposed because it's empty.`); + } + } + } + if (pcasChanged) { + await this._storePublicClientApplications(); + } this._logger.debug('[initialize] PublicClientApplicationManager initialized'); - this._initialized = true; } dispose() { this._disposable.dispose(); - Disposable.from(...this._pcas.values()).dispose(); + Disposable.from(...this._pcaDisposables.values()).dispose(); } async getOrCreate(clientId: string, authority: string): Promise { - if (!this._initialized) { - throw new Error('PublicClientApplicationManager not initialized'); - } - // Use the clientId and authority as the key const pcasKey = JSON.stringify({ clientId, authority }); let pca = this._pcas.get(pcasKey); @@ -83,170 +104,128 @@ export class CachedPublicClientApplicationManager implements ICachedPublicClient } this._logger.debug(`[getOrCreate] [${clientId}] [${authority}] PublicClientApplicationManager cache miss, creating new PCA...`); - pca = new CachedPublicClientApplication(clientId, authority, this._globalMemento, this._secretStorage, this._accountChangeHandler, this._logger); + pca = await this._doCreatePublicClientApplication(clientId, authority, pcasKey); + await this._storePublicClientApplications(); + this._logger.debug(`[getOrCreate] [${clientId}] [${authority}] PCA created.`); + return pca; + } + + private async _doCreatePublicClientApplication(clientId: string, authority: string, pcasKey: string) { + const pca = new CachedPublicClientApplication(clientId, authority, this._globalMemento, this._secretStorage, this._logger); this._pcas.set(pcasKey, pca); + const disposable = Disposable.from( + pca, + pca.onDidAccountsChange(e => this._onDidAccountsChangeEmitter.fire(e)), + pca.onDidRemoveLastAccount(() => { + // The PCA has no more accounts, so we can dispose it so we're not keeping it + // around forever. + disposable.dispose(); + this._pcaDisposables.delete(pcasKey); + this._pcas.delete(pcasKey); + this._logger.debug(`[_doCreatePublicClientApplication] [${clientId}] [${authority}] PCA disposed. Firing off storing of PCAs...`); + void this._storePublicClientApplications(); + }) + ); + this._pcaDisposables.set(pcasKey, disposable); + // Intialize the PCA after the `onDidAccountsChange` is set so we get initial state. await pca.initialize(); - await this._storePublicClientApplications(); - this._logger.debug(`[getOrCreate] [${clientId}] [${authority}] PublicClientApplicationManager PCA created`); return pca; } getAll(): ICachedPublicClientApplication[] { - if (!this._initialized) { - throw new Error('PublicClientApplicationManager not initialized'); - } return Array.from(this._pcas.values()); } - private async _handleSecretStorageChange(e: SecretStorageChangeEvent) { - if (!e.key.startsWith(_keyPrefix)) { + private async _handleSecretStorageChange() { + this._logger.debug(`[_handleSecretStorageChange] Handling PCAs secret storage change...`); + let result: string[] | undefined; + try { + result = await this._pcasSecretStorage.get(); + } catch (_e) { + // The data in secret storage has been corrupted somehow so + // we store what we have in this window + await this._storePublicClientApplications(); return; } - - this._logger.debug(`[handleSecretStorageChange] PublicClientApplicationManager secret storage change: ${e.key}`); - const result = await this._secretStorage.get(e.key); - const pcasKey = e.key.split(_keyPrefix)[1]; - - // If the cache was deleted, or the PCA has zero accounts left, remove the PCA - if (!result || this._pcas.get(pcasKey)?.accounts.length === 0) { - this._logger.debug(`[handleSecretStorageChange] PublicClientApplicationManager removing PCA: ${pcasKey}`); - this._pcas.delete(pcasKey); - await this._storePublicClientApplications(); - this._logger.debug(`[handleSecretStorageChange] PublicClientApplicationManager PCA removed: ${pcasKey}`); + if (!result) { + this._logger.debug(`[_handleSecretStorageChange] PCAs deleted in secret storage. Disposing all...`); + Disposable.from(...this._pcaDisposables.values()).dispose(); + this._pcas.clear(); + this._pcaDisposables.clear(); + this._logger.debug(`[_handleSecretStorageChange] Finished PCAs secret storage change.`); return; } - // Load the PCA in memory if it's not already loaded - const { clientId, authority } = JSON.parse(pcasKey) as IPublicClientApplicationInfo; - this._logger.debug(`[handleSecretStorageChange] PublicClientApplicationManager loading PCA: ${pcasKey}`); - await this.getOrCreate(clientId, authority); - this._logger.debug(`[handleSecretStorageChange] PublicClientApplicationManager PCA loaded: ${pcasKey}`); - } - - private async _storePublicClientApplications() { - await this._secretStorage.store( - 'publicClientApplications', - JSON.stringify(Array.from(this._pcas.keys())) - ); - } -} - -class CachedPublicClientApplication implements ICachedPublicClientApplication { - private _pca: PublicClientApplication; - - private _accounts: AccountInfo[] = []; - private readonly _disposable: Disposable; - - private readonly _loggerOptions = new MsalLoggerOptions(this._logger); - private readonly _secretStorageCachePlugin = new SecretStorageCachePlugin( - this._secretStorage, - // Include the prefix in the key so we can easily identify it later - `${_keyPrefix}${JSON.stringify({ clientId: this._clientId, authority: this._authority })}` - ); - private readonly _config: Configuration = { - auth: { clientId: this._clientId, authority: this._authority }, - system: { - loggerOptions: { - correlationId: `${this._clientId}] [${this._authority}`, - loggerCallback: (level, message, containsPii) => this._loggerOptions.loggerCallback(level, message, containsPii), + const pcaKeysFromStorage = new Set(result); + // Handle the deleted ones + for (const pcaKey of this._pcas.keys()) { + if (!pcaKeysFromStorage.delete(pcaKey)) { + // This PCA has been removed in another window + this._pcaDisposables.get(pcaKey)?.dispose(); + this._pcaDisposables.delete(pcaKey); + this._pcas.delete(pcaKey); + this._logger.debug(`[_handleSecretStorageChange] Disposed PCA that was deleted in another window: ${pcaKey}`); } - }, - cache: { - cachePlugin: this._secretStorageCachePlugin } - }; - /** - * We keep track of the last time an account was removed so we can recreate the PCA if we detect that an account was removed. - * This is due to MSAL-node not providing a way to detect when an account is removed from the cache. An internal issue has been - * filed to track this. If MSAL-node ever provides a way to detect this or handle this better in the Persistant Cache Plugin, - * we can remove this logic. - */ - private _lastCreated: Date; + // Handle the new ones + for (const newPca of pcaKeysFromStorage) { + try { + const { clientId, authority } = JSON.parse(newPca); + this._logger.debug(`[_handleSecretStorageChange] [${clientId}] [${authority}] Creating new PCA that was created in another window...`); + await this._doCreatePublicClientApplication(clientId, authority, newPca); + this._logger.debug(`[_handleSecretStorageChange] [${clientId}] [${authority}] PCA created.`); + } catch (_e) { + // This really shouldn't happen, but should we do something about this? + this._logger.error(`Failed to parse new PublicClientApplication: ${newPca}`); + continue; + } + } - constructor( - private readonly _clientId: string, - private readonly _authority: string, - private readonly _globalMemento: Memento, - private readonly _secretStorage: SecretStorage, - private readonly _accountChangeHandler: (e: { added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }) => void, - private readonly _logger: LogOutputChannel - ) { - this._pca = new PublicClientApplication(this._config); - this._lastCreated = new Date(); - this._disposable = this._registerOnSecretStorageChanged(); + this._logger.debug('[_handleSecretStorageChange] Finished handling PCAs secret storage change.'); } - get accounts(): AccountInfo[] { return this._accounts; } - get clientId(): string { return this._clientId; } - get authority(): string { return this._authority; } - - initialize(): Promise { - return this._update(); + private _storePublicClientApplications() { + return this._pcasSecretStorage.store(Array.from(this._pcas.keys())); } +} - dispose(): void { - this._disposable.dispose(); - } +class PublicClientApplicationsSecretStorage { + private _disposable: Disposable; - async acquireTokenSilent(request: SilentFlowRequest): Promise { - this._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${this._authority}] [${request.scopes.join(' ')}]`); - const result = await this._pca.acquireTokenSilent(request); - if (result.account && !result.fromCache) { - this._accountChangeHandler({ added: [], changed: [result.account], deleted: [] }); - } - return result; - } + private readonly _onDidChangeEmitter = new EventEmitter; + readonly onDidChange: Event = this._onDidChangeEmitter.event; + + private readonly _key = `publicClientApplications-${this._cloudName}`; - async acquireTokenInteractive(request: InteractiveRequest): Promise { - this._logger.debug(`[acquireTokenInteractive] [${this._clientId}] [${this._authority}] [${request.scopes?.join(' ')}] loopbackClientOverride: ${request.loopbackClient ? 'true' : 'false'}`); - return await window.withProgress( - { - location: ProgressLocation.Notification, - cancellable: true, - title: l10n.t('Signing in to Microsoft...') - }, - (_process, token) => raceCancellationAndTimeoutError( - this._pca.acquireTokenInteractive(request), - token, - 1000 * 60 * 5 - ), // 5 minutes + constructor(private readonly _secretStorage: SecretStorage, private readonly _cloudName: string) { + this._disposable = Disposable.from( + this._onDidChangeEmitter, + this._secretStorage.onDidChange(e => { + if (e.key === this._key) { + this._onDidChangeEmitter.fire(); + } + }) ); } - removeAccount(account: AccountInfo): Promise { - this._globalMemento.update(`lastRemoval:${this._clientId}:${this._authority}`, new Date()); - return this._pca.getTokenCache().removeAccount(account); + async get(): Promise { + const value = await this._secretStorage.get(this._key); + if (!value) { + return undefined; + } + return JSON.parse(value); } - private _registerOnSecretStorageChanged() { - return this._secretStorageCachePlugin.onDidChange(() => this._update()); + store(value: string[]): Thenable { + return this._secretStorage.store(this._key, JSON.stringify(value)); } - private async _update() { - const before = this._accounts; - this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication update before: ${before.length}`); - // Dates are stored as strings in the memento - const lastRemovalDate = this._globalMemento.get(`lastRemoval:${this._clientId}:${this._authority}`); - if (lastRemovalDate && this._lastCreated && Date.parse(lastRemovalDate) > this._lastCreated.getTime()) { - this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication removal detected... recreating PCA...`); - this._pca = new PublicClientApplication(this._config); - this._lastCreated = new Date(); - } - - const after = await this._pca.getAllAccounts(); - this._accounts = after; - this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication update after: ${after.length}`); - - const beforeSet = new Set(before.map(b => b.homeAccountId)); - const afterSet = new Set(after.map(a => a.homeAccountId)); + delete(): Thenable { + return this._secretStorage.delete(this._key); + } - const added = after.filter(a => !beforeSet.has(a.homeAccountId)); - const deleted = before.filter(b => !afterSet.has(b.homeAccountId)); - if (added.length > 0 || deleted.length > 0) { - this._accountChangeHandler({ added, changed: [], deleted }); - this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication accounts changed. added: ${added.length}, deleted: ${deleted.length}`); - } - this._logger.debug(`[update] [${this._clientId}] [${this._authority}] CachedPublicClientApplication update complete`); + dispose() { + this._disposable.dispose(); } } diff --git a/extensions/npm/.vscodeignore b/extensions/npm/.vscodeignore index c7df59ef7..f05a79416 100644 --- a/extensions/npm/.vscodeignore +++ b/extensions/npm/.vscodeignore @@ -4,5 +4,4 @@ tsconfig.json .vscode/** extension.webpack.config.js extension-browser.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/npm/package-lock.json b/extensions/npm/package-lock.json index 21a7c83df..4ee7ee7a0 100644 --- a/extensions/npm/package-lock.json +++ b/extensions/npm/package-lock.json @@ -193,15 +193,16 @@ } }, "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, "node_modules/minimatch": { @@ -252,9 +253,10 @@ } }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, diff --git a/extensions/package-lock.json b/extensions/package-lock.json index ce31aa314..32a0865af 100644 --- a/extensions/package-lock.json +++ b/extensions/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "typescript": "^5.5.4" + "typescript": "5.6.2" }, "devDependencies": { "@parcel/watcher": "2.1.0", @@ -18,13 +18,78 @@ "vscode-grammar-updater": "^1.1.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -33,11 +98,316 @@ "node": ">=18" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@parcel/watcher": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", + "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "is-glob": "^4.0.3", "micromatch": "^4.0.5", @@ -54,8 +424,9 @@ }, "node_modules/braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -65,8 +436,9 @@ }, "node_modules/coffeescript": { "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", + "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", "dev": true, - "license": "MIT", "bin": { "cake": "bin/cake", "coffee": "bin/coffee" @@ -77,8 +449,9 @@ }, "node_modules/cson-parser": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-4.0.9.tgz", + "integrity": "sha512-I79SAcCYquWnEfXYj8hBqOOWKj6eH6zX1hhX3yqmS4K3bYp7jME3UFpHPzu3rUew0oyfc0s8T6IlWGXRAheHag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "coffeescript": "1.12.7" }, @@ -88,9 +461,10 @@ }, "node_modules/esbuild": { "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -126,13 +500,15 @@ }, "node_modules/fast-plist": { "version": "0.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.2.tgz", + "integrity": "sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg= sha512-2HxzrqJhmMoxVzARjYFvkzkL2dCBB8sogU5sD8gqcZWv5UCivK9/cXM9KIPDRwU+eD3mbRDN/GhW8bO/4dtMfg==", + "dev": true }, "node_modules/fill-range": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -142,16 +518,18 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -161,18 +539,21 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -181,13 +562,15 @@ }, "node_modules/node-addon-api": { "version": "3.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true }, "node_modules/node-gyp-build": { "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", "dev": true, - "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -196,8 +579,9 @@ }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -207,8 +591,9 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -217,8 +602,9 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "license": "Apache-2.0", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -229,8 +615,9 @@ }, "node_modules/vscode-grammar-updater": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vscode-grammar-updater/-/vscode-grammar-updater-1.1.0.tgz", + "integrity": "sha512-rWcJXyEFK27Mh9bxfBTLaul0KiGQk0GMXj2qTDH9cy3UZVx5MrF035B03os1w4oIXwl/QDhdLnsBK0j2SNiL1A==", "dev": true, - "license": "MIT", "dependencies": { "cson-parser": "^4.0.9", "fast-plist": "0.1.2" diff --git a/extensions/package.json b/extensions/package.json index c918c19c5..5cd609922 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -4,7 +4,7 @@ "license": "MIT", "description": "Dependencies shared by all extensions", "dependencies": { - "typescript": "^5.5.4" + "typescript": "5.6.2" }, "scripts": { "postinstall": "node ./postinstall.mjs" diff --git a/extensions/php-language-features/.vscodeignore b/extensions/php-language-features/.vscodeignore index 7cddadb7b..e326d20ef 100644 --- a/extensions/php-language-features/.vscodeignore +++ b/extensions/php-language-features/.vscodeignore @@ -3,5 +3,4 @@ src/** out/** tsconfig.json extension.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/references-view/.vscodeignore b/extensions/references-view/.vscodeignore index fd73b3fe6..4d2ffa699 100644 --- a/extensions/references-view/.vscodeignore +++ b/extensions/references-view/.vscodeignore @@ -3,5 +3,4 @@ src/** out/** tsconfig.json *.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/rust/cgmanifest.json b/extensions/rust/cgmanifest.json index 414993354..a0eb585e0 100644 --- a/extensions/rust/cgmanifest.json +++ b/extensions/rust/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "rust-syntax", "repositoryUrl": "https://github.com/dustypomerleau/rust-syntax", - "commitHash": "cf3c686a50295380ce9994218138691f8767870c" + "commitHash": "e90d3dbdb61b96e4afdce6f7a3572426b1a86d9d" } }, "license": "MIT", diff --git a/extensions/rust/syntaxes/rust.tmLanguage.json b/extensions/rust/syntaxes/rust.tmLanguage.json index dcf4c44f8..16307e72a 100644 --- a/extensions/rust/syntaxes/rust.tmLanguage.json +++ b/extensions/rust/syntaxes/rust.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/dustypomerleau/rust-syntax/commit/cf3c686a50295380ce9994218138691f8767870c", + "version": "https://github.com/dustypomerleau/rust-syntax/commit/e90d3dbdb61b96e4afdce6f7a3572426b1a86d9d", "name": "Rust", "scopeName": "source.rust", "patterns": [ @@ -482,10 +482,13 @@ "name": "punctuation.brackets.angle.rust" } }, - "end": "\\{|;", + "end": "(\\{)|(;)", "endCaptures": { - "0": { + "1": { "name": "punctuation.brackets.curly.rust" + }, + "2": { + "name": "punctuation.semi.rust" } }, "patterns": [ @@ -820,7 +823,7 @@ { "comment": "dashrocket, skinny arrow", "name": "keyword.operator.arrow.skinny.rust", - "match": "->" + "match": "->|<-" }, { "comment": "hashrocket, fat arrow", diff --git a/extensions/search-result/.vscodeignore b/extensions/search-result/.vscodeignore index 005af0b03..35b808e16 100644 --- a/extensions/search-result/.vscodeignore +++ b/extensions/search-result/.vscodeignore @@ -3,6 +3,5 @@ out/** tsconfig.json extension.webpack.config.js extension-browser.webpack.config.js -yarn.lock package-lock.json syntaxes/generateTMLanguage.js diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.js index 81eb0ffd1..6e5b9fd95 100644 --- a/extensions/shared.webpack.config.js +++ b/extensions/shared.webpack.config.js @@ -12,7 +12,6 @@ const path = require('path'); const fs = require('fs'); const merge = require('merge-options'); const CopyWebpackPlugin = require('copy-webpack-plugin'); -const { NLSBundlePlugin } = require('vscode-nls-dev/lib/webpack-bundler'); const { DefinePlugin, optimize } = require('webpack'); const tsLoaderOptions = { @@ -40,13 +39,6 @@ function withNodeDefaults(/**@type WebpackConfig & { context: string }*/extConfi test: /\.ts$/, exclude: /node_modules/, use: [{ - // vscode-nls-dev loader: - // * rewrite nls-calls - loader: 'vscode-nls-dev/lib/webpack-loader', - options: { - base: path.join(extConfig.context, 'src') - } - }, { // configure TypeScript loader: // * enable sources maps for end-to-end source maps loader: 'ts-loader', @@ -97,8 +89,7 @@ function nodePlugins(context) { patterns: [ { from: 'src', to: '.', globOptions: { ignore: ['**/test/**', '**/*.ts'] }, noErrorOnMissing: true } ] - }), - new NLSBundlePlugin(id) + }) ]; } /** @@ -117,6 +108,7 @@ function withBrowserDefaults(/**@type WebpackConfig & { context: string }*/extCo extensions: ['.ts', '.js'], // support ts-files and js-files fallback: { 'path': require.resolve('path-browserify'), + 'os': require.resolve('os-browserify'), 'util': require.resolve('util') } }, @@ -195,9 +187,7 @@ function browserPlugins(context) { 'process.platform': JSON.stringify('web'), 'process.env': JSON.stringify({}), 'process.env.BROWSER_ENV': JSON.stringify('true') - }), - // TODO: bring this back once vscode-nls-dev supports browser - // new NLSBundlePlugin(id) + }) ]; } diff --git a/extensions/simple-browser/.vscodeignore b/extensions/simple-browser/.vscodeignore index ddcbdff84..c69acedcc 100644 --- a/extensions/simple-browser/.vscodeignore +++ b/extensions/simple-browser/.vscodeignore @@ -8,7 +8,6 @@ extension.webpack.config.js extension-browser.webpack.config.js cgmanifest.json .gitignore -yarn.lock package-lock.json preview-src/** webpack.config.js diff --git a/extensions/tunnel-forwarding/.vscodeignore b/extensions/tunnel-forwarding/.vscodeignore index 74215d83d..360fcfd1c 100644 --- a/extensions/tunnel-forwarding/.vscodeignore +++ b/extensions/tunnel-forwarding/.vscodeignore @@ -2,5 +2,4 @@ src/** tsconfig.json out/** extension.webpack.config.js -yarn.lock package-lock.json diff --git a/extensions/typescript-language-features/.vscodeignore b/extensions/typescript-language-features/.vscodeignore index 4c9a34b7e..5c4f06d4c 100644 --- a/extensions/typescript-language-features/.vscodeignore +++ b/extensions/typescript-language-features/.vscodeignore @@ -8,5 +8,4 @@ tsconfig.json extension.webpack.config.js extension-browser.webpack.config.js cgmanifest.json -yarn.lock package-lock.json diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index f234a7264..92a36e5f2 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -9,7 +9,6 @@ "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "enabledApiProposals": [ "workspaceTrust", - "createFileSystemWatcher", "multiDocumentHighlightProvider", "mappedEditsProvider", "codeActionAI", @@ -678,7 +677,7 @@ }, "js/ts.implicitProjectConfig.target": { "type": "string", - "default": "ES2020", + "default": "ES2022", "markdownDescription": "%configuration.implicitProjectConfig.target%", "enum": [ "ES3", @@ -692,6 +691,8 @@ "ES2020", "ES2021", "ES2022", + "ES2023", + "ES2024", "ESNext" ], "scope": "window" @@ -1116,7 +1117,13 @@ "inline", "first" ], - "default": "auto" + "default": "auto", + "markdownEnumDescriptions": [ + "%typescript.preferences.organizeImports.typeOrder.auto%", + "%typescript.preferences.organizeImports.typeOrder.last%", + "%typescript.preferences.organizeImports.typeOrder.inline%", + "%typescript.preferences.organizeImports.typeOrder.first%" + ] }, "unicodeCollation": { "type": "string", @@ -1180,7 +1187,13 @@ "inline", "first" ], - "default": "auto" + "default": "auto", + "markdownEnumDescriptions": [ + "%typescript.preferences.organizeImports.typeOrder.auto%", + "%typescript.preferences.organizeImports.typeOrder.last%", + "%typescript.preferences.organizeImports.typeOrder.inline%", + "%typescript.preferences.organizeImports.typeOrder.first%" + ] }, "unicodeCollation": { "type": "string", diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json index 6b1946b98..d2a0ca892 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json @@ -188,21 +188,21 @@ "typescript.preferences.renameShorthandProperties.deprecationMessage": "The setting 'typescript.preferences.renameShorthandProperties' has been deprecated in favor of 'typescript.preferences.useAliasesForRenames'", "typescript.preferences.useAliasesForRenames": "Enable/disable introducing aliases for object shorthand properties during renames.", "typescript.preferences.renameMatchingJsxTags": "When on a JSX tag, try to rename the matching tag instead of renaming the symbol. Requires using TypeScript 5.1+ in the workspace.", - "typescript.preferences.organizeImports": "Advanced preferences that control how imports are ordered. Presets are available in `#typescript.preferences.organizeImports.presets#`", - "javascript.preferences.organizeImports": "Advanced preferences that control how imports are ordered. Presets are available in `#javascript.preferences.organizeImports.presets#`", - "typescript.preferences.organizeImports.caseSensitivity.auto": "Detect case-sensitivity for import sorting", - "typescript.preferences.organizeImports.caseSensitivity.insensitive": "Sort imports case-insensitively", - "typescript.preferences.organizeImports.caseSensitivity.sensitive": "Sort imports case-sensitively", - "typescript.preferences.organizeImports.typeOrder.auto": "Detect where type-only named imports should be sorted", - "typescript.preferences.organizeImports.typeOrder.last": "Type only named imports are sorted to the end of the import list", - "typescript.preferences.organizeImports.typeOrder.inline": "Named imports are sorted by name only", - "typescript.preferences.organizeImports.typeOrder.first": "Type only named imports are sorted to the end of the import list", - "typescript.preferences.organizeImports.unicodeCollation.ordinal": "Sort imports using the numeric value of each code point", - "typescript.preferences.organizeImports.unicodeCollation.unicode": "Sort imports using the Unicode code collation", - "typescript.preferences.organizeImports.locale": "Overrides the locale used for collation. Specify `auto` to use the UI locale. Only applies to `organizeImportsCollation: 'unicode'`", - "typescript.preferences.organizeImports.caseFirst": "Indicates whether upper-case comes before lower-case. Only applies to `organizeImportsCollation: 'unicode'`", - "typescript.preferences.organizeImports.numericCollation": "Sort numeric strings by integer value", - "typescript.preferences.organizeImports.accentCollation": "Compare characters with diacritical marks as unequal to base character", + "typescript.preferences.organizeImports": "Advanced preferences that control how imports are ordered.", + "javascript.preferences.organizeImports": "Advanced preferences that control how imports are ordered.", + "typescript.preferences.organizeImports.caseSensitivity.auto": "Detect case-sensitivity for import sorting.", + "typescript.preferences.organizeImports.caseSensitivity.insensitive": "Sort imports case-insensitively.", + "typescript.preferences.organizeImports.caseSensitivity.sensitive": "Sort imports case-sensitively.", + "typescript.preferences.organizeImports.typeOrder.auto": "Detect where type-only named imports should be sorted.", + "typescript.preferences.organizeImports.typeOrder.last": "Type only named imports are sorted to the end of the import list.", + "typescript.preferences.organizeImports.typeOrder.inline": "Named imports are sorted by name only.", + "typescript.preferences.organizeImports.typeOrder.first": "Type only named imports are sorted to the end of the import list.", + "typescript.preferences.organizeImports.unicodeCollation.ordinal": "Sort imports using the numeric value of each code point.", + "typescript.preferences.organizeImports.unicodeCollation.unicode": "Sort imports using the Unicode code collation.", + "typescript.preferences.organizeImports.locale": "Overrides the locale used for collation. Specify `auto` to use the UI locale. Only applies to `organizeImportsCollation: 'unicode'`.", + "typescript.preferences.organizeImports.caseFirst": "Indicates whether upper-case comes before lower-case. Only applies to `organizeImportsCollation: 'unicode'`.", + "typescript.preferences.organizeImports.numericCollation": "Sort numeric strings by integer value.", + "typescript.preferences.organizeImports.accentCollation": "Compare characters with diacritical marks as unequal to base character.", "typescript.workspaceSymbols.scope": "Controls which files are searched by [Go to Symbol in Workspace](https://code.visualstudio.com/docs/editor/editingevolved#_open-symbol-by-name).", "typescript.workspaceSymbols.scope.allOpenProjects": "Search all open JavaScript or TypeScript projects for symbols.", "typescript.workspaceSymbols.scope.currentProject": "Only search for symbols in the current JavaScript or TypeScript project.", diff --git a/extensions/typescript-language-features/src/configuration/configuration.ts b/extensions/typescript-language-features/src/configuration/configuration.ts index 554fd4dd0..d70b8f7d9 100644 --- a/extensions/typescript-language-features/src/configuration/configuration.ts +++ b/extensions/typescript-language-features/src/configuration/configuration.ts @@ -117,7 +117,7 @@ export interface TypeScriptServiceConfiguration { readonly enableProjectDiagnostics: boolean; readonly maxTsServerMemory: number; readonly enablePromptUseWorkspaceTsdk: boolean; - readonly useVsCodeWatcher: boolean; // TODO@bpasero remove this setting eventually + readonly useVsCodeWatcher: boolean; readonly watchOptions: Proto.WatchOptions | undefined; readonly includePackageJsonAutoImports: 'auto' | 'on' | 'off' | undefined; readonly enableTsServerTracing: boolean; @@ -223,7 +223,17 @@ export abstract class BaseServiceConfigurationProvider implements ServiceConfigu } private readUseVsCodeWatcher(configuration: vscode.WorkspaceConfiguration): boolean { - return configuration.get('typescript.tsserver.experimental.useVsCodeWatcher', false); + const watcherExcludes = configuration.get>('files.watcherExclude') ?? {}; + if ( + watcherExcludes['**/node_modules/*/**'] === true || // VS Code default prior to 1.94.x + watcherExcludes['**/node_modules/**'] === true || + watcherExcludes['**/node_modules'] === true || + watcherExcludes['**'] === true // VS Code Watching is entirely disabled + ) { + return false; + } + + return configuration.get('typescript.tsserver.experimental.useVsCodeWatcher', true); } private readWatchOptions(configuration: vscode.WorkspaceConfiguration): Proto.WatchOptions | undefined { diff --git a/extensions/typescript-language-features/src/configuration/fileSchemes.ts b/extensions/typescript-language-features/src/configuration/fileSchemes.ts index ca268e29e..9d54f0b67 100644 --- a/extensions/typescript-language-features/src/configuration/fileSchemes.ts +++ b/extensions/typescript-language-features/src/configuration/fileSchemes.ts @@ -21,21 +21,24 @@ export const officeScript = 'office-script'; /** Used for code blocks in chat by vs code core */ export const chatCodeBlock = 'vscode-chat-code-block'; -/** Used for code blocks in chat by copilot. */ -export const chatBackingCodeBlock = 'vscode-copilot-chat-code-block'; - export function getSemanticSupportedSchemes() { - if (isWeb() && vscode.workspace.workspaceFolders) { - return vscode.workspace.workspaceFolders.map(folder => folder.uri.scheme); - } - - return [ - file, + const alwaysSupportedSchemes = [ untitled, walkThroughSnippet, vscodeNotebookCell, chatCodeBlock, - chatBackingCodeBlock, + ]; + + if (isWeb()) { + return [ + ...(vscode.workspace.workspaceFolders ?? []).map(folder => folder.uri.scheme), + ...alwaysSupportedSchemes, + ]; + } + + return [ + file, + ...alwaysSupportedSchemes, ]; } diff --git a/extensions/typescript-language-features/src/extension.browser.ts b/extensions/typescript-language-features/src/extension.browser.ts index 9ad0867ef..b87a41901 100644 --- a/extensions/typescript-language-features/src/extension.browser.ts +++ b/extensions/typescript-language-features/src/extension.browser.ts @@ -61,7 +61,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { new TypeScriptVersion( TypeScriptVersionSource.Bundled, vscode.Uri.joinPath(context.extensionUri, 'dist/browser/typescript/tsserver.web.js').toString(), - API.fromSimpleString('5.5.4'))); + API.fromSimpleString('5.6.2'))); let experimentTelemetryReporter: IExperimentationTelemetryReporter | undefined; const packageInfo = getPackageInfo(context); diff --git a/extensions/typescript-language-features/src/languageFeatures/completions.ts b/extensions/typescript-language-features/src/languageFeatures/completions.ts index 1012083a0..749e74b40 100644 --- a/extensions/typescript-language-features/src/languageFeatures/completions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/completions.ts @@ -506,8 +506,7 @@ class MyCompletionItem extends vscode.CompletionItem { entry: Proto.CompletionEntry, defaultCommitCharacters: readonly string[] | undefined, ): string[] | undefined { - // @ts-expect-error until TS 5.6 - let commitCharacters = (entry.commitCharacters as string[] | undefined) ?? (defaultCommitCharacters ? Array.from(defaultCommitCharacters) : undefined); + let commitCharacters = entry.commitCharacters ?? (defaultCommitCharacters ? Array.from(defaultCommitCharacters) : undefined); if (commitCharacters) { if (context.enableCallCompletions && !context.isNewIdentifierLocation @@ -781,8 +780,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider< const isIncomplete = !!response.body.isIncomplete || (response.metadata as any)?.isIncomplete; const entries = response.body.entries; const metadata = response.metadata; - // @ts-expect-error until TS 5.6 - const defaultCommitCharacters: readonly string[] | undefined = Object.freeze(response.body.defaultCommitCharacters); + const defaultCommitCharacters = Object.freeze(response.body.defaultCommitCharacters); if (response.body.optionalReplacementSpan) { optionalReplacementRange = typeConverters.Range.fromTextSpan(response.body.optionalReplacementSpan); diff --git a/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts b/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts index 032b24676..d86f64637 100644 --- a/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts +++ b/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; import { DiagnosticLanguage } from '../configuration/languageDescription'; +import { TelemetryReporter } from '../logging/telemetry'; +import { DiagnosticPerformanceData as TsDiagnosticPerformanceData } from '../tsServer/protocol/protocol'; import * as arrays from '../utils/arrays'; import { Disposable } from '../utils/dispose'; -import { ResourceMap } from '../utils/resourceMap'; -import { TelemetryReporter } from '../logging/telemetry'; -import { TypeScriptServiceConfiguration } from '../configuration/configuration'; import { equals } from '../utils/objects'; -// @ts-expect-error until ts 5.6 -import { DiagnosticPerformanceData as TsDiagnosticPerformanceData } from '../tsServer/protocol/protocol'; +import { ResourceMap } from '../utils/resourceMap'; function diagnosticsEquals(a: vscode.Diagnostic, b: vscode.Diagnostic): boolean { if (a === b) { @@ -217,13 +216,9 @@ class DiagnosticsTelemetryManager extends Disposable { */ this._telemetryReporter.logTelemetry('diagnostics.performance', { - // @ts-expect-error until ts 5.6 syntaxDiagDuration: data.syntaxDiag, - // @ts-expect-error until ts 5.6 semanticDiagDuration: data.semanticDiag, - // @ts-expect-error until ts 5.6 suggestionDiagDuration: data.suggestionDiag, - // @ts-expect-error until ts 5.6 regionSemanticDiagDuration: data.regionSemanticDiag, fileLineCount: data.fileLineCount, }, diff --git a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts index 484ea6402..0b5a4c65d 100644 --- a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts +++ b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts @@ -191,7 +191,6 @@ export default class FileConfigurationManager extends Disposable { includeCompletionsWithClassMemberSnippets: config.get('suggest.classMemberSnippets.enabled', true), includeCompletionsWithObjectLiteralMethodSnippets: config.get('suggest.objectLiteralMethodSnippets.enabled', true), autoImportFileExcludePatterns: this.getAutoImportFileExcludePatternsPreference(preferencesConfig, vscode.workspace.getWorkspaceFolder(document.uri)?.uri), - // @ts-expect-error until 5.6 autoImportSpecifierExcludeRegexes: preferencesConfig.get('autoImportSpecifierExcludeRegexes'), preferTypeOnlyAutoImports: preferencesConfig.get('preferTypeOnlyAutoImports', false), useLabelDetailsInCompletionEntries: true, @@ -201,7 +200,7 @@ export default class FileConfigurationManager extends Disposable { interactiveInlayHints: true, includeCompletionsForModuleExports: config.get('suggest.autoImports'), ...getInlayHintsPreferences(config), - ...this.getOrganizeImportsPreferences(config), + ...this.getOrganizeImportsPreferences(preferencesConfig), }; return preferences; diff --git a/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts b/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts index 3240c5247..24fb7068b 100644 --- a/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts +++ b/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts @@ -94,7 +94,7 @@ class TypeScriptWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvide } const uri = this.client.toResource(item.file); - if (fileSchemes.isOfScheme(uri, fileSchemes.chatCodeBlock, fileSchemes.chatBackingCodeBlock)) { + if (fileSchemes.isOfScheme(uri, fileSchemes.chatCodeBlock)) { return; } diff --git a/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts b/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts index 356c17038..56d2896fa 100644 --- a/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts +++ b/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts @@ -197,7 +197,7 @@ class SyncedBuffer { return tsRoot?.startsWith(inMemoryResourcePrefix) ? undefined : tsRoot; } - return fileSchemes.isOfScheme(resource, fileSchemes.officeScript, fileSchemes.chatCodeBlock, fileSchemes.chatBackingCodeBlock) ? '/' : undefined; + return fileSchemes.isOfScheme(resource, fileSchemes.officeScript, fileSchemes.chatCodeBlock) ? '/' : undefined; } public get resource(): vscode.Uri { @@ -752,7 +752,7 @@ export default class BufferSyncSupport extends Disposable { } private shouldValidate(buffer: SyncedBuffer): boolean { - if (fileSchemes.isOfScheme(buffer.resource, fileSchemes.chatCodeBlock, fileSchemes.chatBackingCodeBlock)) { + if (fileSchemes.isOfScheme(buffer.resource, fileSchemes.chatCodeBlock)) { return false; } diff --git a/extensions/typescript-language-features/src/tsServer/server.ts b/extensions/typescript-language-features/src/tsServer/server.ts index 095295030..4e41f7aa7 100644 --- a/extensions/typescript-language-features/src/tsServer/server.ts +++ b/extensions/typescript-language-features/src/tsServer/server.ts @@ -166,7 +166,6 @@ export class SingleTsServer extends Disposable implements ITypeScriptServer { this._tracer.traceRequestCompleted(this._serverId, 'requestCompleted', seq, callback); callback.onSuccess(undefined); } - // @ts-expect-error until ts 5.6 if ((event as Proto.RequestCompletedEvent).body.performanceData) { this._onEvent.fire(event); } diff --git a/extensions/typescript-language-features/src/tsServer/spawner.ts b/extensions/typescript-language-features/src/tsServer/spawner.ts index 162fdf6d3..aac318663 100644 --- a/extensions/typescript-language-features/src/tsServer/spawner.ts +++ b/extensions/typescript-language-features/src/tsServer/spawner.ts @@ -268,12 +268,20 @@ export class TypeScriptServerSpawner { args.push('--noGetErrOnBackgroundUpdate'); + const configUseVsCodeWatcher = configuration.useVsCodeWatcher; + const isYarnPnp = apiVersion.isYarnPnp(); if ( apiVersion.gte(API.v544) - && configuration.useVsCodeWatcher - && !apiVersion.isYarnPnp() // Disable for yarn pnp as it currently breaks with the VS Code watcher + && configUseVsCodeWatcher + && !isYarnPnp // Disable for yarn pnp as it currently breaks with the VS Code watcher ) { args.push('--canUseWatchEvents'); + } else { + if (!configUseVsCodeWatcher) { + this._logger.info(`<${kind}> Falling back to legacy node.js based file watching because of user settings.`); + } else if (isYarnPnp) { + this._logger.info(`<${kind}> Falling back to legacy node.js based file watching because of Yarn PnP.`); + } } args.push('--validateDefaultNpmLocation'); diff --git a/extensions/typescript-language-features/src/typeConverters.ts b/extensions/typescript-language-features/src/typeConverters.ts index 067a1ff3c..a860251bb 100644 --- a/extensions/typescript-language-features/src/typeConverters.ts +++ b/extensions/typescript-language-features/src/typeConverters.ts @@ -26,7 +26,6 @@ export namespace Range { Math.max(0, start.line - 1), Math.max(start.offset - 1, 0), Math.max(0, end.line - 1), Math.max(0, end.offset - 1)); - // @ts-expect-error until ts 5.6 export const toFileRange = (range: vscode.Range): Proto.FileRange => ({ startLine: range.start.line + 1, startOffset: range.start.character + 1, @@ -38,7 +37,7 @@ export namespace Range { file, ...toFileRange(range) }); - // @ts-expect-error until ts 5.6 + export const toFileRangesRequestArgs = (file: string, ranges: vscode.Range[]): Proto.FileRangesRequestArgs => ({ file, ranges: ranges.map(toFileRange) diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index 2d3ea9eed..a1f06a3dd 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -5,6 +5,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; +import { homedir } from 'os'; import { ServiceConfigurationProvider, SyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration, areServiceConfigurationsEqual } from './configuration/configuration'; import * as fileSchemes from './configuration/fileSchemes'; import { Schemes } from './configuration/schemes'; @@ -902,9 +903,14 @@ export default class TypeScriptServiceClient extends Disposable implements IType if (command === 'updateOpen') { // If update open has completed, consider that the project has loaded - Promise.all(executions).then(() => { + const updateOpenTask = Promise.all(executions).then(() => { this.loadingIndicator.reset(); }); + + const updateOpenArgs = (args as Proto.UpdateOpenRequestArgs); + if (updateOpenArgs.openFiles?.length === 1) { + this.loadingIndicator.startedLoadingFile(updateOpenArgs.openFiles[0].file, updateOpenTask); + } } return executions[0]!; @@ -982,7 +988,6 @@ export default class TypeScriptServiceClient extends Disposable implements IType kind: getDiagnosticsKind(event), resource: this.toResource(diagnosticEvent.body.file), diagnostics: diagnosticEvent.body.diagnostics, - // @ts-expect-error until ts 5.6 spans: diagnosticEvent.body.spans, }); } @@ -1038,15 +1043,20 @@ export default class TypeScriptServiceClient extends Disposable implements IType return; case EventName.createDirectoryWatcher: { - const path = (event.body as Proto.CreateDirectoryWatcherEventBody).path; - if (path.startsWith(inMemoryResourcePrefix)) { + const fpath = (event.body as Proto.CreateDirectoryWatcherEventBody).path; + if (fpath.startsWith(inMemoryResourcePrefix)) { + return; + } + if (process.platform === 'darwin' && fpath === path.join(homedir(), 'Library')) { + // ignore directory watch requests on ~/Library + // until microsoft/TypeScript#59831 is resolved return; } this.createFileSystemWatcher( (event.body as Proto.CreateDirectoryWatcherEventBody).id, new vscode.RelativePattern( - vscode.Uri.file(path), + vscode.Uri.file(fpath), (event.body as Proto.CreateDirectoryWatcherEventBody).recursive ? '**' : '*' ), (event.body as Proto.CreateDirectoryWatcherEventBody).ignoreUpdate @@ -1073,11 +1083,9 @@ export default class TypeScriptServiceClient extends Disposable implements IType return; case EventName.requestCompleted: { - // @ts-expect-error until ts 5.6 const diagnosticsDuration = (event.body as Proto.RequestCompletedEventBody).performanceData?.diagnosticsDuration; if (diagnosticsDuration) { this.diagnosticsManager.logDiagnosticsPerformanceTelemetry( - // @ts-expect-error until ts 5.6 diagnosticsDuration.map(fileData => { const resource = this.toResource(fileData.file); return { @@ -1149,7 +1157,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType ignoreChangeEvents?: boolean, ) { const disposable = new DisposableStore(); - const watcher = disposable.add(vscode.workspace.createFileSystemWatcher(pattern, { excludes: [] /* TODO:: need to fill in excludes list */, ignoreChangeEvents })); + const watcher = disposable.add(vscode.workspace.createFileSystemWatcher(pattern, undefined, ignoreChangeEvents)); disposable.add(watcher.onDidChange(changeFile => this.addWatchEvent(id, 'updated', changeFile.fsPath) )); @@ -1319,7 +1327,7 @@ function getDiagnosticsKind(event: Proto.Event) { class ServerInitializingIndicator extends Disposable { - private _task?: { project: string | undefined; resolve: () => void }; + private _task?: { project: string; resolve: () => void }; public reset(): void { if (this._task) { @@ -1331,20 +1339,30 @@ class ServerInitializingIndicator extends Disposable { /** * Signal that a project has started loading. */ - public startedLoadingProject(projectName: string | undefined): void { + public startedLoadingProject(projectName: string): void { // TS projects are loaded sequentially. Cancel existing task because it should always be resolved before // the incoming project loading task is. this.reset(); + const projectDisplayName = vscode.workspace.asRelativePath(projectName); vscode.window.withProgress({ location: vscode.ProgressLocation.Window, - title: vscode.l10n.t("Initializing JS/TS language features"), + title: vscode.l10n.t("Initializing project '{0}'", projectDisplayName), }, () => new Promise(resolve => { this._task = { project: projectName, resolve }; })); } - public finishedLoadingProject(projectName: string | undefined): void { + public startedLoadingFile(fileName: string, task: Promise): void { + if (!this._task) { + vscode.window.withProgress({ + location: vscode.ProgressLocation.Window, + title: vscode.l10n.t("Analyzing '{0}' and its dependencies", path.basename(fileName)), + }, () => task); + } + } + + public finishedLoadingProject(projectName: string): void { if (this._task && this._task.project === projectName) { this._task.resolve(); this._task = undefined; diff --git a/extensions/typescript-language-features/tsconfig.json b/extensions/typescript-language-features/tsconfig.json index 65557839b..44097665a 100644 --- a/extensions/typescript-language-features/tsconfig.json +++ b/extensions/typescript-language-features/tsconfig.json @@ -11,7 +11,6 @@ "include": [ "src/**/*", "../../src/vscode-dts/vscode.d.ts", - "../../src/vscode-dts/vscode.proposed.createFileSystemWatcher.d.ts", "../../src/vscode-dts/vscode.proposed.codeActionAI.d.ts", "../../src/vscode-dts/vscode.proposed.codeActionRanges.d.ts", "../../src/vscode-dts/vscode.proposed.mappedEditsProvider.d.ts", diff --git a/extensions/vscode-colorize-tests/test/colorize-fixtures/issue-224862.yaml b/extensions/vscode-colorize-tests/test/colorize-fixtures/issue-224862.yaml new file mode 100644 index 000000000..b807db095 --- /dev/null +++ b/extensions/vscode-colorize-tests/test/colorize-fixtures/issue-224862.yaml @@ -0,0 +1,9 @@ +--- +foo: 1 +--- + +This is highlighted as a YAML string + +# This is highlighted as a YAML comment + +This is highlighted as a YAML error diff --git a/extensions/vscode-colorize-tests/test/colorize-results/issue-224862_yaml.json b/extensions/vscode-colorize-tests/test/colorize-results/issue-224862_yaml.json new file mode 100644 index 000000000..f79882e54 --- /dev/null +++ b/extensions/vscode-colorize-tests/test/colorize-results/issue-224862_yaml.json @@ -0,0 +1,310 @@ +[ + { + "c": "---", + "t": "source.yaml meta.stream.yaml meta.document.yaml entity.other.document.begin.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "foo", + "t": "source.yaml meta.stream.yaml meta.document.yaml meta.mapping.yaml meta.map.key.yaml string.unquoted.plain.yaml entity.name.tag.yaml", + "r": { + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": ":", + "t": "source.yaml meta.stream.yaml meta.document.yaml meta.mapping.yaml meta.map.value.yaml punctuation.separator.map.value.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml meta.mapping.yaml meta.map.value.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "1", + "t": "source.yaml meta.stream.yaml meta.document.yaml meta.mapping.yaml meta.map.value.yaml string.unquoted.plain.out.yaml constant.numeric.integer.decimal.yaml", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "---", + "t": "source.yaml meta.stream.yaml meta.document.yaml entity.other.document.begin.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "This is highlighted as a YAML string", + "t": "source.yaml meta.stream.yaml meta.document.yaml string.unquoted.plain.out.yaml", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string.unquoted.plain.out.yaml: #0000FF", + "dark_vs": "string: #CE9178", + "light_vs": "string.unquoted.plain.out.yaml: #0000FF", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" + } + }, + { + "c": "#", + "t": "source.yaml meta.stream.yaml meta.document.yaml comment.line.number-sign.yaml punctuation.definition.comment.yaml", + "r": { + "dark_plus": "comment: #6A9955", + "light_plus": "comment: #008000", + "dark_vs": "comment: #6A9955", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" + } + }, + { + "c": " This is highlighted as a YAML comment", + "t": "source.yaml meta.stream.yaml meta.document.yaml comment.line.number-sign.yaml", + "r": { + "dark_plus": "comment: #6A9955", + "light_plus": "comment: #008000", + "dark_vs": "comment: #6A9955", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" + } + }, + { + "c": "This", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "is", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "highlighted", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "as", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "a", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "YAML", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + }, + { + "c": " ", + "t": "source.yaml meta.stream.yaml meta.document.yaml punctuation.whitespace.separator.yaml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "error", + "t": "source.yaml meta.stream.yaml meta.document.yaml invalid.illegal.unrecognized.yaml", + "r": { + "dark_plus": "invalid: #F44747", + "light_plus": "invalid: #CD3131", + "dark_vs": "invalid: #F44747", + "light_vs": "invalid: #CD3131", + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" + } + } +] \ No newline at end of file diff --git a/extensions/yaml/cgmanifest.json b/extensions/yaml/cgmanifest.json index 18882ead4..83fe1e161 100644 --- a/extensions/yaml/cgmanifest.json +++ b/extensions/yaml/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "RedCMD/YAML-Syntax-Highlighter", "repositoryUrl": "https://github.com/RedCMD/YAML-Syntax-Highlighter", - "commitHash": "d4dca9f38a654ebbb13c1b72b7881e3c5864a778" + "commitHash": "71a88711ec184b7dde5240c8f150ad3c2dbbd5f1" } }, "licenseDetail": [ @@ -21,7 +21,7 @@ "THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." ], "license": "MIT", - "version": "1.1.1" + "version": "1.1.2" } ], "version": 1 diff --git a/extensions/yaml/syntaxes/yaml-1.0.tmLanguage.json b/extensions/yaml/syntaxes/yaml-1.0.tmLanguage.json index 7ae771128..96afa88b2 100644 --- a/extensions/yaml/syntaxes/yaml-1.0.tmLanguage.json +++ b/extensions/yaml/syntaxes/yaml-1.0.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/RedCMD/YAML-Syntax-Highlighter/commit/dfd7e5f4f71f9695c5d8697ca57f81240165aa04", + "version": "https://github.com/RedCMD/YAML-Syntax-Highlighter/commit/71a88711ec184b7dde5240c8f150ad3c2dbbd5f1", "name": "YAML 1.0", "scopeName": "source.yaml.1.0", "comment": "https://yaml.org/spec/1.0/", @@ -520,25 +520,22 @@ "patterns": [ { "comment": "https://yaml.org/spec/1.2.2/#8111-block-indentation-indicator", - "begin": "([\t ]*+)(?>(\\|)|(>))(?[+-])?+((0)|(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9))(?()|([+-]))?+", - "while": "\\G(?>(?>(?!\\6)|(?!\\7) |(?!\\8) {2}|(?!\\9) {3}|(?!\\10) {4}|(?!\\11) {5}|(?!\\12) {6}|(?!\\13) {7}|(?!\\14) {8}|(?!\\15) {9})| *+($|[^#]))", + "begin": "(?>(\\|)|(>))(?[+-])?+((0)|(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9))(?()|([+-]))?+", + "while": "\\G(?>(?>(?!\\5)|(?!\\6) |(?!\\7) {2}|(?!\\8) {3}|(?!\\9) {4}|(?!\\10) {5}|(?!\\11) {6}|(?!\\12) {7}|(?!\\13) {8}|(?!\\14) {9})| *+($|[^#]))", "beginCaptures": { "1": { - "name": "punctuation.whitespace.separator.yaml" - }, - "2": { "name": "keyword.control.flow.block-scalar.literal.yaml" }, - "3": { + "2": { "name": "keyword.control.flow.block-scalar.folded.yaml" }, - "4": { + "3": { "name": "storage.modifier.chomping-indicator.yaml" }, - "5": { + "4": { "name": "constant.numeric.indentation-indicator.yaml" }, - "16": { + "15": { "name": "storage.modifier.chomping-indicator.yaml" } }, @@ -576,19 +573,16 @@ { "comment": "https://yaml.org/spec/1.2.2/#rule-c-b-block-header", "//": "Soooooooo many edge cases", - "begin": "([\t ]*+)(?>(\\|)|(>))([+-]?+)", + "begin": "(?>(\\|)|(>))([+-]?+)", "while": "\\G", "beginCaptures": { "1": { - "name": "punctuation.whitespace.separator.yaml" - }, - "2": { "name": "keyword.control.flow.block-scalar.literal.yaml" }, - "3": { + "2": { "name": "keyword.control.flow.block-scalar.folded.yaml" }, - "4": { + "3": { "name": "storage.modifier.chomping-indicator.yaml" } }, diff --git a/extensions/yaml/syntaxes/yaml-1.2.tmLanguage.json b/extensions/yaml/syntaxes/yaml-1.2.tmLanguage.json index 965b60408..5571102d9 100644 --- a/extensions/yaml/syntaxes/yaml-1.2.tmLanguage.json +++ b/extensions/yaml/syntaxes/yaml-1.2.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/RedCMD/YAML-Syntax-Highlighter/commit/d4dca9f38a654ebbb13c1b72b7881e3c5864a778", + "version": "https://github.com/RedCMD/YAML-Syntax-Highlighter/commit/71a88711ec184b7dde5240c8f150ad3c2dbbd5f1", "name": "YAML 1.2", "scopeName": "source.yaml.1.2", "comment": "https://yaml.org/spec/1.2.2", @@ -654,25 +654,22 @@ "patterns": [ { "comment": "https://yaml.org/spec/1.2.2/#8111-block-indentation-indicator", - "begin": "([\t ]*+)(?>(\\|)|(>))(?[+-])?+((1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9))(?()|([+-]))?+", - "while": "\\G(?>(?>(?!\\6) |(?!\\7) {2}|(?!\\8) {3}|(?!\\9) {4}|(?!\\10) {5}|(?!\\11) {6}|(?!\\12) {7}|(?!\\13) {8}|(?!\\14) {9})| *+($|[^#]))", + "begin": "(?>(\\|)|(>))(?[+-])?+((1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9))(?()|([+-]))?+", + "while": "\\G(?>(?>(?!\\5) |(?!\\6) {2}|(?!\\7) {3}|(?!\\8) {4}|(?!\\9) {5}|(?!\\10) {6}|(?!\\11) {7}|(?!\\12) {8}|(?!\\13) {9})| *+($|[^#]))", "beginCaptures": { "1": { - "name": "punctuation.whitespace.separator.yaml" - }, - "2": { "name": "keyword.control.flow.block-scalar.literal.yaml" }, - "3": { + "2": { "name": "keyword.control.flow.block-scalar.folded.yaml" }, - "4": { + "3": { "name": "storage.modifier.chomping-indicator.yaml" }, - "5": { + "4": { "name": "constant.numeric.indentation-indicator.yaml" }, - "15": { + "14": { "name": "storage.modifier.chomping-indicator.yaml" } }, @@ -710,19 +707,16 @@ { "comment": "https://yaml.org/spec/1.2.2/#rule-c-b-block-header", "//": "Soooooooo many edge cases", - "begin": "([\t ]*+)(?>(\\|)|(>))([+-]?+)", + "begin": "(?>(\\|)|(>))([+-]?+)", "while": "\\G", "beginCaptures": { "1": { - "name": "punctuation.whitespace.separator.yaml" - }, - "2": { "name": "keyword.control.flow.block-scalar.literal.yaml" }, - "3": { + "2": { "name": "keyword.control.flow.block-scalar.folded.yaml" }, - "4": { + "3": { "name": "storage.modifier.chomping-indicator.yaml" } }, diff --git a/package-lock.json b/package-lock.json index d9e5ebeae..0bdb2ed19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,19 +21,19 @@ "@vscode/spdlog": "^0.15.0", "@vscode/sqlite3": "5.1.6-vscode", "@vscode/sudo-prompt": "9.3.1", - "@vscode/tree-sitter-wasm": "^0.0.2", + "@vscode/tree-sitter-wasm": "^0.0.4", "@vscode/vscode-languagedetection": "1.0.21", "@vscode/windows-mutex": "^0.5.0", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "0.2.0-beta.35", - "@xterm/addon-image": "0.9.0-beta.52", - "@xterm/addon-search": "0.16.0-beta.52", - "@xterm/addon-serialize": "0.14.0-beta.52", - "@xterm/addon-unicode11": "0.9.0-beta.52", - "@xterm/addon-webgl": "0.19.0-beta.52", - "@xterm/headless": "5.6.0-beta.52", - "@xterm/xterm": "5.6.0-beta.52", + "@xterm/addon-clipboard": "^0.2.0-beta.47", + "@xterm/addon-image": "^0.9.0-beta.64", + "@xterm/addon-search": "^0.16.0-beta.64", + "@xterm/addon-serialize": "^0.14.0-beta.64", + "@xterm/addon-unicode11": "^0.9.0-beta.64", + "@xterm/addon-webgl": "^0.19.0-beta.64", + "@xterm/headless": "^5.6.0-beta.64", + "@xterm/xterm": "^5.6.0-beta.64", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "jschardet": "3.1.3", @@ -81,9 +81,10 @@ "@vscode/telemetry-extractor": "^1.10.2", "@vscode/test-cli": "^0.0.6", "@vscode/test-electron": "^2.4.0", - "@vscode/test-web": "^0.0.56", + "@vscode/test-web": "^0.0.60", "@vscode/v8-heap-parser": "^0.1.0", "@vscode/vscode-perf": "^0.0.14", + "@webgpu/types": "^0.1.44", "ansi-colors": "^3.2.3", "asar": "^3.0.3", "chromium-pickle-js": "^0.2.0", @@ -93,7 +94,7 @@ "cssnano": "^6.0.3", "debounce": "^1.0.0", "deemon": "^1.8.0", - "electron": "30.4.0", + "electron": "30.5.1", "eslint": "8.36.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-jsdoc": "^46.5.0", @@ -131,12 +132,12 @@ "mime": "^1.4.1", "minimatch": "^3.0.4", "minimist": "^1.2.6", - "mkdirp": "^1.0.4", "mocha": "^10.2.0", "mocha-junit-reporter": "^2.2.1", "mocha-multi-reporters": "^1.5.1", "npm-run-all": "^4.1.5", "opn": "^6.0.0", + "os-browserify": "^0.3.0", "p-all": "^1.0.0", "path-browserify": "^1.0.1", "postcss": "^8.4.33", @@ -153,10 +154,9 @@ "ts-node": "^10.9.1", "tsec": "0.2.7", "tslib": "^2.6.3", - "typescript": "^5.7.0-dev.20240826", + "typescript": "^5.7.0-dev.20240903", "util": "^0.12.4", - "vscode-nls-dev": "^3.3.1", - "webpack": "^5.91.0", + "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-stream": "^7.0.0", "xml2js": "^0.5.0", @@ -167,22 +167,22 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@azure-rest/ai-translation-text": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@azure-rest/ai-translation-text/-/ai-translation-text-1.0.0.tgz", - "integrity": "sha512-Zt1nwHdvfEzM6EVnx4cLz6GNYS5gxYWbwA3dAr6+NM9CWb3vk+p2Vy/mleU53OSeJvkzhpjXJ78qiJh42JmcXA==", + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@azure-rest/ai-translation-text/-/ai-translation-text-1.0.0-beta.1.tgz", + "integrity": "sha512-h1xDrmVRbk6eAAqTHxy9Npv543cWteqgop15sVXBQhadOwzHoREn+UqMCzNfvL6/AjiInUlwNSaNQK1ANgobLA==", "dev": true, "dependencies": { "@azure-rest/core-client": "^1.1.0", @@ -192,7 +192,7 @@ "tslib": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, "node_modules/@azure-rest/core-client": { @@ -224,10 +224,16 @@ "node": ">=18.0.0" } }, + "node_modules/@azure/core-asynciterator-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz", + "integrity": "sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==", + "dev": true + }, "node_modules/@azure/core-auth": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.8.0.tgz", - "integrity": "sha512-YvFMowkXzLbXNM11yZtVLhUCmuG0ex7JKOH366ipjmHBhL3vpDcPAeWF+jf0X+jVXwFqo3UhsWUq4kH0ZPdu/g==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -238,73 +244,149 @@ "node": ">=18.0.0" } }, - "node_modules/@azure/core-client": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", - "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", + "node_modules/@azure/core-http": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.2.2.tgz", + "integrity": "sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA==", "dev": true, "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", + "@azure/abort-controller": "^1.0.0", + "@azure/core-asynciterator-polyfill": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-tracing": "1.0.0-preview.13", "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" + "@types/node-fetch": "^2.5.0", + "@types/tunnel": "^0.0.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.0", + "process": "^0.11.10", + "tough-cookie": "^4.0.0", + "tslib": "^2.2.0", + "tunnel": "^0.0.6", + "uuid": "^8.3.0", + "xml2js": "^0.4.19" }, "engines": { - "node": ">=18.0.0" + "node": ">=12.0.0" } }, - "node_modules/@azure/core-http-compat": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.1.2.tgz", - "integrity": "sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==", + "node_modules/@azure/core-http/node_modules/@azure/abort-controller": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", "dev": true, "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-client": "^1.3.0", - "@azure/core-rest-pipeline": "^1.3.0" + "tslib": "^2.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/@azure/core-tracing": { + "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", + "dev": true, + "dependencies": { + "@opentelemetry/api": "^1.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@azure/core-http/node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/@azure/core-lro": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.1.tgz", + "integrity": "sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==", "dev": true, "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", + "@azure/abort-controller": "^1.0.0", + "@azure/core-tracing": "1.0.0-preview.13", "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" + "tslib": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@azure/core-lro/node_modules/@azure/core-tracing": { + "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", + "dev": true, + "dependencies": { + "@opentelemetry/api": "^1.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.0.tgz", + "integrity": "sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==", "dev": true, "dependencies": { - "tslib": "^2.6.2" + "@azure/core-asynciterator-polyfill": "^1.0.0", + "tslib": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=12.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz", - "integrity": "sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz", + "integrity": "sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", + "@azure/core-auth": "^1.4.0", "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.9.0", "@azure/logger": "^1.0.0", @@ -329,9 +411,9 @@ } }, "node_modules/@azure/core-util": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.10.0.tgz", - "integrity": "sha512-dqLWQsh9Nro1YQU+405POVtXnwrIVqPyfUzc4zXCbThTg7+vNNaiMkwbX9AMXKyoFYFClxmB3s25ZFr3+jZkww==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -341,61 +423,56 @@ "node": ">=18.0.0" } }, - "node_modules/@azure/core-xml": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.4.3.tgz", - "integrity": "sha512-D6G7FEmDiTctPKuWegX2WTrS1enKZwqYwdKTO6ZN6JMigcCehlT0/CYl+zWpI9vQ9frwwp7GQT3/owaEXgnOsA==", - "dev": true, - "dependencies": { - "fast-xml-parser": "^4.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@azure/logger": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", - "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", "dev": true, "dependencies": { - "tslib": "^2.6.2" + "tslib": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=12.0.0" } }, "node_modules/@azure/storage-blob": { - "version": "12.24.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.24.0.tgz", - "integrity": "sha512-l8cmWM4C7RoNCBOImoFMxhTXe1Lr+8uQ/IgnhRNMpfoA9bAFWoLG4XrWm6O5rKXortreVQuD+fc1hbzWklOZbw==", + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.8.0.tgz", + "integrity": "sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-client": "^1.6.2", - "@azure/core-http-compat": "^2.0.0", + "@azure/core-http": "^2.0.0", "@azure/core-lro": "^2.2.0", "@azure/core-paging": "^1.1.1", - "@azure/core-rest-pipeline": "^1.10.1", - "@azure/core-tracing": "^1.1.2", - "@azure/core-util": "^1.6.1", - "@azure/core-xml": "^1.3.2", + "@azure/core-tracing": "1.0.0-preview.13", "@azure/logger": "^1.0.0", "events": "^3.0.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=12.0.0" } }, "node_modules/@azure/storage-blob/node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@azure/storage-blob/node_modules/@azure/core-tracing": { + "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", "dev": true, "dependencies": { + "@opentelemetry/api": "^1.0.1", "tslib": "^2.2.0" }, "engines": { @@ -403,48 +480,110 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -454,12 +593,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -470,34 +603,50 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.25.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { @@ -509,100 +658,145 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", "dev": true, "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" @@ -646,13 +840,13 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -671,13 +865,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, - "dependencies": { - "@babel/types": "^7.25.6" - }, "bin": { "parser": "bin/babel-parser.js" }, @@ -686,31 +877,34 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", - "debug": "^4.3.1", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { @@ -727,13 +921,13 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -768,32 +962,10 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@csstools/selector-resolve-nested": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz", - "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" - } - }, "node_modules/@csstools/selector-specificity": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", - "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz", + "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==", "dev": true, "funding": [ { @@ -813,18 +985,18 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", "dev": true, "engines": { "node": ">=10.0.0" } }, "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", + "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -859,7 +1031,7 @@ "node_modules/@electron/get/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -893,12 +1065,12 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", - "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz", + "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==", "dev": true, "dependencies": { - "comment-parser": "1.4.1", + "comment-parser": "1.4.0", "esquery": "^1.5.0", "jsdoc-type-pratt-parser": "~4.0.0" }, @@ -922,23 +1094,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", + "espree": "^9.5.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -1016,7 +1188,7 @@ "node_modules/@gulp-sourcemaps/map-sources": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", + "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o= sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", "dev": true, "dependencies": { "normalize-path": "^2.0.1", @@ -1026,16 +1198,10 @@ "node": ">= 0.10" } }, - "node_modules/@gulp-sourcemaps/map-sources/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -1045,9 +1211,9 @@ } }, "node_modules/@gulp-sourcemaps/map-sources/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -1059,21 +1225,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/@gulp-sourcemaps/map-sources/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/@gulp-sourcemaps/map-sources/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/@gulp-sourcemaps/map-sources/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -1085,14 +1236,14 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", "minimatch": "^3.0.5" }, "engines": { @@ -1113,9 +1264,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "deprecated": "Use @eslint/object-schema instead", "dev": true }, @@ -1137,9 +1288,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" @@ -1225,23 +1376,22 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1266,10 +1416,24 @@ "@jridgewell/trace-mapping": "^0.3.25" } }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -1295,48 +1459,46 @@ } }, "node_modules/@koa/router": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.2.tgz", - "integrity": "sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-13.0.0.tgz", + "integrity": "sha512-P278xb5IoLtDn2inRsCzJVKGxt5RkjOivwxGbniMO1sI8bft1/Dr93UsRP5aByT8C74x8zqxDYyPXrQwRKIhjg==", "dev": true, "dependencies": { - "debug": "^4.3.4", "http-errors": "^2.0.0", "koa-compose": "^4.1.0", - "methods": "^1.1.2", - "path-to-regexp": "^6.3.0" + "path-to-regexp": "^6.2.2" }, "engines": { - "node": ">= 12" + "node": ">= 18" } }, "node_modules/@microsoft/1ds-core-js": { - "version": "3.2.18", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.18.tgz", - "integrity": "sha512-ytlFv3dfb8OGqvbZP8tSIlNvn3QNYxdsF0k6ikRMWSr6CmBxBi1sliaxc2Q5KuYOuaeWkd8WRm25Rx/UtHcyMg==", + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.13.tgz", + "integrity": "sha512-CluYTRWcEk0ObG5EWFNWhs87e2qchJUn0p2D21ZUa3PWojPZfPSBs4//WIE0MYV8Qg1Hdif2ZTwlM7TbYUjfAg==", "dependencies": { - "@microsoft/applicationinsights-core-js": "2.8.18", + "@microsoft/applicationinsights-core-js": "2.8.15", "@microsoft/applicationinsights-shims": "^2.0.2", - "@microsoft/dynamicproto-js": "^1.1.11" + "@microsoft/dynamicproto-js": "^1.1.7" } }, "node_modules/@microsoft/1ds-post-js": { - "version": "3.2.18", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.18.tgz", - "integrity": "sha512-Tzjcja4SMyws3UP58kD2edFPNb7BJtx5uCgwf/PWXwDyfbUY1/crsTQdEyR98wy/vorvLDZdQlcL++VMChfYnQ==", + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.13.tgz", + "integrity": "sha512-HgS574fdD19Bo2vPguyznL4eDw7Pcm1cVNpvbvBLWiW3x4e1FCQ3VMXChWnAxCae8Hb0XqlA2sz332ZobBavTA==", "dependencies": { - "@microsoft/1ds-core-js": "3.2.18", + "@microsoft/1ds-core-js": "3.2.13", "@microsoft/applicationinsights-shims": "^2.0.2", - "@microsoft/dynamicproto-js": "^1.1.11" + "@microsoft/dynamicproto-js": "^1.1.7" } }, "node_modules/@microsoft/applicationinsights-core-js": { - "version": "2.8.18", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.18.tgz", - "integrity": "sha512-yPHRZFLpnEO0uSgFPM1BLMRRwjoten9YBbn4pJRbCT4PigLnj748knmWsMwXIdcehtkRTYz78kPYa/LWP7nvmA==", + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.15.tgz", + "integrity": "sha512-yYAs9MyjGr2YijQdUSN9mVgT1ijI1FPMgcffpaPmYbHAVbQmF7bXudrBWHxmLzJlwl5rfep+Zgjli2e67lwUqQ==", "dependencies": { "@microsoft/applicationinsights-shims": "2.0.2", - "@microsoft/dynamicproto-js": "^1.1.11" + "@microsoft/dynamicproto-js": "^1.1.9" }, "peerDependencies": { "tslib": "*" @@ -1348,9 +1510,9 @@ "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" }, "node_modules/@microsoft/dynamicproto-js": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.11.tgz", - "integrity": "sha512-gNw9z9LbqLV+WadZ6/MMrWwO3e0LuoUH1wve/1iPsBNbgqeVCiB0EZFNNj2lysxS2gkqoF9hmyVaG3MoM1BkxA==" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz", + "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -1434,18 +1596,18 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "dev": true, "dependencies": { - "@octokit/types": "^6.40.0" + "@octokit/types": "^6.34.0" }, "peerDependencies": { "@octokit/core": ">=2" @@ -1461,12 +1623,12 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "dev": true, "dependencies": { - "@octokit/types": "^6.39.0", + "@octokit/types": "^6.34.0", "deprecation": "^2.3.1" }, "peerDependencies": { @@ -1511,19 +1673,22 @@ } }, "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@octokit/openapi-types": "^11.2.0" } }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", - "dev": true + "node_modules/@opentelemetry/api": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz", + "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/@parcel/watcher": { "version": "2.1.0", @@ -1555,25 +1720,25 @@ } }, "node_modules/@playwright/browser-chromium": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.47.1.tgz", - "integrity": "sha512-Xz8hcLS3rxir41unYs95ygyNY4LcVroosPLG8CCfeh52JqBBmDMGVOt9rN9xXz7J6l07Lsvwv8zrfxf2d+x0CA==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.47.0.tgz", + "integrity": "sha512-uMsRSflfEX1zDYdghRhUaLMnyoKqcVquOjo4cbIlqCpgNulDbRF7k9lUAWgobgIbefFz96a4v9/Fae+ngOuBHQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "playwright-core": "1.47.1" + "playwright-core": "1.47.0" }, "engines": { "node": ">=18" } }, "node_modules/@playwright/test": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.1.tgz", - "integrity": "sha512-dbWpcNQZ5nj16m+A5UNScYx7HX5trIy7g4phrcitn+Nk83S32EBX/CLU4hiF4RGKX/yRc93AAqtfaXB7JWBd4Q==", + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.46.1.tgz", + "integrity": "sha512-Fq6SwLujA/DOIvNC2EL/SojJnkKf/rAwJ//APpJJHRyMi1PdKrY3Az+4XNQ51N4RTbItbIByQ0jgd1tayq1aeA==", "dev": true, "dependencies": { - "playwright": "1.47.1" + "playwright": "1.46.1" }, "bin": { "playwright": "cli.js" @@ -1595,27 +1760,27 @@ } }, "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@sinonjs/samsam": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz", - "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.6.0", @@ -1624,9 +1789,9 @@ } }, "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, "node_modules/@swc/core": { @@ -1853,14 +2018,14 @@ } }, "node_modules/@ts-morph/common": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.23.0.tgz", - "integrity": "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.20.0.tgz", + "integrity": "sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q==", "dev": true, "dependencies": { - "fast-glob": "^3.3.2", - "minimatch": "^9.0.3", - "mkdirp": "^3.0.1", + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", "path-browserify": "^1.0.1" } }, @@ -1874,24 +2039,24 @@ } }, "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@ts-morph/common/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", "dev": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" @@ -1904,9 +2069,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "node_modules/@tsconfig/node12": { @@ -1922,9 +2087,9 @@ "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "node_modules/@types/cacheable-request": { @@ -1939,6 +2104,12 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "node_modules/@types/cookie": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", @@ -1946,18 +2117,18 @@ "dev": true }, "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz", + "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==", "dev": true, "dependencies": { "@types/ms": "*" } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/expect": { @@ -1967,9 +2138,9 @@ "dev": true }, "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "optional": true, "dependencies": { @@ -1978,26 +2149,26 @@ } }, "node_modules/@types/gulp-svgmin": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/gulp-svgmin/-/gulp-svgmin-1.2.4.tgz", - "integrity": "sha512-xoKhseGy8g1Kf1zQEX20Pkcc+qaLHpbLOktkPH0WlGHRUPLU8BRVoCQkabGUUKwjC02CAkeAKpE5Sn4Y31oIGw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/gulp-svgmin/-/gulp-svgmin-1.2.1.tgz", + "integrity": "sha512-qT/Y+C2uWJZoGw4oAjuJGZk+ImmTrx+QZbMGSzf8a1absW3wztrmMPvCF64pdogATDVUSPQDLzPWAFeIxylJTA==", "dev": true, "dependencies": { "@types/node": "*", - "@types/svgo": "1", + "@types/svgo": "^1", "@types/vinyl": "*" } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, "node_modules/@types/http-proxy-agent": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-proxy-agent/-/http-proxy-agent-2.0.2.tgz", - "integrity": "sha512-2S6IuBRhqUnH1/AUx9k8KWtY3Esg4eqri946MnxTG5HwehF1S5mqLln8fcyMiuQkY72p2gH3W+rIPqp5li0LyQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-proxy-agent/-/http-proxy-agent-2.0.1.tgz", + "integrity": "sha512-dgsgbsgI3t+ZkdzF9H19uBaLsurIZJJjJsVpj4mCLp8B6YghQ7jVwyqhaL0PcVtuC3nOi0ZBhAi2Dd9jCUwdFA==", "dev": true, "dependencies": { "@types/node": "*" @@ -2016,9 +2187,9 @@ "dev": true }, "node_modules/@types/kerberos": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/kerberos/-/kerberos-1.1.5.tgz", - "integrity": "sha512-eljovuC0f1+6a4R8CSGwlP8P7OGygDoYJ4Yo0PtKYN4NOQEOkLH7tCQ3humCMz3lsGd0hOTyyjxHP+S3N/KtFg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/kerberos/-/kerberos-1.1.2.tgz", + "integrity": "sha512-cLixfcXjdj7qohLasmC1G4fh+en4e4g7mFZiG38D+K9rS9BRKFlq1JH5dGkQzICckbu4wM+RcwSa4VRHlBg7Rg==", "dev": true }, "node_modules/@types/keyv": { @@ -2031,16 +2202,16 @@ } }, "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true, "optional": true }, "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, "node_modules/@types/mocha": { @@ -2050,24 +2221,48 @@ "dev": true }, "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", + "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==", "dev": true }, "node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "version": "20.14.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.13.tgz", + "integrity": "sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { - "undici-types": "~6.19.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "dependencies": { "@types/node": "*" @@ -2080,29 +2275,23 @@ "dev": true }, "node_modules/@types/sinon": { - "version": "10.0.20", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.20.tgz", - "integrity": "sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.2.tgz", + "integrity": "sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw==", "dev": true, "dependencies": { - "@types/sinonjs__fake-timers": "*" + "@sinonjs/fake-timers": "^7.1.0" } }, "node_modules/@types/sinon-test": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@types/sinon-test/-/sinon-test-2.4.6.tgz", - "integrity": "sha512-ggz+mnObtOEM64FL6PjJvfw4ratfcXv7O0yp1e1aRDLPTeWn5K19pmtEXrnZeCyxY+J31361HHsccyL0sbup8Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/sinon-test/-/sinon-test-2.4.2.tgz", + "integrity": "sha512-3BX9mk5+o//Xzs5N4bFYxPT+QlPLrqbyNfDWkIGtk9pVIp2Nl8ctsIGXsY3F01DsCd1Zlin3FqAk6V5XqkCyJA==", "dev": true, "dependencies": { "@types/sinon": "*" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true - }, "node_modules/@types/svgo": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", @@ -2115,6 +2304,15 @@ "integrity": "sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==", "dev": true }, + "node_modules/@types/tunnel": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/vinyl": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", @@ -2126,9 +2324,9 @@ } }, "node_modules/@types/vscode-notebook-renderer": { - "version": "1.72.3", - "resolved": "https://registry.npmjs.org/@types/vscode-notebook-renderer/-/vscode-notebook-renderer-1.72.3.tgz", - "integrity": "sha512-MfmEI3A2McbUV2WaijoTgLOAs9chwHN4WmqOedl3jdtlbzJBWIQ9ZFmQdzPa3lYr5j8DJhRg3KB5AIM/BBfg9Q==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@types/vscode-notebook-renderer/-/vscode-notebook-renderer-1.72.0.tgz", + "integrity": "sha512-5iTjb39DpLn03ULUwrDR3L2Dy59RV4blSUHy0oLdQuIY11PhgWO4mXIcoFS0VxY1GZQ4IcjSf3ooT2Jrrcahnw==", "dev": true }, "node_modules/@types/webpack": { @@ -2143,25 +2341,21 @@ } }, "node_modules/@types/wicg-file-system-access": { - "version": "2020.9.8", - "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2020.9.8.tgz", - "integrity": "sha512-ggMz8nOygG7d/stpH40WVaNvBwuyYLnrg5Mbyf6bmsj/8+gb6Ei4ZZ9/4PNpcPNTT8th9Q8sM8wYmWGjMWLX/A==", + "version": "2020.9.6", + "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2020.9.6.tgz", + "integrity": "sha512-6hogE75Hl2Ov/jgp8ZhDaGmIF/q3J07GtXf8nCJCwKTHq7971po5+DId7grft09zG7plBwpF6ZU0yx9Du4/e1A==", "dev": true }, "node_modules/@types/windows-foreground-love": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@types/windows-foreground-love/-/windows-foreground-love-0.3.1.tgz", - "integrity": "sha512-aN6wdcro6KOUinabIbY8EeWnk4BzXLbUTcS3YGUDIh5lmHYif0z3gsaqi3Dg2Nk7GpRIjqVutwPMeAdn/YfChA==", - "deprecated": "This is a stub types definition. windows-foreground-love provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "windows-foreground-love": "*" - } + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/windows-foreground-love/-/windows-foreground-love-0.3.0.tgz", + "integrity": "sha512-tFUVA/fiofNqOh6lZlymvQiQYPY+cZXZPR9mn9wN6/KS8uwx0zgH4Ij/jmFyRYr+x+DGZWEIeknS2BMi7FZJAQ==", + "dev": true }, "node_modules/@types/winreg": { - "version": "1.2.36", - "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.36.tgz", - "integrity": "sha512-DtafHy5A8hbaosXrbr7YdjQZaqVewXmiasRS5J4tYMzt3s1gkh40ixpxgVFfKiQ0JIYetTJABat47v9cpr/sQg==", + "version": "1.2.30", + "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.30.tgz", + "integrity": "sha1-kdZxDlNtNFucmwF8V0z2qNpkxRg= sha512-c4m/hnOI1j34i8hXlkZzelE6SXfOqaTWhBp0UgBuwmpiafh22OpsE261Rlg//agZtQHIY5cMgbkX8bnthUFrmA==", "dev": true }, "node_modules/@types/yauzl": { @@ -2174,9 +2368,9 @@ } }, "node_modules/@types/yazl": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@types/yazl/-/yazl-2.4.5.tgz", - "integrity": "sha512-qpmPfx32HS7vlGJf7EsoM9qJnLZhXJBf1KH0hzfdc+D794rljQWh4H0I/UrZy+6Nhqn0l2jdBZXBGZtR1vnHqw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/yazl/-/yazl-2.4.2.tgz", + "integrity": "sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -2218,12 +2412,12 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "version": "5.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.57.0.tgz", + "integrity": "sha512-0RnrwGQ7MmgtOSnzB/rSGYr2iXENi6L+CtPzX3g5ovo0HlruLukSEKcc4s+q0IEc+DLTDc7Edan0Y4WSQ/bFhw==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.62.0" + "@typescript-eslint/utils": "5.57.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2237,13 +2431,13 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "5.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz", + "integrity": "sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "5.57.0", + "@typescript-eslint/visitor-keys": "5.57.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2254,9 +2448,9 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "5.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.0.tgz", + "integrity": "sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2267,13 +2461,13 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "5.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz", + "integrity": "sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "5.57.0", + "@typescript-eslint/visitor-keys": "5.57.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2294,17 +2488,17 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "5.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.0.tgz", + "integrity": "sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "5.57.0", + "@typescript-eslint/types": "5.57.0", + "@typescript-eslint/typescript-estree": "5.57.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -2320,12 +2514,12 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "5.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz", + "integrity": "sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/types": "5.57.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2575,23 +2769,13 @@ "node": ">=10" } }, - "node_modules/@vscode/gulp-electron/node_modules/gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha512-qhfUlYwq5zIP4cpRjx+np2vZVnr0xCRQrF3RsGel8uqL47Gu3yjmllSfnvJyl/39zYuxS68e1nnxImbm7388vw==", - "dev": true, - "engines": { - "node": ">=0.10.0", - "npm": ">=1.2.10" - } - }, "node_modules/@vscode/gulp-electron/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -2600,7 +2784,7 @@ "node_modules/@vscode/gulp-electron/node_modules/rcedit": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-0.3.0.tgz", - "integrity": "sha512-6cFo8dgNFf92BPdBNEKtwCl321wSVW6HYn3+QRQMGf0sclBMerCyMAreQDdIchfR8ECG0pAYD33NIODaJEnv4w==", + "integrity": "sha1-y17uGF5Ub57aWXwkjJkGGG+pa84= sha512-6cFo8dgNFf92BPdBNEKtwCl321wSVW6HYn3+QRQMGf0sclBMerCyMAreQDdIchfR8ECG0pAYD33NIODaJEnv4w==", "dev": true }, "node_modules/@vscode/gulp-electron/node_modules/semver": { @@ -2648,29 +2832,31 @@ } }, "node_modules/@vscode/l10n-dev/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@vscode/l10n-dev/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2682,15 +2868,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vscode/l10n-dev/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/@vscode/policy-watcher": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.1.6.tgz", @@ -2702,9 +2879,9 @@ } }, "node_modules/@vscode/policy-watcher/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.0.0.tgz", + "integrity": "sha512-GyHvgPvUXBvAkXa0YvYnhilSB1A+FRYMpIVggKzPZqdaZfevZOuzfWzyvgzOwRLHBeo/MMswmJFsrNF4Nw1pmA==" }, "node_modules/@vscode/proxy-agent": { "version": "0.23.0", @@ -2736,7 +2913,7 @@ "node_modules/@vscode/ripgrep/node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -2772,9 +2949,9 @@ } }, "node_modules/@vscode/sqlite3/node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" }, "node_modules/@vscode/sudo-prompt": { "version": "9.3.1", @@ -2782,14 +2959,14 @@ "integrity": "sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==" }, "node_modules/@vscode/telemetry-extractor": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@vscode/telemetry-extractor/-/telemetry-extractor-1.13.1.tgz", - "integrity": "sha512-71D+YZhZUjCJm1r04RkBukRQj1YJhc5mhUCmC0Mv+3iG0ADwSg71zz+rJaKm/6d0gbfFheCdKPPexoxkYcDveQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@vscode/telemetry-extractor/-/telemetry-extractor-1.10.2.tgz", + "integrity": "sha512-hn+KDSwIRj7LzDSFd9HALkc80UY1g16nQgWztHml+nxAZU3Hw/EoWEEDxOncvDYq9YcV+tX/cVHrVjbNL2Dg0g==", "dev": true, "dependencies": { "@vscode/ripgrep": "^1.15.9", "command-line-args": "^5.2.1", - "ts-morph": "^22.0.0" + "ts-morph": "^19.0.0" }, "bin": { "vscode-telemetry-extractor": "out/extractor.js" @@ -2816,9 +2993,9 @@ } }, "node_modules/@vscode/test-cli/node_modules/@types/mocha": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", - "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.2.tgz", + "integrity": "sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==", "dev": true }, "node_modules/@vscode/test-cli/node_modules/brace-expansion": { @@ -2831,29 +3008,31 @@ } }, "node_modules/@vscode/test-cli/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@vscode/test-cli/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2865,23 +3044,14 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vscode/test-cli/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/@vscode/test-electron": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz", - "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.0.tgz", + "integrity": "sha512-yojuDFEjohx6Jb+x949JRNtSn6Wk2FAh4MldLE3ck9cfvCqzwxF32QsNy1T9Oe4oT+ZfFcg0uPUCajJzOmPlTA==", "dev": true, "dependencies": { "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.4", "jszip": "^3.10.1", "ora": "^7.0.1", "semver": "^7.6.2" @@ -2891,29 +3061,29 @@ } }, "node_modules/@vscode/test-web": { - "version": "0.0.56", - "resolved": "https://registry.npmjs.org/@vscode/test-web/-/test-web-0.0.56.tgz", - "integrity": "sha512-lR688n+D6A9odw+IZ5cU8CYr2YXLB61bGgyZpPVJe/sJy4/DYX5CAxPb7Wj9ZMYL41CTvWq5DeXtfCjlabPcYA==", + "version": "0.0.60", + "resolved": "https://registry.npmjs.org/@vscode/test-web/-/test-web-0.0.60.tgz", + "integrity": "sha512-U3Eif3GZEfmtFJFTRl5IZUxlqDocslvpHCoW4uz407F9YINc2ujJPB0QG+9ZtjjowZDzFJlg60J44RqmnlA0cg==", "dev": true, "dependencies": { "@koa/cors": "^5.0.0", - "@koa/router": "^12.0.1", - "@playwright/browser-chromium": "^1.45.0", - "glob": "^10.4.2", + "@koa/router": "^13.0.0", + "@playwright/browser-chromium": "^1.47.0", + "glob": "^11.0.0", "gunzip-maybe": "^1.4.2", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.5", "koa": "^2.15.3", "koa-morgan": "^1.0.1", "koa-mount": "^4.0.0", "koa-static": "^5.0.0", "minimist": "^1.2.8", - "playwright": "^1.45.0", + "playwright": "^1.47.0", "tar-fs": "^3.0.6", "vscode-uri": "^3.0.8" }, "bin": { - "vscode-test-web": "out/index.js" + "vscode-test-web": "out/server/index.js" }, "engines": { "node": ">=16" @@ -2929,35 +3099,65 @@ } }, "node_modules/@vscode/test-web/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/test-web/node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@vscode/test-web/node_modules/lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "dev": true, + "engines": { + "node": "20 || >=22" } }, "node_modules/@vscode/test-web/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2972,10 +3172,44 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/@vscode/test-web/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/test-web/node_modules/playwright": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz", + "integrity": "sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==", + "dev": true, + "dependencies": { + "playwright-core": "1.47.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, "node_modules/@vscode/tree-sitter-wasm": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.2.tgz", - "integrity": "sha512-N57MR/kt4jR0H/TXeDsVYeJmvvUiK7avow0fjy+/EeKcyNBJcM2BFhj4XOAaaMbhGsOcIeSvJFouRWctXI7sKw==" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.4.tgz", + "integrity": "sha512-vOONG3Zxsh1I4JOA48WdQ5KiXjJAdfMvYTuHbW7b27tGtRqsPLY5WZyTwLXc5uujKHyhG3LJXE9poxRZSxTIiA==" }, "node_modules/@vscode/v8-heap-parser": { "version": "0.1.0", @@ -3020,26 +3254,6 @@ "node": ">= 0.6" } }, - "node_modules/@vscode/vscode-perf/node_modules/node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/@vscode/windows-ca-certs": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@vscode/windows-ca-certs/-/windows-ca-certs-0.3.1.tgz", @@ -3240,6 +3454,12 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@webgpu/types": { + "version": "0.1.44", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.44.tgz", + "integrity": "sha512-JDpYJN5E/asw84LTYhKyvPpxGnD+bAKPtpW9Ilurf7cZpxaTbxkQcGwOd7jgB9BPBrTYQ+32ufo4HiuomTjHNQ==", + "dev": true + }, "node_modules/@webpack-cli/configtest": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", @@ -3284,75 +3504,66 @@ } } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@xterm/addon-clipboard": { - "version": "0.2.0-beta.35", - "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.35.tgz", - "integrity": "sha512-B8AulZEjsfvSEaLKp8oyRu7yJ7FJb5R3W0wpPbI/rOMVAuBwxDJsz0CxLvJUXnJX7OJwd5cjnyTnEcXJfMJycA==", + "version": "0.2.0-beta.47", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.47.tgz", + "integrity": "sha512-mJHV1770gwVckj4mgjdxegt4zLL5WGCoJblTqaLbgEF7xOwsJUzvGk38qsZ4ZpdTa2ti76H0pkb1CpZGrXL9qg==", "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { - "@xterm/xterm": "^5.4.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-image": { - "version": "0.9.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.52.tgz", - "integrity": "sha512-1fWhnCIvLeO0aQ3CKqkTB9ye1bUsocpgFdDOgmwfW4XhLXpvu+QcyMGQMtWJHt8JWBN2w0cgR9eyfKw7orN+9Q==", + "version": "0.9.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.64.tgz", + "integrity": "sha512-1Aqqytx/z/Khecf5xrO++f/p5EQX4uG87TbbAmE0OQys/JgKMnNggDzqon5bpHboimLfQiFPw716NbTqMphjfw==", "peerDependencies": { - "@xterm/xterm": "^5.2.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-search": { - "version": "0.16.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.52.tgz", - "integrity": "sha512-ZLVh0O91dcjxCjrU3vadl+40Z/mBnYXhKNA58oU/dGWFtFxtUB9SaZoOUtBvnfDpQIloYAK6raC2AfVsKHzD8A==", + "version": "0.16.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.64.tgz", + "integrity": "sha512-vUsvTkEOFJwv8nVtiiGr/vTMeQhu62VkUejY2h1+yZagnVEusGVPU1JYoqBTLu5HM4cFiTGsJYXFI/0apASXYA==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-serialize": { - "version": "0.14.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.52.tgz", - "integrity": "sha512-1+ckKya1OURFmELH1Tjjoxz3Gnj78Dxj+NNRrEunfINkvyzaY+n8wT28FQxIlU5gJq+a0VGvlhNgTkMwgOn6aw==", + "version": "0.14.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.64.tgz", + "integrity": "sha512-0AqVveTV3Pr9Lp+beJYOP5WuRvIrPSDGAK24da7BRGcLIKVq8pok1FdlM9jPeUbkX0DKo6Ortm77qeb2Z+n8+A==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-unicode11": { - "version": "0.9.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.52.tgz", - "integrity": "sha512-5tZR/8c+vf0YNSYS6B9pEv8gyWWZpPYOf/BRQDkTGtYAnFf04MzggVE/U7tKUXGDzBhzwTPODq5qPNTX1xpGgw==", + "version": "0.9.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.64.tgz", + "integrity": "sha512-3+PKu+DXFq32xlsYfnI058/T8dTY2tQhRpJLP2CNR/jVWk5uBkVO0dBV0Srqj5QOAlAhzzZuS6TbsVRXORptqw==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-webgl": { - "version": "0.19.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.52.tgz", - "integrity": "sha512-kbPO9iR166xW8qgRkYmKX2Vu0kQHXpxYLQ9jY/01e5kvNrI/rqRDV63FIq14ncOi7N3+dmTuUkjvbg8anCpuIw==", + "version": "0.19.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.64.tgz", + "integrity": "sha512-cxTkMPAXPQAZnWqahNu7ff9mbJvM1sQqKnZWiFZAHTsZXym4oa3KCB4pjH4didSyYkhkPY/17E8I0UOUpvv0Yw==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/headless": { - "version": "5.6.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.6.0-beta.52.tgz", - "integrity": "sha512-f4QITQwotblRLW6YOHnK801wHJWfFDnjD7jUEwaaAXtSp32xH3jguWnMP9/uuQX45q9ndjDjnm1t5aXX7gwqBQ==" + "version": "5.6.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.6.0-beta.64.tgz", + "integrity": "sha512-my08kgH2K3CBEtBg/o8lamtD6BYNBv03Akq747Lajv0QzOiwan7B4r2xdbA6i9sovB+MdjFs0XP1ksc3EpKakg==" }, "node_modules/@xterm/xterm": { - "version": "5.6.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.52.tgz", - "integrity": "sha512-aZh8IBdZPb2N4NjTt/fQ/C90z/PM3Zxkfoqhmlsp5+v3Otmyw5kd3DepeHK1SFW/pz0/xdj4KFgX8t8Y2lDRbA==" + "version": "5.6.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.64.tgz", + "integrity": "sha512-iSKS6tQTFpoN5y487eptlxkUT0jqK5hrvtFQMLugMcQdn7gCUCiFGa4Z1RdqKYSGvAypka+b9gMKPrKWZ7Q3yQ==" }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", @@ -3367,31 +3578,28 @@ "dev": true }, "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3419,13 +3627,10 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, "engines": { "node": ">=0.4.0" } @@ -3475,15 +3680,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", + "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { "type": "github", @@ -3497,30 +3702,27 @@ "dev": true }, "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, "peerDependencies": { - "ajv": "^8.8.2" + "ajv": "^6.9.1" } }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, "engines": { "node": ">=0.4.2" } }, "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true, "engines": { "node": ">=6" @@ -3529,7 +3731,7 @@ "node_modules/ansi-cyan": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", "dev": true, "dependencies": { "ansi-wrap": "0.1.0" @@ -3550,7 +3752,7 @@ "node_modules/ansi-gray": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE= sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", "dev": true, "dependencies": { "ansi-wrap": "0.1.0" @@ -3562,7 +3764,7 @@ "node_modules/ansi-red": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", "dev": true, "dependencies": { "ansi-wrap": "0.1.0" @@ -3581,11 +3783,12 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "dependencies": { + "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" }, "engines": { @@ -3598,7 +3801,7 @@ "node_modules/ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768= sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3607,13 +3810,13 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8= sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -3626,7 +3829,7 @@ "node_modules/append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", "dev": true, "dependencies": { "buffer-equal": "^1.0.0" @@ -3638,7 +3841,7 @@ "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "node_modules/are-docs-informative": { @@ -3665,7 +3868,7 @@ "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3674,7 +3877,7 @@ "node_modules/arr-filter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", "dev": true, "dependencies": { "make-iterator": "^1.0.0" @@ -3695,7 +3898,7 @@ "node_modules/arr-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ= sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", "dev": true, "dependencies": { "make-iterator": "^1.0.0" @@ -3707,7 +3910,7 @@ "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3722,26 +3925,10 @@ "node": ">=6" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3750,7 +3937,7 @@ "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8= sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3759,7 +3946,7 @@ "node_modules/array-initial": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U= sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", "dev": true, "dependencies": { "array-slice": "^1.0.0", @@ -3834,7 +4021,7 @@ "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3843,47 +4030,25 @@ "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/asar": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", - "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz", + "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==", "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", "dev": true, "dependencies": { @@ -3912,16 +4077,16 @@ } }, "node_modules/asar/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -3935,7 +4100,7 @@ "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3966,21 +4131,15 @@ } }, "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true }, "node_modules/async-settle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", "dev": true, "dependencies": { "async-done": "^1.2.2" @@ -3989,6 +4148,12 @@ "node": ">= 0.10" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k= sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -4002,13 +4167,10 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -4017,15 +4179,15 @@ } }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", "dev": true }, "node_modules/bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", "dev": true, "dependencies": { "arr-filter": "^1.1.1", @@ -4056,9 +4218,9 @@ "optional": true }, "node_modules/bare-fs": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", - "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", "dev": true, "optional": true, "dependencies": { @@ -4068,9 +4230,9 @@ } }, "node_modules/bare-os": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", - "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", "dev": true, "optional": true }, @@ -4085,14 +4247,13 @@ } }, "node_modules/bare-stream": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", - "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", "dev": true, "optional": true, "dependencies": { - "b4a": "^1.6.6", - "streamx": "^2.20.0" + "streamx": "^2.18.0" } }, "node_modules/base": { @@ -4116,7 +4277,7 @@ "node_modules/base/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY= sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { "is-descriptor": "^1.0.0" @@ -4156,16 +4317,10 @@ "node": ">= 0.8" } }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, "node_modules/big.js": { @@ -4178,21 +4333,18 @@ } }, "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/binaryextensions": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz", - "integrity": "sha512-xnG0l4K3ghM62rFzDi2jcNEuICl6uQ4NgvGpqQsY7HgW8gPDeAWGOxHI/k+qZfXfMANytzrArGNPXidaCwtbmA==", + "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U= sha512-xnG0l4K3ghM62rFzDi2jcNEuICl6uQ4NgvGpqQsY7HgW8gPDeAWGOxHI/k+qZfXfMANytzrArGNPXidaCwtbmA==", "dev": true }, "node_modules/bindings": { @@ -4216,7 +4368,7 @@ "node_modules/block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", "dev": true, "dependencies": { "inherits": "~2.0.0" @@ -4228,13 +4380,13 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz", + "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==", "dev": true, "optional": true }, @@ -4275,9 +4427,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -4294,10 +4446,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4332,21 +4484,18 @@ "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "engines": { "node": "*" } }, "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74= sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", "dev": true, "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.4.0" } }, "node_modules/buffer-from": { @@ -4444,9 +4593,9 @@ } }, "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "dependencies": { "clone-response": "^1.0.2", @@ -4514,9 +4663,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "version": "1.0.30001581", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", + "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", "dev": true, "funding": [ { @@ -4559,9 +4708,9 @@ } }, "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "dependencies": { "has-flag": "^4.0.0" @@ -4586,10 +4735,16 @@ } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4602,9 +4757,6 @@ "engines": { "node": ">= 8.10.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -4618,9 +4770,9 @@ } }, "node_modules/chrome-remote-interface": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.33.2.tgz", - "integrity": "sha512-wvm9cOeBTrb218EC+6DteGt92iXr2iY0+XJP30f15JVDhqvWvJEVACh9GvUm8b9Yd8bxQivaLSb8k7mgrbyomQ==", + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.33.0.tgz", + "integrity": "sha512-tv/SgeBfShXk43fwFpQ9wnS7mOCPzETnzDXTNxCb6TqKOiOeIfbrJz+2NAp8GmzwizpKa058wnU1Te7apONaYg==", "dependencies": { "commander": "2.11.x", "ws": "^7.2.0" @@ -4634,19 +4786,48 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, + "node_modules/chrome-remote-interface/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, "engines": { "node": ">=6.0" } }, + "node_modules/chrome-trace-event/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", "dev": true }, "node_modules/ci-info": { @@ -4673,7 +4854,7 @@ "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" @@ -4682,17 +4863,68 @@ "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, "node_modules/cli-cursor": { @@ -4765,7 +4997,7 @@ "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "engines": { "node": ">=0.8" @@ -4774,7 +5006,7 @@ "node_modules/clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg= sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, "engines": { "node": ">= 0.10" @@ -4816,21 +5048,18 @@ } }, "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "dev": true }, "node_modules/cloneable-readable": { @@ -4844,16 +5073,10 @@ "readable-stream": "^2.3.5" } }, - "node_modules/cloneable-readable/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/cloneable-readable/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -4865,25 +5088,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/cloneable-readable/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cloneable-readable/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "engines": { "iojs": ">= 1.0.0", @@ -4891,15 +5099,15 @@ } }, "node_modules/code-block-writer": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.2.tgz", - "integrity": "sha512-XfXzAGiStXSmCIwrkdfvc7FS5Dtj8yelCtyOf2p2skCAfvLd6zu0rGzuS9NSCO3bq1JKpFZ7tbKdKlcd5occQA==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", "dev": true }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4908,7 +5116,7 @@ "node_modules/collection-map": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", "dev": true, "dependencies": { "arr-map": "^2.0.2", @@ -4922,7 +5130,7 @@ "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, "dependencies": { "map-visit": "^1.0.0", @@ -4966,11 +5174,32 @@ "dev": true }, "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/combined-stream/node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk= sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", @@ -4996,27 +5225,24 @@ } }, "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz", + "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==", "dev": true, "engines": { "node": ">= 12.0.0" } }, "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/concat-stream": { @@ -5034,16 +5260,10 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -5055,21 +5275,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/concat-with-sourcemaps": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", @@ -5080,9 +5285,9 @@ } }, "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "dependencies": { "ini": "^1.3.4", @@ -5101,6 +5306,26 @@ "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -5111,15 +5336,18 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "dev": true, "engines": { "node": ">= 0.6" @@ -5141,7 +5369,7 @@ "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5194,14 +5422,14 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", "dev": true, "dependencies": { "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^4.0.0" }, @@ -5225,9 +5453,9 @@ } }, "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "node_modules/create-require": { @@ -5271,9 +5499,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz", + "integrity": "sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==", "dev": true, "engines": { "node": "^14 || ^16 || >=18" @@ -5283,16 +5511,16 @@ } }, "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.9.1.tgz", + "integrity": "sha512-OzABOh0+26JKFdMzlK6PY1u5Zx8+Ck7CVRlcGNZoY9qwJjdfu2VWFuprTIpPW+Av5TZTVViYWcFQaEEQURLknQ==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" @@ -5305,16 +5533,7 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } } }, "node_modules/css-select": { @@ -5371,13 +5590,13 @@ } }, "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.3.tgz", + "integrity": "sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" + "cssnano-preset-default": "^6.0.3", + "lilconfig": "^3.0.0" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -5391,41 +5610,40 @@ } }, "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.3.tgz", + "integrity": "sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", + "css-declaration-sorter": "^7.1.1", + "cssnano-utils": "^4.0.1", "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" + "postcss-colormin": "^6.0.2", + "postcss-convert-values": "^6.0.2", + "postcss-discard-comments": "^6.0.1", + "postcss-discard-duplicates": "^6.0.1", + "postcss-discard-empty": "^6.0.1", + "postcss-discard-overridden": "^6.0.1", + "postcss-merge-longhand": "^6.0.2", + "postcss-merge-rules": "^6.0.3", + "postcss-minify-font-values": "^6.0.1", + "postcss-minify-gradients": "^6.0.1", + "postcss-minify-params": "^6.0.2", + "postcss-minify-selectors": "^6.0.2", + "postcss-normalize-charset": "^6.0.1", + "postcss-normalize-display-values": "^6.0.1", + "postcss-normalize-positions": "^6.0.1", + "postcss-normalize-repeat-style": "^6.0.1", + "postcss-normalize-string": "^6.0.1", + "postcss-normalize-timing-functions": "^6.0.1", + "postcss-normalize-unicode": "^6.0.2", + "postcss-normalize-url": "^6.0.1", + "postcss-normalize-whitespace": "^6.0.1", + "postcss-ordered-values": "^6.0.1", + "postcss-reduce-initial": "^6.0.2", + "postcss-reduce-transforms": "^6.0.1", + "postcss-svgo": "^6.0.2", + "postcss-unique-selectors": "^6.0.2" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -5435,9 +5653,9 @@ } }, "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.1.tgz", + "integrity": "sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ==", "dev": true, "engines": { "node": "^14 || ^16 || >=18.0" @@ -5459,81 +5677,27 @@ } }, "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.1.0.tgz", + "integrity": "sha512-ZQVKfRVlwRfD150ndzEK8M90ABT+Y/JQKs4Y7U4MXdpuoUkkrr4DwKbVux3YjylA5bUMUj0Nc3pMxPJX6N2QQQ==", "dev": true }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.2" }, "engines": { "node": ">=6.0" @@ -5629,7 +5793,7 @@ "node_modules/deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", "dev": true }, "node_modules/deep-extend": { @@ -5647,9 +5811,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.1.0.tgz", + "integrity": "sha512-/TnecbwXEdycfbsM2++O3eGiatEFHjjNciHEwJclM+T5Kd94qD1AP+2elP/Mq0L5b9VZJao5znR01Mz6eX8Seg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5679,7 +5843,7 @@ "node_modules/default-resolution": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", "dev": true, "engines": { "node": ">= 0.10" @@ -5720,20 +5884,15 @@ } }, "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "object-keys": "^1.0.12" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-property": { @@ -5752,7 +5911,7 @@ "node_modules/delayed-stream": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.6.tgz", - "integrity": "sha512-Si7mB08fdumvLNFddq3HQOoYf8BUxfITyZi+0RBn1sbojFm8c4gD1+3se7qVEji1uiVVLYE0Np0laaS9E+j6ag==", + "integrity": "sha1-omRst+w9XXd0YUZwp6Zd4MFz7bw= sha512-Si7mB08fdumvLNFddq3HQOoYf8BUxfITyZi+0RBn1sbojFm8c4gD1+3se7qVEji1uiVVLYE0Np0laaS9E+j6ag==", "dev": true, "engines": { "node": ">=0.4.0" @@ -5761,7 +5920,7 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "node_modules/depd": { @@ -5792,25 +5951,25 @@ "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50= sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "engines": { "node": ">=8" } @@ -5818,23 +5977,23 @@ "node_modules/detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true, "optional": true }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" @@ -5920,9 +6079,9 @@ } }, "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", "dev": true }, "node_modules/duplexify": { @@ -5937,16 +6096,10 @@ "stream-shift": "^1.0.0" } }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -5958,21 +6111,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/each-props": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", @@ -6002,68 +6140,62 @@ "dev": true }, "node_modules/editorconfig": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", - "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz", + "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==", "dev": true, "dependencies": { - "@one-ini/wasm": "0.1.1", - "commander": "^10.0.0", - "minimatch": "9.0.1", - "semver": "^7.5.3" + "@types/node": "^10.11.7", + "@types/semver": "^5.5.0", + "commander": "^2.19.0", + "lru-cache": "^4.1.3", + "semver": "^5.6.0", + "sigmund": "^1.0.1" }, "bin": { "editorconfig": "bin/editorconfig" - }, - "engines": { - "node": ">=14" } }, - "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } + "node_modules/editorconfig/node_modules/@types/node": { + "version": "10.12.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.21.tgz", + "integrity": "sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==", + "dev": true + }, + "node_modules/editorconfig/node_modules/@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true }, "node_modules/editorconfig/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, - "node_modules/editorconfig/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/editorconfig/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "semver": "bin/semver" } }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "node_modules/electron": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-30.4.0.tgz", - "integrity": "sha512-ric3KLPQ9anXYjtTDkj5NbEcXZqRUwqxrxTviIjLdMdHqd5O+hkSHEzXgbSJUOt+7uw+zZuybn9+IM9y7iEpqg==", + "version": "30.5.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-30.5.1.tgz", + "integrity": "sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -6077,15 +6209,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz", - "integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==", + "version": "1.4.648", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz", + "integrity": "sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==", "dev": true }, "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "node_modules/emojis-list": { @@ -6140,18 +6272,18 @@ } }, "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -6182,57 +6314,23 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "dependencies": { "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -6263,37 +6361,11 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -6312,9 +6384,9 @@ } }, "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "version": "0.10.63", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.63.tgz", + "integrity": "sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -6337,7 +6409,7 @@ "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c= sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "dependencies": { "d": "1", @@ -6346,16 +6418,13 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" + "d": "^1.0.1", + "ext": "^1.1.2" } }, "node_modules/es6-weak-map": { @@ -6371,9 +6440,9 @@ } }, "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" @@ -6464,26 +6533,26 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "46.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", - "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", + "version": "46.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.5.0.tgz", + "integrity": "sha512-aulXdA4I1dyWpzyS1Nh/GNoS6PavzeucxEapnMR4JUERowWvaEk2Y4A5irpHAcdXtBBHLVe8WIhdXNjoAlGQgA==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.41.0", + "@es-joy/jsdoccomment": "~0.40.1", "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", + "comment-parser": "1.4.0", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", "is-builtin-module": "^3.2.1", "semver": "^7.5.4", - "spdx-expression-parse": "^4.0.0" + "spdx-expression-parse": "^3.0.1" }, "engines": { "node": ">=16" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/eslint-plugin-local": { @@ -6493,9 +6562,9 @@ "dev": true }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -6503,9 +6572,6 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-utils": { @@ -6568,15 +6634,21 @@ "node": ">=0.10" } }, + "node_modules/esniff/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6599,9 +6671,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6623,9 +6695,9 @@ } }, "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" @@ -6643,7 +6715,7 @@ "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, "dependencies": { "d": "1", @@ -6653,7 +6725,7 @@ "node_modules/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, "dependencies": { "duplexer": "~0.1.1", @@ -6666,9 +6738,9 @@ } }, "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true, "engines": { "node": ">=0.8.x" @@ -6677,7 +6749,7 @@ "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI= sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, "dependencies": { "debug": "^2.3.3", @@ -6704,7 +6776,7 @@ "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" @@ -6716,7 +6788,7 @@ "node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -6725,23 +6797,74 @@ "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, "node_modules/expand-brackets/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -6750,7 +6873,7 @@ "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/expand-template": { @@ -6764,7 +6887,7 @@ "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "dependencies": { "homedir-polyfill": "^1.0.1" @@ -6774,14 +6897,20 @@ } }, "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "dev": true, "dependencies": { - "type": "^2.7.2" + "type": "^2.0.0" } }, + "node_modules/ext/node_modules/type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -6791,7 +6920,7 @@ "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, "dependencies": { "assign-symbols": "^1.0.0", @@ -6815,6 +6944,18 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -6837,7 +6978,7 @@ "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY= sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { "is-descriptor": "^1.0.0" @@ -6849,7 +6990,7 @@ "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -6861,7 +7002,7 @@ "node_modules/extglob/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -6890,7 +7031,7 @@ "node_modules/extract-zip/node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", @@ -6925,9 +7066,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6949,50 +7090,19 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true - }, - "node_modules/fast-xml-parser": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", - "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -7001,7 +7111,7 @@ "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dependencies": { "pend": "~1.2.0" } @@ -7009,7 +7119,7 @@ "node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" @@ -7021,7 +7131,7 @@ "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -7059,22 +7169,13 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", + "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -7175,7 +7276,7 @@ "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -7187,7 +7288,7 @@ "node_modules/findup-sync/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -7202,7 +7303,7 @@ "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -7214,7 +7315,7 @@ "node_modules/findup-sync/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7223,7 +7324,7 @@ "node_modules/findup-sync/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -7235,7 +7336,7 @@ "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -7280,7 +7381,7 @@ "node_modules/findup-sync/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "dependencies": { "is-number": "^3.0.0", @@ -7337,13 +7438,12 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", + "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { @@ -7351,16 +7451,16 @@ } }, "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -7403,16 +7503,10 @@ "readable-stream": "^2.3.6" } }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -7424,21 +7518,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -7451,7 +7530,7 @@ "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7460,7 +7539,7 @@ "node_modules/for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "dependencies": { "for-in": "^1.0.1" @@ -7470,9 +7549,9 @@ } }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -7485,10 +7564,24 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, "dependencies": { "map-cache": "^0.2.2" @@ -7500,7 +7593,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "engines": { "node": ">= 0.6" @@ -7509,7 +7602,7 @@ "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, "node_modules/fs-constants": { @@ -7542,9 +7635,9 @@ } }, "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dependencies": { "yallist": "^4.0.0" }, @@ -7560,7 +7653,7 @@ "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -7570,16 +7663,10 @@ "node": ">= 0.10" } }, - "node_modules/fs-mkdirp-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/fs-mkdirp-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -7591,21 +7678,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/fs-mkdirp-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/fs-mkdirp-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fs-mkdirp-stream/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -7619,13 +7691,13 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, @@ -7653,12 +7725,12 @@ } }, "node_modules/fstream/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -7673,39 +7745,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -7768,36 +7813,19 @@ } }, "node_modules/get-stream/node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7806,12 +7834,12 @@ "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "node_modules/glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { @@ -7840,7 +7868,7 @@ "node_modules/glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "dependencies": { "extend": "^3.0.0", @@ -7859,16 +7887,16 @@ } }, "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -7882,7 +7910,7 @@ "node_modules/glob-stream/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "dependencies": { "is-glob": "^3.1.0", @@ -7892,7 +7920,7 @@ "node_modules/glob-stream/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "dependencies": { "is-extglob": "^2.1.0" @@ -7901,16 +7929,10 @@ "node": ">=0.10.0" } }, - "node_modules/glob-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/glob-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -7922,21 +7944,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/glob-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/glob-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -7974,7 +7981,7 @@ "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -8016,7 +8023,7 @@ "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -8029,6 +8036,7 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, "dependencies": { "anymatch": "^2.0.0", @@ -8050,7 +8058,7 @@ "node_modules/glob-watcher/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -8065,7 +8073,7 @@ "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -8078,7 +8086,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, "hasInstallScript": true, "optional": true, @@ -8096,7 +8104,7 @@ "node_modules/glob-watcher/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "dependencies": { "is-glob": "^3.1.0", @@ -8106,7 +8114,7 @@ "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "dependencies": { "is-extglob": "^2.1.0" @@ -8118,7 +8126,7 @@ "node_modules/glob-watcher/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -8130,7 +8138,7 @@ "node_modules/glob-watcher/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8139,7 +8147,7 @@ "node_modules/glob-watcher/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -8148,16 +8156,10 @@ "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/glob-watcher/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -8200,9 +8202,9 @@ } }, "node_modules/glob-watcher/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -8228,25 +8230,10 @@ "node": ">=0.10" } }, - "node_modules/glob-watcher/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/glob-watcher/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/glob-watcher/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "dependencies": { "is-number": "^3.0.0", @@ -8291,7 +8278,7 @@ "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "dependencies": { "expand-tilde": "^2.0.2", @@ -8317,9 +8304,9 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -8332,13 +8319,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", + "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", "dev": true, + "optional": true, "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -8392,9 +8379,9 @@ } }, "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", "dev": true, "dependencies": { "@sindresorhus/is": "^4.0.0", @@ -8495,7 +8482,7 @@ "node_modules/gulp-azure-storage/node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8614,9 +8601,9 @@ } }, "node_modules/gulp-azure-storage/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "node_modules/gulp-azure-storage/node_modules/yargs": { @@ -8678,7 +8665,7 @@ "node_modules/gulp-buffer": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/gulp-buffer/-/gulp-buffer-0.0.2.tgz", - "integrity": "sha512-EBkbjjTH2gRr2B8KBAcomdTemfZHqiKs8CxSYdaW0Hq3zxltQFrCg9BBmKVHC9cfxX/3l2BZK5oiGHYNJ/gcVw==", + "integrity": "sha1-r4G0NGEBc2tJlC7GyfqGf/5zcDY= sha512-EBkbjjTH2gRr2B8KBAcomdTemfZHqiKs8CxSYdaW0Hq3zxltQFrCg9BBmKVHC9cfxX/3l2BZK5oiGHYNJ/gcVw==", "dev": true, "dependencies": { "through2": "~0.4.0" @@ -8687,19 +8674,19 @@ "node_modules/gulp-buffer/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "node_modules/gulp-buffer/node_modules/object-keys": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", "dev": true }, "node_modules/gulp-buffer/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -8711,13 +8698,13 @@ "node_modules/gulp-buffer/node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true }, "node_modules/gulp-buffer/node_modules/through2": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", - "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s= sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", "dev": true, "dependencies": { "readable-stream": "~1.0.17", @@ -8727,7 +8714,7 @@ "node_modules/gulp-buffer/node_modules/xtend": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os= sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "dev": true, "dependencies": { "object-keys": "~0.4.0" @@ -8801,7 +8788,7 @@ "node_modules/gulp-cli/node_modules/cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, "dependencies": { "string-width": "^1.0.1", @@ -8812,7 +8799,7 @@ "node_modules/gulp-cli/node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8827,7 +8814,7 @@ "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs= sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -8839,13 +8826,13 @@ "node_modules/gulp-cli/node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true }, "node_modules/gulp-cli/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "dependencies": { "code-point-at": "^1.0.0", @@ -8859,7 +8846,7 @@ "node_modules/gulp-cli/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -8871,13 +8858,13 @@ "node_modules/gulp-cli/node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", "dev": true }, "node_modules/gulp-cli/node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, "dependencies": { "string-width": "^1.0.1", @@ -8927,7 +8914,7 @@ "node_modules/gulp-concat": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M= sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==", "dev": true, "dependencies": { "concat-with-sourcemaps": "^1.0.0", @@ -8938,16 +8925,10 @@ "node": ">= 0.10" } }, - "node_modules/gulp-concat/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-concat/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -8968,21 +8949,6 @@ "node": ">= 0.10" } }, - "node_modules/gulp-concat/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-concat/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-concat/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -8994,9 +8960,9 @@ } }, "node_modules/gulp-concat/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw= sha512-M5D/ZRG7KC3ETrV7iA/GNF/lznml4dZ7ggwtYbqM/B+0INyNTjCdFhw4TqMq//PtNbPpceE7wOqKqK5YfUThPA==", "dev": true, "dependencies": { "clone": "^2.1.1", @@ -9089,7 +9055,7 @@ "node_modules/gulp-eslint/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/gulp-eslint/node_modules/cross-spawn": { @@ -9111,7 +9077,7 @@ "node_modules/gulp-eslint/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -9245,16 +9211,16 @@ "dev": true }, "node_modules/gulp-eslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -9299,7 +9265,7 @@ "node_modules/gulp-eslint/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", @@ -9310,12 +9276,12 @@ } }, "node_modules/gulp-eslint/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -9341,7 +9307,7 @@ "node_modules/gulp-eslint/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { "node": ">=4" @@ -9350,7 +9316,7 @@ "node_modules/gulp-eslint/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -9365,19 +9331,6 @@ "node": ">=0.4.0" } }, - "node_modules/gulp-eslint/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/gulp-eslint/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -9390,7 +9343,7 @@ "node_modules/gulp-eslint/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -9402,7 +9355,7 @@ "node_modules/gulp-eslint/node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9411,13 +9364,13 @@ "node_modules/gulp-eslint/node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/gulp-eslint/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8= sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" @@ -9429,7 +9382,7 @@ "node_modules/gulp-eslint/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9450,7 +9403,7 @@ "node_modules/gulp-eslint/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" @@ -9474,7 +9427,7 @@ "node_modules/gulp-filter": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", - "integrity": "sha512-ZERu1ipbPmjrNQ2dQD6lL4BjrJQG66P/c5XiyMMBqV+tUAJ+fLOyYIL/qnXd2pHmw/G/r7CLQb9ttANvQWbpfQ==", + "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM= sha512-ZERu1ipbPmjrNQ2dQD6lL4BjrJQG66P/c5XiyMMBqV+tUAJ+fLOyYIL/qnXd2pHmw/G/r7CLQb9ttANvQWbpfQ==", "dev": true, "dependencies": { "multimatch": "^2.0.0", @@ -9488,7 +9441,7 @@ "node_modules/gulp-filter/node_modules/arr-diff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo= sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, "dependencies": { "arr-flatten": "^1.0.1", @@ -9501,7 +9454,7 @@ "node_modules/gulp-filter/node_modules/arr-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9510,7 +9463,7 @@ "node_modules/gulp-filter/node_modules/array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU= sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9519,7 +9472,7 @@ "node_modules/gulp-filter/node_modules/extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, "dependencies": { "kind-of": "^1.1.0" @@ -9531,7 +9484,7 @@ "node_modules/gulp-filter/node_modules/kind-of": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9540,7 +9493,7 @@ "node_modules/gulp-filter/node_modules/plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, "dependencies": { "ansi-cyan": "^0.1.1", @@ -9569,7 +9522,7 @@ "node_modules/gulp-flatmap/node_modules/arr-diff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo= sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, "dependencies": { "arr-flatten": "^1.0.1", @@ -9582,7 +9535,7 @@ "node_modules/gulp-flatmap/node_modules/arr-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9591,7 +9544,7 @@ "node_modules/gulp-flatmap/node_modules/array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU= sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9600,7 +9553,7 @@ "node_modules/gulp-flatmap/node_modules/extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, "dependencies": { "kind-of": "^1.1.0" @@ -9609,16 +9562,10 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-flatmap/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-flatmap/node_modules/kind-of": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9627,7 +9574,7 @@ "node_modules/gulp-flatmap/node_modules/plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, "dependencies": { "ansi-cyan": "^0.1.1", @@ -9641,9 +9588,9 @@ } }, "node_modules/gulp-flatmap/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -9655,25 +9602,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/gulp-flatmap/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-flatmap/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-flatmap/node_modules/through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", "dev": true, "dependencies": { "readable-stream": "^2.1.5", @@ -9693,22 +9625,16 @@ "node_modules/gulp-gunzip/node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { "node": ">=0.8" } }, - "node_modules/gulp-gunzip/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-gunzip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -9729,35 +9655,20 @@ "node": ">= 0.10" } }, - "node_modules/gulp-gunzip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-gunzip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-gunzip/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", + "readable-stream": "^2.1.5", "xtend": "~4.0.1" } }, "node_modules/gulp-gunzip/node_modules/vinyl": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha512-ViPXqulxjb1yXxaf/kQZfLHkd2ppnVBWPq4XmvW377vcBTxHFtHR5NRfYsdXsiKpWndKRoCdn11DfEnoCz1Inw==", + "integrity": "sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw= sha512-ViPXqulxjb1yXxaf/kQZfLHkd2ppnVBWPq4XmvW377vcBTxHFtHR5NRfYsdXsiKpWndKRoCdn11DfEnoCz1Inw==", "dev": true, "dependencies": { "clone": "^1.0.0", @@ -9801,16 +9712,10 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-gzip/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-gzip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -9822,21 +9727,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/gulp-gzip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-gzip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-gzip/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -9848,55 +9738,25 @@ } }, "node_modules/gulp-json-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/gulp-json-editor/-/gulp-json-editor-2.6.0.tgz", - "integrity": "sha512-Ni0ZUpNrhesHiTlHQth/Nv1rXCn0LUicEvzA5XuGy186C4PVeNoRjfuAIQrbmt3scKv8dgGbCs0hd77ScTw7hA==", - "dev": true, - "dependencies": { - "deepmerge": "^4.3.1", - "detect-indent": "^6.1.0", - "js-beautify": "^1.14.11", - "plugin-error": "^2.0.1", - "through2": "^4.0.2" - } - }, - "node_modules/gulp-json-editor/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-json-editor/node_modules/plugin-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-2.0.1.tgz", - "integrity": "sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/gulp-json-editor/-/gulp-json-editor-2.5.0.tgz", + "integrity": "sha512-HyrBSaE+Di6oQbKsfNM6X7dPFowOuTTuVYjxratU8QAiW7LR7Rydm+/fSS3OehdnuP++A/07q/nksihuD5FZSA==", "dev": true, "dependencies": { - "ansi-colors": "^1.0.1" + "deepmerge": "^3.0.0", + "detect-indent": "^5.0.0", + "js-beautify": "^1.8.9", + "plugin-error": "^1.0.1", + "through2": "^3.0.0" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp-json-editor/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" + "node": ">=6" } }, "node_modules/gulp-plumber": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.1.tgz", - "integrity": "sha512-mctAi9msEAG7XzW5ytDVZ9PxWMzzi1pS2rBH7lA095DhMa6KEXjm+St0GOCc567pJKJ/oCvosVAZEpAey0q2eQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.0.tgz", + "integrity": "sha512-L/LJftsbKoHbVj6dN5pvMsyJn9jYI0wT0nMg3G6VZhDac4NesezecYTi8/48rHi+yEic3sUpw6jlSc7qNWh32A==", "dev": true, "dependencies": { "chalk": "^1.1.3", @@ -9921,7 +9781,7 @@ "node_modules/gulp-plumber/node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9930,7 +9790,7 @@ "node_modules/gulp-plumber/node_modules/arr-diff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo= sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, "dependencies": { "arr-flatten": "^1.0.1", @@ -9943,7 +9803,7 @@ "node_modules/gulp-plumber/node_modules/arr-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9952,7 +9812,7 @@ "node_modules/gulp-plumber/node_modules/array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU= sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9961,7 +9821,7 @@ "node_modules/gulp-plumber/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "dependencies": { "ansi-styles": "^2.2.1", @@ -9977,7 +9837,7 @@ "node_modules/gulp-plumber/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -9986,7 +9846,7 @@ "node_modules/gulp-plumber/node_modules/extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, "dependencies": { "kind-of": "^1.1.0" @@ -9995,16 +9855,10 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-plumber/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-plumber/node_modules/kind-of": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, "engines": { "node": ">=0.10.0" @@ -10013,7 +9867,7 @@ "node_modules/gulp-plumber/node_modules/plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, "dependencies": { "ansi-cyan": "^0.1.1", @@ -10027,9 +9881,9 @@ } }, "node_modules/gulp-plumber/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10041,25 +9895,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/gulp-plumber/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-plumber/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-plumber/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -10071,7 +9910,7 @@ "node_modules/gulp-plumber/node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, "engines": { "node": ">=0.8.0" @@ -10088,18 +9927,19 @@ } }, "node_modules/gulp-rename": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", - "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc= sha512-qhfUlYwq5zIP4cpRjx+np2vZVnr0xCRQrF3RsGel8uqL47Gu3yjmllSfnvJyl/39zYuxS68e1nnxImbm7388vw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0", + "npm": ">=1.2.10" } }, "node_modules/gulp-replace": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.5.4.tgz", - "integrity": "sha512-lHL+zKJN8uV95UkONnfRkoj2yJxPPupt2SahxA4vo5c+Ee3+WaIiMdWbOyUhg8BhAROQrWKnnxKOWPdVrnBwGw==", + "integrity": "sha1-aaZ5FLvRPFYr/xT1BKQDeWqg2qk= sha512-lHL+zKJN8uV95UkONnfRkoj2yJxPPupt2SahxA4vo5c+Ee3+WaIiMdWbOyUhg8BhAROQrWKnnxKOWPdVrnBwGw==", "dev": true, "dependencies": { "istextorbinary": "1.0.2", @@ -10110,16 +9950,10 @@ "node": ">=0.10" } }, - "node_modules/gulp-replace/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-replace/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10131,21 +9965,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/gulp-replace/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-replace/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-sourcemaps": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", @@ -10180,16 +9999,10 @@ "node": ">=0.4.0" } }, - "node_modules/gulp-sourcemaps/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-sourcemaps/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10201,21 +10014,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/gulp-sourcemaps/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-sourcemaps/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-sourcemaps/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -10250,12 +10048,12 @@ } }, "node_modules/gulp-symdest/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -10277,7 +10075,7 @@ "node_modules/gulp-untar/node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { "node": ">=0.8" @@ -10286,19 +10084,13 @@ "node_modules/gulp-untar/node_modules/clone-stats": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "node_modules/gulp-untar/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", "dev": true }, "node_modules/gulp-untar/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10313,27 +10105,12 @@ "node_modules/gulp-untar/node_modules/replace-ext": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true, "engines": { "node": ">= 0.4" } }, - "node_modules/gulp-untar/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-untar/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-untar/node_modules/tar": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", @@ -10347,19 +10124,19 @@ } }, "node_modules/gulp-untar/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", + "readable-stream": "^2.1.5", "xtend": "~4.0.1" } }, "node_modules/gulp-untar/node_modules/vinyl": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ= sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", "dev": true, "dependencies": { "clone": "^1.0.0", @@ -10371,43 +10148,43 @@ } }, "node_modules/gulp-vinyl-zip": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.5.0.tgz", - "integrity": "sha512-KPi5/2SUmkXXDvKU4L2U1dkPOP03SbhONTOgNZlL23l9Yopt+euJ1bBXwWrSMbsyh3JLW/TYuC8CI4c4Kq4qrw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.2.tgz", + "integrity": "sha512-wJn09jsb8PyvUeyFF7y7ImEJqJwYy40BqL9GKfJs6UGpaGW9A+N68Q+ajsIpb9AeR6lAdjMbIdDPclIGo1/b7Q==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, "dependencies": { + "event-stream": "3.3.4", "queue": "^4.2.1", - "through": "^2.3.8", "through2": "^2.0.3", "vinyl": "^2.0.2", "vinyl-fs": "^3.0.3", "yauzl": "^2.2.1", "yazl": "^2.2.1" - }, - "engines": { - "node": ">= 10" } }, - "node_modules/gulp-vinyl-zip/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "node_modules/gulp-vinyl-zip/node_modules/fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= sha512-MX1ZLPIuKED51hrI4++K+1B0VX87Cs4EkybD2q12Ysuf5p4vkmHqMvQJRlDwROqFr4D2Pzyit5wGQxf30grIcw==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } }, "node_modules/gulp-vinyl-zip/node_modules/queue": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", - "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.0.tgz", + "integrity": "sha512-DwxpAnqJuoQa+wyDgQuwkSshkhlqIlWEvwvdAY27fDPunZ2cVJzXU4JyjY+5l7zs7oGLaYAQm4MbLOVFAHFBzA==", "dev": true, "dependencies": { "inherits": "~2.0.0" } }, "node_modules/gulp-vinyl-zip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10428,21 +10205,6 @@ "node": ">= 0.10" } }, - "node_modules/gulp-vinyl-zip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-vinyl-zip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-vinyl-zip/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -10454,9 +10216,9 @@ } }, "node_modules/gulp-vinyl-zip/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "dependencies": { "clone": "^2.1.1", @@ -10471,19 +10233,19 @@ } }, "node_modules/gulp-vinyl-zip/node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8= sha512-tOFjaiYI4cNrDuqujDv5G1KdCmGtuIULZqLv263CCADNQlNInl8sJPD+Gf3neEVecFQ0sw6D4oJTI/dqlunkSw==", "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "fd-slicer": "~1.0.1" } }, "node_modules/gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U= sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", "dev": true, "dependencies": { "glogg": "^1.0.0" @@ -10509,16 +10271,10 @@ "gunzip-maybe": "bin.js" } }, - "node_modules/gunzip-maybe/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gunzip-maybe/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10530,21 +10286,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/gunzip-maybe/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gunzip-maybe/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gunzip-maybe/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -10555,10 +10296,22 @@ "xtend": "~4.0.1" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -10576,19 +10329,10 @@ "node": ">=0.10.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -10607,9 +10351,9 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, "engines": { "node": ">= 0.4" @@ -10631,12 +10375,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10648,7 +10392,7 @@ "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, "dependencies": { "get-value": "^2.0.6", @@ -10662,7 +10406,7 @@ "node_modules/has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, "dependencies": { "is-number": "^3.0.0", @@ -10675,7 +10419,7 @@ "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -10687,7 +10431,7 @@ "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -10699,7 +10443,7 @@ "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc= sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -10748,9 +10492,9 @@ "dev": true }, "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", "dev": true }, "node_modules/http-assert": { @@ -10769,7 +10513,7 @@ "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -10794,7 +10538,7 @@ "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "engines": { "node": ">= 0.6" @@ -10884,7 +10628,7 @@ "node_modules/husky/node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -10893,7 +10637,7 @@ "node_modules/husky/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "dependencies": { "ansi-styles": "^2.2.1", @@ -10909,7 +10653,7 @@ "node_modules/husky/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -10927,7 +10671,7 @@ "node_modules/husky/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -10939,7 +10683,7 @@ "node_modules/husky/node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, "engines": { "node": ">=0.8.0" @@ -10989,9 +10733,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -11020,9 +10764,9 @@ } }, "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -11033,15 +10777,12 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -11050,7 +10791,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { @@ -11142,7 +10883,7 @@ "node_modules/inquirer/node_modules/cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, "dependencies": { "restore-cursor": "^2.0.0" @@ -11163,13 +10904,13 @@ "node_modules/inquirer/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/inquirer/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -11178,7 +10919,7 @@ "node_modules/inquirer/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, "engines": { "node": ">=4" @@ -11196,7 +10937,7 @@ "node_modules/inquirer/node_modules/onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, "dependencies": { "mimic-fn": "^1.0.0" @@ -11208,7 +10949,7 @@ "node_modules/inquirer/node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368= sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, "dependencies": { "onetime": "^2.0.0", @@ -11219,9 +10960,9 @@ } }, "node_modules/inquirer/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "node_modules/inquirer/node_modules/string-width": { @@ -11249,7 +10990,7 @@ "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8= sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" @@ -11282,20 +11023,6 @@ "node": ">=4" } }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -11308,7 +11035,7 @@ "node_modules/invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY= sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -11326,15 +11053,6 @@ "node": ">= 12" } }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -11349,15 +11067,25 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "kind-of": "^6.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-arguments": { @@ -11376,40 +11104,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -11422,32 +11122,16 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "dependencies": { "builtin-modules": "^3.3.0" @@ -11460,9 +11144,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true, "engines": { "node": ">= 0.4" @@ -11484,55 +11168,44 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "kind-of": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -11547,16 +11220,26 @@ "dev": true }, "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-docker": { @@ -11600,7 +11283,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -11615,13 +11298,10 @@ } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -11664,16 +11344,16 @@ "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, "engines": { "node": ">= 0.4" @@ -11690,21 +11370,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -11739,13 +11404,12 @@ "dev": true }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -11766,52 +11430,22 @@ "node": ">=0.10.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ= sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -11821,12 +11455,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -11862,30 +11496,18 @@ "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, "node_modules/is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -11907,44 +11529,44 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8= sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -11976,9 +11598,9 @@ } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "dependencies": { "has-flag": "^4.0.0" @@ -12002,9 +11624,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -12017,7 +11639,7 @@ "node_modules/istextorbinary": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz", - "integrity": "sha512-qZ5ptUDuni2pdCngFTraYa5kalQ0mX47Mhn08tT0DZZv/7yhX1eMb9lFtXVbWhFtgRtpLG/UdqVAjh9teO5x+w==", + "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8= sha512-qZ5ptUDuni2pdCngFTraYa5kalQ0mX47Mhn08tT0DZZv/7yhX1eMb9lFtXVbWhFtgRtpLG/UdqVAjh9teO5x+w==", "dev": true, "dependencies": { "binaryextensions": "~1.0.0", @@ -12028,13 +11650,16 @@ } }, "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": ">=14" + }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -12086,92 +11711,60 @@ "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" }, "node_modules/js-beautify": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", - "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz", + "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==", "dev": true, "dependencies": { - "config-chain": "^1.1.13", - "editorconfig": "^1.0.4", - "glob": "^10.3.3", - "js-cookie": "^3.0.5", - "nopt": "^7.2.0" + "config-chain": "^1.1.12", + "editorconfig": "^0.15.2", + "glob": "^7.1.3", + "mkdirp": "~0.5.0", + "nopt": "~4.0.1" }, "bin": { "css-beautify": "js/bin/css-beautify.js", "html-beautify": "js/bin/html-beautify.js", "js-beautify": "js/bin/js-beautify.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/js-beautify/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" } }, "node_modules/js-beautify/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/js-beautify/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/js-beautify/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "minimist": "^1.2.5" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/js-beautify/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "dev": true, - "engines": { - "node": ">=14" + "bin": { + "mkdirp": "bin/cmd.js" } }, "node_modules/js-sdsl": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", - "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", "dev": true, "funding": { "type": "opencollective", @@ -12257,13 +11850,13 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "optional": true }, @@ -12302,12 +11895,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/jszip/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/jszip/node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -12315,9 +11902,9 @@ "dev": true }, "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -12329,31 +11916,16 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= sha512-/QLqfspz7WJ+TPmzDp5WJOlm2r3j+/12rGo7dG5uwD9vGM5sWg8p251b7Us0p19JqjddJzcYOK2v6FN92nREmg==", "dev": true }, "node_modules/just-extend": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "node_modules/kerberos": { @@ -12388,9 +11960,9 @@ } }, "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -12461,7 +12033,7 @@ "node_modules/koa-morgan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz", - "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==", + "integrity": "sha1-CAUuDODYOdPEMXi5CluzQkvvH5k= sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==", "dev": true, "dependencies": { "morgan": "^1.6.1" @@ -12497,7 +12069,7 @@ "node_modules/koa-send/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -12522,7 +12094,7 @@ "node_modules/koa-send/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "engines": { "node": ">= 0.6" @@ -12569,7 +12141,7 @@ "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -12578,7 +12150,7 @@ "node_modules/koa/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "engines": { "node": ">= 0.6" @@ -12587,7 +12159,7 @@ "node_modules/last-run": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls= sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", "dev": true, "dependencies": { "default-resolution": "^2.0.0", @@ -12600,13 +12172,13 @@ "node_modules/lazy.js": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/lazy.js/-/lazy.js-0.4.3.tgz", - "integrity": "sha512-kHcnVaCZzhv6P+YgC4iRZFw62+biYIcBYU8qqKzJysC7cdKwPgb3WRtcBPyINTSLZwsjyFdBtd97sHbkseTZKw==", + "integrity": "sha1-h/Z6B602VVEh5P/xUg3zG+Znhtg= sha512-kHcnVaCZzhv6P+YgC4iRZFw62+biYIcBYU8qqKzJysC7cdKwPgb3WRtcBPyINTSLZwsjyFdBtd97sHbkseTZKw==", "dev": true }, "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= sha512-/330KFbmC/zKdtZoVDRwvkJ8snrJyBPfoZ39zsJl2O24HOE1CTNiEbeZmHXmjBVxTSSv7JlJEXPYhU83DhA2yg==", "dev": true, "dependencies": { "readable-stream": "^2.0.5" @@ -12615,16 +12187,10 @@ "node": ">= 0.6.3" } }, - "node_modules/lazystream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -12636,25 +12202,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, "dependencies": { "invert-kv": "^1.0.0" @@ -12666,7 +12217,7 @@ "node_modules/lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, "dependencies": { "flush-write-stream": "^1.0.2" @@ -12729,15 +12280,12 @@ } }, "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", "dev": true, "engines": { "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" } }, "node_modules/linkify-it": { @@ -12752,7 +12300,7 @@ "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs= sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -12765,9 +12313,9 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true, "engines": { "node": ">=6.11.5" @@ -12811,31 +12359,31 @@ "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY= sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, "node_modules/lodash.clone": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", "dev": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, "node_modules/lodash.merge": { @@ -12847,13 +12395,13 @@ "node_modules/lodash.some": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", "dev": true }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, "node_modules/log-symbols": { @@ -12882,18 +12430,19 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "dependencies": { - "yallist": "^3.0.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "node_modules/lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", "dev": true, "dependencies": { "es5-ext": "~0.10.2" @@ -12944,7 +12493,7 @@ "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -12953,13 +12502,13 @@ "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, "dependencies": { "object-visit": "^1.0.0" @@ -12988,7 +12537,7 @@ "node_modules/matchdep": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4= sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", "dev": true, "dependencies": { "findup-sync": "^2.0.0", @@ -13024,7 +12573,7 @@ "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -13036,7 +12585,7 @@ "node_modules/matchdep/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -13051,7 +12600,7 @@ "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -13063,7 +12612,7 @@ "node_modules/matchdep/node_modules/findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", "dev": true, "dependencies": { "detect-file": "^1.0.0", @@ -13078,7 +12627,7 @@ "node_modules/matchdep/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -13087,7 +12636,7 @@ "node_modules/matchdep/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "dependencies": { "is-extglob": "^2.1.0" @@ -13099,7 +12648,7 @@ "node_modules/matchdep/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -13111,7 +12660,7 @@ "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -13156,7 +12705,7 @@ "node_modules/matchdep/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "dependencies": { "is-number": "^3.0.0", @@ -13205,29 +12754,26 @@ "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/memoizee": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", - "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, "dependencies": { - "d": "^1.0.2", - "es5-ext": "^0.10.64", + "d": "^1.0.1", + "es5-ext": "^0.10.53", "es6-weak-map": "^2.0.3", "event-emitter": "^0.3.5", "is-promise": "^2.2.2", "lru-queue": "^0.1.0", "next-tick": "^1.1.0", "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.12" } }, "node_modules/memory-fs": { @@ -13243,16 +12789,10 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -13264,25 +12804,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI= sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -13315,19 +12840,11 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -13349,21 +12866,21 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "dependencies": { - "mime-db": "1.52.0" + "mime-db": "1.45.0" }, "engines": { "node": ">= 0.6" @@ -13428,9 +12945,9 @@ } }, "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dependencies": { "yallist": "^4.0.0" }, @@ -13473,31 +12990,32 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", @@ -13505,6 +13023,10 @@ }, "engines": { "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha-junit-reporter": { @@ -13555,23 +13077,14 @@ } }, "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -13590,25 +13103,38 @@ "dev": true }, "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13619,9 +13145,9 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -13630,6 +13156,21 @@ "node": ">=10" } }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -13678,9 +13219,9 @@ } }, "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" @@ -13714,13 +13255,13 @@ "node_modules/morgan/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/morgan/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "dependencies": { "ee-first": "1.1.1" @@ -13730,14 +13271,14 @@ } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multimatch": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", "dev": true, "dependencies": { "array-differ": "^1.0.0", @@ -13752,7 +13293,7 @@ "node_modules/multimatch/node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "dependencies": { "array-uniq": "^1.0.1" @@ -13773,27 +13314,21 @@ "node_modules/mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", "dev": true }, "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true, "optional": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13858,13 +13393,13 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true, "engines": { "node": ">= 0.6" @@ -13889,40 +13424,37 @@ "dev": true }, "node_modules/nise": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", - "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" } }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } + "node_modules/nise/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", - "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", + "node_modules/nise/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.1" + "isarray": "0.0.1" } }, "node_modules/node-abi": { - "version": "3.67.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", - "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", + "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", "dependencies": { "semver": "^7.3.5" }, @@ -13936,9 +13468,9 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -13997,29 +13529,30 @@ } }, "node_modules/node-pty/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "engines": { + "node": "^16 || ^18 || >= 20" + } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "1", + "osenv": "^0.1.4" }, "bin": { "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-package-data": { @@ -14139,7 +13672,7 @@ "node_modules/npm-run-all/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/npm-run-all/node_modules/cross-spawn": { @@ -14161,7 +13694,7 @@ "node_modules/npm-run-all/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -14170,7 +13703,7 @@ "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { "node": ">=4" @@ -14188,7 +13721,7 @@ "node_modules/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -14200,7 +13733,7 @@ "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14231,9 +13764,9 @@ } }, "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "dependencies": { "boolbase": "^1.0.0" @@ -14245,7 +13778,7 @@ "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14254,7 +13787,7 @@ "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14263,7 +13796,7 @@ "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw= sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, "dependencies": { "copy-descriptor": "^0.1.0", @@ -14277,7 +13810,7 @@ "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" @@ -14286,23 +13819,59 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -14335,7 +13904,7 @@ "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, "dependencies": { "isobject": "^3.0.0" @@ -14345,14 +13914,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", "object-keys": "^1.1.1" }, "engines": { @@ -14365,7 +13934,7 @@ "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, "dependencies": { "array-each": "^1.0.1", @@ -14380,7 +13949,7 @@ "node_modules/object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dev": true, "dependencies": { "for-own": "^1.0.0", @@ -14393,7 +13962,7 @@ "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "dependencies": { "isobject": "^3.0.1" @@ -14405,7 +13974,7 @@ "node_modules/object.reduce": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", "dev": true, "dependencies": { "for-own": "^1.0.0", @@ -14439,7 +14008,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -14462,7 +14031,7 @@ "node_modules/only": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", "dev": true }, "node_modules/open": { @@ -14497,16 +14066,16 @@ "node_modules/opn/node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { "deep-is": "^0.1.3", @@ -14514,7 +14083,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "word-wrap": "^1.2.3" }, "engines": { "node": ">= 0.8.0" @@ -14544,9 +14113,9 @@ } }, "node_modules/ora/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" @@ -14613,22 +14182,16 @@ "node_modules/ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", "dev": true, "dependencies": { "readable-stream": "^2.0.1" } }, - "node_modules/ordered-read-streams/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/ordered-read-streams/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -14640,25 +14203,25 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/ordered-read-streams/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "node_modules/ordered-read-streams/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M= sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=0.10.0" } }, "node_modules/os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, "dependencies": { "lcid": "^1.0.0" @@ -14670,16 +14233,27 @@ "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "node_modules/p-all": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-all/-/p-all-1.0.0.tgz", - "integrity": "sha512-OtbznqfGjQT+i89LK9C9YPh1G8d6n8xgsJ8yRVXrx6PRXrlOthNJhP+dHxrPopty8fugYb1DodpwrzP7z0Mtvw==", + "integrity": "sha1-k731OlWiOCH9+pi0F0qZv38x340= sha512-OtbznqfGjQT+i89LK9C9YPh1G8d6n8xgsJ8yRVXrx6PRXrlOthNJhP+dHxrPopty8fugYb1DodpwrzP7z0Mtvw==", "dev": true, "dependencies": { "p-map": "^1.0.0" @@ -14772,7 +14346,7 @@ "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "dependencies": { "is-absolute": "^1.0.0", @@ -14786,7 +14360,7 @@ "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "dependencies": { "error-ex": "^1.3.1", @@ -14808,7 +14382,7 @@ "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14826,7 +14400,7 @@ "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14841,7 +14415,7 @@ "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true }, "node_modules/path-exists": { @@ -14856,7 +14430,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14865,7 +14439,7 @@ "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "dev": true }, "node_modules/path-key": { @@ -14886,7 +14460,7 @@ "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, "dependencies": { "path-root-regex": "^0.1.0" @@ -14898,7 +14472,7 @@ "node_modules/path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14921,10 +14495,13 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } }, "node_modules/path-to-regexp": { "version": "6.3.0", @@ -14944,7 +14521,7 @@ "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, "dependencies": { "through": "~2.3" @@ -14961,16 +14538,10 @@ "through2": "^2.0.3" } }, - "node_modules/peek-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/peek-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -14982,21 +14553,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/peek-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/peek-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/peek-stream/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -15010,12 +14566,12 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/picomatch": { @@ -15044,7 +14600,7 @@ "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" @@ -15053,7 +14609,7 @@ "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -15062,7 +14618,7 @@ "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "dependencies": { "pinkie": "^2.0.0" @@ -15136,12 +14692,12 @@ } }, "node_modules/playwright": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.1.tgz", - "integrity": "sha512-SUEKi6947IqYbKxRiqnbUobVZY4bF1uu+ZnZNJX9DfU1tlf2UhWfvVjLf01pQx9URsOr18bFVUKXmanYWhbfkw==", + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.1.tgz", + "integrity": "sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==", "dev": true, "dependencies": { - "playwright-core": "1.47.1" + "playwright-core": "1.46.1" }, "bin": { "playwright": "cli.js" @@ -15154,9 +14710,9 @@ } }, "node_modules/playwright-core": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.1.tgz", - "integrity": "sha512-i1iyJdLftqtt51mEk6AhYFaAJCDx0xQ/O5NU8EKaWFgMjItPVma542Nh/Aq8aLCjIJSzjaiEQGW/nyqLkGF1OQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz", + "integrity": "sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -15165,32 +14721,38 @@ "node": ">=18" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/playwright/node_modules/playwright-core": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.46.1.tgz", + "integrity": "sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "bin": { + "playwright-core": "cli.js" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=18" } }, "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "dev": true, "dependencies": { - "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" + "xmlbuilder": "^9.0.7" }, "engines": { - "node": ">=10.4.0" + "node": ">=6" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/plugin-error": { @@ -15223,25 +14785,16 @@ "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -15259,8 +14812,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -15283,14 +14836,14 @@ } }, "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.2.tgz", + "integrity": "sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.22.2", "caniuse-api": "^3.0.0", - "colord": "^2.9.3", + "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15301,12 +14854,12 @@ } }, "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.2.tgz", + "integrity": "sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.22.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15317,9 +14870,9 @@ } }, "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.1.tgz", + "integrity": "sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg==", "dev": true, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15329,9 +14882,9 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.1.tgz", + "integrity": "sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==", "dev": true, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15341,9 +14894,9 @@ } }, "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.1.tgz", + "integrity": "sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==", "dev": true, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15353,9 +14906,9 @@ } }, "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.1.tgz", + "integrity": "sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA==", "dev": true, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15365,13 +14918,13 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz", + "integrity": "sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" + "stylehacks": "^6.0.2" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15381,15 +14934,15 @@ } }, "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.3.tgz", + "integrity": "sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.22.2", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" + "cssnano-utils": "^4.0.1", + "postcss-selector-parser": "^6.0.15" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15399,9 +14952,9 @@ } }, "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.1.tgz", + "integrity": "sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15414,13 +14967,13 @@ } }, "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.1.tgz", + "integrity": "sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w==", "dev": true, "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", + "colord": "^2.9.1", + "cssnano-utils": "^4.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15431,13 +14984,13 @@ } }, "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.2.tgz", + "integrity": "sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", + "browserslist": "^4.22.2", + "cssnano-utils": "^4.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15448,12 +15001,12 @@ } }, "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.2.tgz", + "integrity": "sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.16" + "postcss-selector-parser": "^6.0.15" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15463,9 +15016,9 @@ } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" @@ -15475,9 +15028,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -15492,9 +15045,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -15522,9 +15075,9 @@ } }, "node_modules/postcss-nesting": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz", - "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.2.tgz", + "integrity": "sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==", "dev": true, "funding": [ { @@ -15537,9 +15090,8 @@ } ], "dependencies": { - "@csstools/selector-resolve-nested": "^1.1.0", - "@csstools/selector-specificity": "^3.1.1", - "postcss-selector-parser": "^6.1.0" + "@csstools/selector-specificity": "^3.0.1", + "postcss-selector-parser": "^6.0.13" }, "engines": { "node": "^14 || ^16 || >=18" @@ -15549,9 +15101,9 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.1.tgz", + "integrity": "sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg==", "dev": true, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15561,9 +15113,9 @@ } }, "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.1.tgz", + "integrity": "sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15576,9 +15128,9 @@ } }, "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.1.tgz", + "integrity": "sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15591,9 +15143,9 @@ } }, "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.1.tgz", + "integrity": "sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15606,9 +15158,9 @@ } }, "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.1.tgz", + "integrity": "sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15621,9 +15173,9 @@ } }, "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.1.tgz", + "integrity": "sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15636,12 +15188,12 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.2.tgz", + "integrity": "sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.22.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15652,9 +15204,9 @@ } }, "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.1.tgz", + "integrity": "sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15667,9 +15219,9 @@ } }, "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.1.tgz", + "integrity": "sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15682,12 +15234,12 @@ } }, "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.1.tgz", + "integrity": "sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA==", "dev": true, "dependencies": { - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^4.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15698,12 +15250,12 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.2.tgz", + "integrity": "sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.22.2", "caniuse-api": "^3.0.0" }, "engines": { @@ -15714,9 +15266,9 @@ } }, "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.1.tgz", + "integrity": "sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -15729,9 +15281,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -15742,9 +15294,9 @@ } }, "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.2.tgz", + "integrity": "sha512-IH5R9SjkTkh0kfFOQDImyy1+mTCb+E830+9SV1O+AaDcoHTvfsvt6WwJeo7KwcHbFnevZVCsXhDmjFiGVuwqFQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", @@ -15819,9 +15371,9 @@ "dev": true }, "node_modules/postcss-svgo/node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", + "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", @@ -15844,12 +15396,12 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.2.tgz", + "integrity": "sha512-8IZGQ94nechdG7Y9Sh9FlIY2b4uS8/k8kdKRX040XHsS3B6d1HrJAkXrBSsSu4SuARruSsUjW3nlSw8BHkaAYQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.16" + "postcss-selector-parser": "^6.0.15" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15864,6 +15416,24 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -15895,9 +15465,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/prebuild-install/node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -15941,12 +15511,21 @@ "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, "engines": { "node": ">= 0.8" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI= sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -15956,7 +15535,7 @@ "node_modules/progress": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", "dev": true, "engines": { "node": ">=0.4.0" @@ -15965,7 +15544,7 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, "node_modules/proxy-from-env": { @@ -15976,7 +15555,7 @@ "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY= sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, "node_modules/pseudo-localization": { @@ -16007,10 +15586,22 @@ "node": ">=4.2.0" } }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM= sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE= sha512-0l9Rf87wCGXiNCxHxjixpBTPa0iLYFp6an+fwXp7Yz6Fxyhdo7YiBsV76yqzwajT/2+XjKdiCaCDVIcvyEHqCA==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -16038,15 +15629,6 @@ "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", @@ -16056,35 +15638,21 @@ "node": ">=6" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", - "integrity": "sha512-z3XqdkYJ/YVQuAAoAKLcePEk2BZDMZR2jv2hTrpQb0K5M0dUbiwADr48N1F63M4ChD/GwPc/LeaA9VC5dJFfTA==", + "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU= sha512-z3XqdkYJ/YVQuAAoAKLcePEk2BZDMZR2jv2hTrpQb0K5M0dUbiwADr48N1F63M4ChD/GwPc/LeaA9VC5dJFfTA==", "dev": true, "dependencies": { "inherits": "~2.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", @@ -16129,21 +15697,21 @@ "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/rcedit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.2.tgz", - "integrity": "sha512-z2ypB4gbINhI6wVe0JJMmdpmOpmNc4g90sE6/6JSuch5kYnjfz9CxvVPqqhShgR6GIkmtW3W2UlfiXhWljA0Fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.0.tgz", + "integrity": "sha512-JkXJ0IrUcdupLoIx6gE4YcFaMVSGtu7kQf4NJoDJUnfBZGuATmJ2Yal2v55KTltp+WV8dGr7A0RtOzx6jmtM6Q==", "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "dependencies": { "load-json-file": "^4.0.0", @@ -16157,7 +15725,7 @@ "node_modules/read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "dependencies": { "find-up": "^1.0.0", @@ -16170,7 +15738,7 @@ "node_modules/read-pkg-up/node_modules/find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "dependencies": { "path-exists": "^2.0.0", @@ -16183,7 +15751,7 @@ "node_modules/read-pkg-up/node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -16199,7 +15767,7 @@ "node_modules/read-pkg-up/node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "dependencies": { "error-ex": "^1.2.0" @@ -16211,7 +15779,7 @@ "node_modules/read-pkg-up/node_modules/path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, "dependencies": { "pinkie-promise": "^2.0.0" @@ -16223,7 +15791,7 @@ "node_modules/read-pkg-up/node_modules/path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -16246,7 +15814,7 @@ "node_modules/read-pkg-up/node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, "dependencies": { "load-json-file": "^1.0.0", @@ -16260,7 +15828,7 @@ "node_modules/read-pkg-up/node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, "dependencies": { "is-utf8": "^0.2.0" @@ -16282,9 +15850,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16309,7 +15877,7 @@ "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -16331,24 +15899,6 @@ "node": ">=0.10.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -16374,7 +15924,7 @@ "node_modules/remove-bom-stream": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", "dev": true, "dependencies": { "remove-bom-buffer": "^3.0.0", @@ -16385,16 +15935,10 @@ "node": ">= 0.10" } }, - "node_modules/remove-bom-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/remove-bom-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -16406,21 +15950,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/remove-bom-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/remove-bom-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/remove-bom-stream/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -16434,13 +15963,13 @@ "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8= sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true, "engines": { "node": ">=0.10.0" @@ -16449,7 +15978,7 @@ "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc= sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, "engines": { "node": ">=0.10" @@ -16467,7 +15996,7 @@ "node_modules/replace-homedir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", "dev": true, "dependencies": { "homedir-polyfill": "^1.0.1", @@ -16492,22 +16021,16 @@ "node_modules/replacestream/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/replacestream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/replacestream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -16519,25 +16042,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/replacestream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/replacestream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I= sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -16558,13 +16066,19 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -16605,7 +16119,7 @@ "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "dependencies": { "expand-tilde": "^2.0.0", @@ -16627,7 +16141,7 @@ "node_modules/resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, "dependencies": { "value-or-function": "^3.0.0" @@ -16639,7 +16153,7 @@ "node_modules/resolve-path": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, "dependencies": { "http-errors": "~1.6.2", @@ -16652,7 +16166,7 @@ "node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -16661,7 +16175,7 @@ "node_modules/resolve-path/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "dependencies": { "depd": "~1.1.2", @@ -16676,7 +16190,7 @@ "node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "node_modules/resolve-path/node_modules/setprototypeof": { @@ -16688,7 +16202,7 @@ "node_modules/resolve-path/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "engines": { "node": ">= 0.6" @@ -16697,7 +16211,7 @@ "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, @@ -16730,9 +16244,9 @@ } }, "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "node_modules/ret": { @@ -16755,9 +16269,9 @@ } }, "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { @@ -16768,16 +16282,16 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -16816,9 +16330,9 @@ } }, "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true, "funding": [ { @@ -16833,15 +16347,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } + ] }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", "dev": true, "dependencies": { "tslib": "^1.9.0" @@ -16856,69 +16367,20 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4= sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, "dependencies": { "ret": "~0.1.10" } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -16926,21 +16388,21 @@ "dev": true }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", + "ajv": "^8.8.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "ajv-keywords": "^5.0.0" }, "engines": { "node": ">= 12.13.0" @@ -16951,21 +16413,33 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", + "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -16973,9 +16447,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -16986,14 +16460,14 @@ "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w= sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "optional": true }, "node_modules/semver-greatest-satisfied-range": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els= sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", "dev": true, "dependencies": { "sver-compat": "^1.5.0" @@ -17032,9 +16506,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -17043,7 +16517,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc= sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "node_modules/set-function-length": { @@ -17063,21 +16537,6 @@ "node": ">= 0.4" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -17096,7 +16555,7 @@ "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -17108,7 +16567,7 @@ "node_modules/set-value/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -17181,31 +16640,16 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", + "dev": true }, "node_modules/signal-exit": { "version": "4.1.0", @@ -17282,12 +16726,21 @@ } }, "node_modules/sinon-test": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.6.tgz", - "integrity": "sha512-3jBJGf61sS2EN3M+YuIiIbeutKrubP6SFolceTcJrubG+4s+zq3rey/y0huSEwU2ECKOcyCs7EkzANnwqHWPjA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.3.tgz", + "integrity": "sha512-jBDvPVW2z8uAoiud3Nqc6+e8+WX6UTB1gPQuYXK00mSnp9m/JYyeLdBjLlqbnk1DVmsgRCAHSoXYPNLHp0t56Q==", "dev": true, "peerDependencies": { - "sinon": ">= 2.x" + "sinon": "2.x - 13.x" + } + }, + "node_modules/sinon/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" } }, "node_modules/sinon/node_modules/has-flag": { @@ -17358,13 +16811,13 @@ "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, "engines": { "node": ">=4" @@ -17415,7 +16868,7 @@ "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY= sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { "is-descriptor": "^1.0.0" @@ -17439,7 +16892,7 @@ "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -17460,7 +16913,7 @@ "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" @@ -17472,7 +16925,7 @@ "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { "is-extendable": "^0.1.0" @@ -17481,40 +16934,91 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "engines": { + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { "node": ">=0.10.0" } }, @@ -17568,9 +17072,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -17590,7 +17094,7 @@ "node_modules/source-map-support": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz", - "integrity": "sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==", + "integrity": "sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8= sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==", "dev": true, "dependencies": { "source-map": "0.1.32" @@ -17599,7 +17103,7 @@ "node_modules/source-map-support/node_modules/source-map": { "version": "0.1.32", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", "dev": true, "dependencies": { "amdefine": ">=0.0.4" @@ -17609,9 +17113,9 @@ } }, "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= sha512-liJwHPI9x9d9w5WSIjM58MqGmmb7XzNqwdUA3kSBQ4lmDngexlKwawGzK3J1mKXi6+sysoMDlpVyZh9sv5vRfw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, @@ -17625,35 +17129,25 @@ } }, "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -17661,15 +17155,15 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, "dependencies": { "through": "2" @@ -17705,7 +17199,7 @@ "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true, "engines": { "node": "*" @@ -17714,7 +17208,7 @@ "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, "dependencies": { "define-property": "^0.2.5", @@ -17727,7 +17221,7 @@ "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" @@ -17736,17 +17230,68 @@ "node": ">=0.10.0" } }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, "node_modules/statuses": { @@ -17811,7 +17356,7 @@ "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, "dependencies": { "duplexer": "~0.1.1" @@ -17824,39 +17369,33 @@ "dev": true }, "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, "dependencies": { "any-promise": "^1.1.0" } }, "node_modules/streamfilter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", - "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", + "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M= sha512-IHuyNEAPs3pi2ABhJ7Dbjza9Gc6Nq7NDvx14tsKw4h4cMUz4YoLOON6nghUvIZVO4NW4qvYUoED1kd6/bipTVQ==", "dev": true, "dependencies": { "readable-stream": "^2.0.2" } }, - "node_modules/streamfilter/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/streamfilter/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -17868,34 +17407,19 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/streamfilter/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/streamfilter/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/streamifier": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", - "integrity": "sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==", + "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8= sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==", "dev": true, "engines": { "node": ">=0.10" } }, "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "dependencies": { "fast-fifo": "^1.3.2", @@ -17907,11 +17431,11 @@ } }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, "node_modules/string-width": { @@ -17953,9 +17477,9 @@ "dev": true }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" @@ -17980,33 +17504,14 @@ } }, "node_modules/string.prototype.padend": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", - "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", + "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" }, "engines": { "node": ">= 0.4" @@ -18016,31 +17521,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18074,7 +17574,7 @@ "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" @@ -18083,7 +17583,7 @@ "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "dev": true, "engines": { "node": ">=0.10.0" @@ -18101,16 +17601,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.2.tgz", + "integrity": "sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==", "dev": true, "engines": { "node": ">= 12.13.0" @@ -18124,13 +17618,13 @@ } }, "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.2.tgz", + "integrity": "sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg==", "dev": true, "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" + "browserslist": "^4.22.2", + "postcss-selector-parser": "^6.0.15" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -18178,7 +17672,7 @@ "node_modules/sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", "dev": true, "dependencies": { "es6-iterator": "^2.0.1", @@ -18216,14 +17710,14 @@ } }, "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, @@ -18231,10 +17725,22 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/svgo/node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", @@ -18246,9 +17752,9 @@ } }, "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -18275,9 +17781,9 @@ } }, "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -18316,7 +17822,7 @@ "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, "engines": { "node": ">=4" @@ -18349,9 +17855,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true, "engines": { "node": ">=6" @@ -18388,9 +17894,9 @@ } }, "node_modules/tar-fs/node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -18398,9 +17904,9 @@ } }, "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "dev": true, "dependencies": { "b4a": "^1.6.4", @@ -18439,44 +17945,10 @@ "node": ">=6.0.0" } }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/terser": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz", - "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.0.tgz", + "integrity": "sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -18525,15 +17997,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -18552,6 +18015,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -18604,9 +18076,9 @@ } }, "node_modules/text-decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", - "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", "dev": true, "dependencies": { "b4a": "^1.6.4" @@ -18615,19 +18087,19 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "node_modules/textextensions": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz", - "integrity": "sha512-jm9KjEWiDmtGLBrTqXEduGzlYTTlPaoDKdq5YRQhD0rYjo61ZNTYKZ/x5J4ajPSBH9wIYY5qm9GNG5otIKjtOA==", + "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI= sha512-jm9KjEWiDmtGLBrTqXEduGzlYTTlPaoDKdq5YRQhD0rYjo61ZNTYKZ/x5J4ajPSBH9wIYY5qm9GNG5otIKjtOA==", "dev": true }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/through2": { @@ -18650,16 +18122,10 @@ "xtend": "~4.0.0" } }, - "node_modules/through2-filter/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/through2-filter/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -18671,21 +18137,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/through2-filter/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2-filter/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/through2-filter/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -18699,41 +18150,26 @@ "node_modules/time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/timers-ext": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", - "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", "dev": true, "dependencies": { - "es5-ext": "^0.10.64", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" + "es5-ext": "~0.10.46", + "next-tick": "1" } }, "node_modules/to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, "dependencies": { "is-absolute": "^1.0.0", @@ -18746,7 +18182,7 @@ "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "engines": { "node": ">=4" @@ -18755,7 +18191,7 @@ "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -18767,7 +18203,7 @@ "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5" @@ -18805,7 +18241,7 @@ "node_modules/to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", "dev": true, "dependencies": { "through2": "^2.0.3" @@ -18814,16 +18250,10 @@ "node": ">= 0.10" } }, - "node_modules/to-through/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/to-through/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -18835,21 +18265,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/to-through/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/to-through/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/to-through/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -18869,10 +18284,43 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/tree-kill": { @@ -18897,16 +18345,15 @@ } }, "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" + "semver": "^7.3.4" }, "engines": { "node": ">=12.0.0" @@ -18916,29 +18363,20 @@ "webpack": "^5.0.0" } }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/ts-morph": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-22.0.0.tgz", - "integrity": "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-19.0.0.tgz", + "integrity": "sha512-D6qcpiJdn46tUqV45vr5UGM2dnIEuTGNxVhg0sk5NX11orcouwj6i1bMqZIz2mZTZB1Hcgy7C3oEVhAT+f6mbQ==", "dev": true, "dependencies": { - "@ts-morph/common": "~0.23.0", - "code-block-writer": "^13.0.1" + "@ts-morph/common": "~0.20.0", + "code-block-writer": "^12.0.0" } }, "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -19006,16 +18444,16 @@ } }, "node_modules/tsec/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -19027,9 +18465,9 @@ } }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/tsscmp": { @@ -19057,15 +18495,24 @@ } }, "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -19074,9 +18521,9 @@ } }, "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, "node_modules/type-check": { @@ -19125,89 +18572,16 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "node_modules/typescript": { - "version": "5.7.0-dev.20240918", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.0-dev.20240918.tgz", - "integrity": "sha512-+6MNe6JoSuFM5x/Rn79X8ZOUqjCUiElv6y7ZWjekE79nQU7I0UzIlPpkvw/m83Q62tTHGg3tqRIKhj0lCblZIw==", + "version": "5.7.0-dev.20240903", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.0-dev.20240903.tgz", + "integrity": "sha512-XTUc5uVwBbLlT0v3FqTx9sDN1MLQnT5mwSC3JefCrcKT6Zv+rPcQE7HLKM9IsrNiM1tiaQvamJTgVH0S+UMH2A==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -19232,25 +18606,10 @@ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo= sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -19280,7 +18639,7 @@ "node_modules/undertaker-registry": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", "dev": true, "engines": { "node": ">= 0.10" @@ -19289,13 +18648,13 @@ "node_modules/undertaker/node_modules/fast-levenshtein": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk= sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", "dev": true }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "node_modules/union-value": { @@ -19316,7 +18675,7 @@ "node_modules/union-value/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -19333,9 +18692,9 @@ } }, "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", "dev": true }, "node_modules/universalify": { @@ -19349,7 +18708,7 @@ "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, "dependencies": { "has-value": "^0.3.1", @@ -19362,7 +18721,7 @@ "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, "dependencies": { "get-value": "^2.0.3", @@ -19376,7 +18735,7 @@ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, "dependencies": { "isarray": "1.0.0" @@ -19388,18 +18747,12 @@ "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E= sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -19411,9 +18764,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -19430,8 +18783,8 @@ } ], "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -19449,13 +18802,32 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -19481,7 +18853,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "9.0.1", @@ -19510,9 +18882,9 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -19535,408 +18907,100 @@ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dev": true, - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/vinyl-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/vinyl-fs/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/vinyl-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/vinyl-fs/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vinyl-sourcemap/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vscode-nls-dev": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-3.3.2.tgz", - "integrity": "sha512-/YJY/LegZ0jsWFd8BforDmXpwWKprM7L3rL0kLEvjQxOJw6qtmnoUJorLIv0ZXjebeyhI3mc8hjmQr479ykLIQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.2.3", - "clone": "^2.1.1", - "event-stream": "^3.3.4", - "fancy-log": "^1.3.3", - "glob": "^7.1.2", - "iconv-lite": "^0.4.19", - "is": "^3.2.1", - "source-map": "^0.6.1", - "typescript": "^3.9.5", - "vinyl": "^2.1.0", - "xml2js": "^0.4.19", - "yargs": "^13.2.4" - }, - "bin": { - "vscl": "lib/vscl.js" - } - }, - "node_modules/vscode-nls-dev/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vscode-nls-dev/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/vscode-nls-dev/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/vscode-nls-dev/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/vscode-nls-dev/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vscode-nls-dev/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/vscode-nls-dev/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" + "homedir-polyfill": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vscode-nls-dev/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/vscode-nls-dev/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/vscode-nls-dev/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/vinyl-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/vscode-nls-dev/node_modules/replace-ext": { + "node_modules/vinyl-fs/node_modules/replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", @@ -19945,49 +19009,20 @@ "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/vscode-nls-dev/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw= sha512-M5D/ZRG7KC3ETrV7iA/GNF/lznml4dZ7ggwtYbqM/B+0INyNTjCdFhw4TqMq//PtNbPpceE7wOqKqK5YfUThPA==", "dev": true, "dependencies": { "clone": "^2.1.1", @@ -20001,74 +19036,60 @@ "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "remove-trailing-separator": "^1.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/vscode-nls-dev/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "node_modules/vinyl-sourcemap/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, "engines": { - "node": ">=4.0" - } - }, - "node_modules/vscode-nls-dev/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/vscode-nls-dev/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "node": ">= 0.10" } }, - "node_modules/vscode-nls-dev/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "node_modules/vinyl-sourcemap/node_modules/vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw= sha512-M5D/ZRG7KC3ETrV7iA/GNF/lznml4dZ7ggwtYbqM/B+0INyNTjCdFhw4TqMq//PtNbPpceE7wOqKqK5YfUThPA==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/vscode-oniguruma": { @@ -20099,9 +19120,9 @@ "dev": true }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -20120,7 +19141,7 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/webpack": { @@ -20245,13 +19266,12 @@ } }, "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", - "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -20339,15 +19359,6 @@ "node": ">= 0.10" } }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -20391,7 +19402,7 @@ "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0= sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", @@ -20413,39 +19424,23 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -20455,31 +19450,31 @@ } }, "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, "node_modules/windows-foreground-love": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/windows-foreground-love/-/windows-foreground-love-0.5.0.tgz", "integrity": "sha512-yjBwmKEmQBDk3Z7yg/U9hizGWat8C6Pe4MQWl5bN6mvPU81Bt6HV2k/6mGlK3ETJLW1hCLhYx2wcGh+ykUUCyA==", - "devOptional": true, - "hasInstallScript": true + "hasInstallScript": true, + "optional": true }, "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "node_modules/wrap-ansi": { @@ -20560,7 +19555,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write": { "version": "1.0.3", @@ -20575,37 +19570,17 @@ } }, "node_modules/write/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -20634,15 +19609,6 @@ "node": ">=4.0" } }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "engines": { - "node": ">=8.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -20662,9 +19628,9 @@ } }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, "node_modules/yargs": { @@ -20748,9 +19714,9 @@ } }, "node_modules/yauzl": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz", - "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.1.tgz", + "integrity": "sha512-MPxA7oN5cvGV0wzfkeHKF2/+Q4TkMpHSWGRy/96I4Cozljmx0ph91+Muxh6HegEtDC4GftJ8qYDE51vghFiEYA==", "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" @@ -20760,17 +19726,17 @@ } }, "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz", + "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE= sha512-cIUrm3/81iF/BzuyORI7ppz1vGHAhA62JYzAFFC+rwJ2jQF1LcYxY9UXx4XyUXojkCnol0SvPuc+Toc7FO4W8g==", "dependencies": { "buffer-crc32": "~0.2.3" } }, "node_modules/ylru": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", - "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", "dev": true, "engines": { "node": ">= 4.0.0" diff --git a/package.json b/package.json index 2080e4d0c..2ccf4d57d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.94.0", - "distro": "1f99a7e25e381bc566d839c0259770ef5735d8ed", + "distro": "ffcc24343ac46468a625666e5b9e673971dd1a1f", "author": { "name": "Microsoft Corporation" }, @@ -11,11 +11,11 @@ "scripts": { "test": "echo Please run any of the test scripts from the scripts folder.", "test-browser": "npx playwright install && node test/unit/browser/index.js", - "test-browser-esm": "npx playwright install && node test/unit/browser/index.esm.js", + "test-browser-amd": "npx playwright install && node test/unit/browser/index.amd.js", "test-browser-no-install": "node test/unit/browser/index.js", - "test-browser-esm-no-install": "node test/unit/browser/index.esm.js", - "test-node": "mocha test/unit/node/index.js --delay --ui=tdd --timeout=5000 --exit", - "test-node-esm": "mocha test/unit/node/index.mjs --delay --ui=tdd --timeout=5000 --exit", + "test-browser-amd-no-install": "node test/unit/browser/index.amd.js", + "test-node": "mocha test/unit/node/index.mjs --delay --ui=tdd --timeout=5000 --exit", + "test-node-amd": "mocha test/unit/node/index.amd.js --delay --ui=tdd --timeout=5000 --exit", "test-extension": "vscode-test", "preinstall": "node build/npm/preinstall.js", "postinstall": "node build/npm/postinstall.js", @@ -28,11 +28,11 @@ "kill-watch-webd": "deemon --kill npm run watch-web", "restart-watchd": "deemon --restart npm run watch", "restart-watch-webd": "deemon --restart npm run watch-web", - "watch-client": "node ./node_modules/gulp/bin/gulp.js watch-client", - "watch-client-amd": "node ./node_modules/gulp/bin/gulp.js watch-client-amd", + "watch-client": "node --max-old-space-size=8192 ./node_modules/gulp/bin/gulp.js watch-client", + "watch-client-amd": "node --max-old-space-size=8192 ./node_modules/gulp/bin/gulp.js watch-client-amd", "watch-clientd": "deemon npm run watch-client", "kill-watch-clientd": "deemon --kill npm run watch-client", - "watch-extensions": "node ./node_modules/gulp/bin/gulp.js watch-extensions watch-extension-media", + "watch-extensions": "node --max-old-space-size=8192 ./node_modules/gulp/bin/gulp.js watch-extensions watch-extension-media", "watch-extensionsd": "deemon npm run watch-extensions", "kill-watch-extensionsd": "deemon --kill npm run watch-extensions", "precommit": "node build/hygiene.js", @@ -83,19 +83,19 @@ "@vscode/spdlog": "^0.15.0", "@vscode/sqlite3": "5.1.6-vscode", "@vscode/sudo-prompt": "9.3.1", - "@vscode/tree-sitter-wasm": "^0.0.2", + "@vscode/tree-sitter-wasm": "^0.0.4", "@vscode/vscode-languagedetection": "1.0.21", "@vscode/windows-mutex": "^0.5.0", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "0.2.0-beta.35", - "@xterm/addon-image": "0.9.0-beta.52", - "@xterm/addon-search": "0.16.0-beta.52", - "@xterm/addon-serialize": "0.14.0-beta.52", - "@xterm/addon-unicode11": "0.9.0-beta.52", - "@xterm/addon-webgl": "0.19.0-beta.52", - "@xterm/headless": "5.6.0-beta.52", - "@xterm/xterm": "5.6.0-beta.52", + "@xterm/addon-clipboard": "^0.2.0-beta.47", + "@xterm/addon-image": "^0.9.0-beta.64", + "@xterm/addon-search": "^0.16.0-beta.64", + "@xterm/addon-serialize": "^0.14.0-beta.64", + "@xterm/addon-unicode11": "^0.9.0-beta.64", + "@xterm/addon-webgl": "^0.19.0-beta.64", + "@xterm/headless": "^5.6.0-beta.64", + "@xterm/xterm": "^5.6.0-beta.64", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "jschardet": "3.1.3", @@ -143,9 +143,10 @@ "@vscode/telemetry-extractor": "^1.10.2", "@vscode/test-cli": "^0.0.6", "@vscode/test-electron": "^2.4.0", - "@vscode/test-web": "^0.0.56", + "@vscode/test-web": "^0.0.60", "@vscode/v8-heap-parser": "^0.1.0", "@vscode/vscode-perf": "^0.0.14", + "@webgpu/types": "^0.1.44", "ansi-colors": "^3.2.3", "asar": "^3.0.3", "chromium-pickle-js": "^0.2.0", @@ -155,7 +156,7 @@ "cssnano": "^6.0.3", "debounce": "^1.0.0", "deemon": "^1.8.0", - "electron": "30.4.0", + "electron": "30.5.1", "eslint": "8.36.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-jsdoc": "^46.5.0", @@ -193,12 +194,12 @@ "mime": "^1.4.1", "minimatch": "^3.0.4", "minimist": "^1.2.6", - "mkdirp": "^1.0.4", "mocha": "^10.2.0", "mocha-junit-reporter": "^2.2.1", "mocha-multi-reporters": "^1.5.1", "npm-run-all": "^4.1.5", "opn": "^6.0.0", + "os-browserify": "^0.3.0", "p-all": "^1.0.0", "path-browserify": "^1.0.1", "postcss": "^8.4.33", @@ -215,10 +216,9 @@ "ts-node": "^10.9.1", "tsec": "0.2.7", "tslib": "^2.6.3", - "typescript": "^5.7.0-dev.20240826", + "typescript": "^5.7.0-dev.20240903", "util": "^0.12.4", - "vscode-nls-dev": "^3.3.1", - "webpack": "^5.91.0", + "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-stream": "^7.0.0", "xml2js": "^0.5.0", diff --git a/product.json b/product.json index 156d20807..a35f197cd 100644 --- a/product.json +++ b/product.json @@ -50,8 +50,8 @@ }, { "name": "ms-vscode.js-debug", - "version": "1.92.0", - "sha256": "e5d0a74728292423631f79d076ecb2bc129f9637bcbc2529e48a0fd53baa69cc", + "version": "1.93.0", + "sha256": "9339cb8e6b77f554df54d79e71f533279cb76b0f9b04c207f633bfd507442b6a", "repo": "https://github.com/microsoft/vscode-js-debug", "metadata": { "id": "25629058-ddac-4e17-abba-74678e126c5d", diff --git a/product_original.js b/product_original.js deleted file mode 100644 index bc8699195..000000000 --- a/product_original.js +++ /dev/null @@ -1,84 +0,0 @@ -// { -// "nameShort": "Code - OSS", -// "nameLong": "Code - OSS", -// "applicationName": "code-oss", -// "dataFolderName": ".vscode-oss", -// "win32MutexName": "vscodeoss", -// "licenseName": "MIT", -// "licenseUrl": "https://github.com/microsoft/vscode/blob/main/LICENSE.txt", -// "serverLicenseUrl": "https://github.com/microsoft/vscode/blob/main/LICENSE.txt", -// "serverGreeting": [], -// "serverLicense": [], -// "serverLicensePrompt": "", -// "serverApplicationName": "code-server-oss", -// "serverDataFolderName": ".vscode-server-oss", -// "tunnelApplicationName": "code-tunnel-oss", -// "win32DirName": "Microsoft Code OSS", -// "win32NameVersion": "Microsoft Code OSS", -// "win32RegValueName": "CodeOSS", -// "win32x64AppId": "{{D77B7E06-80BA-4137-BCF4-654B95CCEBC5}", -// "win32arm64AppId": "{{D1ACE434-89C5-48D1-88D3-E2991DF85475}", -// "win32x64UserAppId": "{{CC6B787D-37A0-49E8-AE24-8559A032BE0C}", -// "win32arm64UserAppId": "{{3AEBF0C8-F733-4AD4-BADE-FDB816D53D7B}", -// "win32AppUserModelId": "Microsoft.CodeOSS", -// "win32ShellNameShort": "C&ode - OSS", -// "win32TunnelServiceMutex": "vscodeoss-tunnelservice", -// "win32TunnelMutex": "vscodeoss-tunnel", -// "darwinBundleIdentifier": "com.visualstudio.code.oss", -// "linuxIconName": "code-oss", -// "licenseFileName": "LICENSE.txt", -// "reportIssueUrl": "https://github.com/microsoft/vscode/issues/new", -// "nodejsRepository": "https://nodejs.org", -// "urlProtocol": "code-oss", -// "webviewContentExternalBaseUrlTemplate": "https://{{uuid}}.vscode-cdn.net/insider/ef65ac1ba57f57f2a3961bfe94aa20481caca4c6/out/vs/workbench/contrib/webview/browser/pre/", -// "builtInExtensions": [ -// { -// "name": "ms-vscode.js-debug-companion", -// "version": "1.1.3", -// "sha256": "7380a890787452f14b2db7835dfa94de538caf358ebc263f9d46dd68ac52de93", -// "repo": "https://github.com/microsoft/vscode-js-debug-companion", -// "metadata": { -// "id": "99cb0b7f-7354-4278-b8da-6cc79972169d", -// "publisherId": { -// "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", -// "publisherName": "ms-vscode", -// "displayName": "Microsoft", -// "flags": "verified" -// }, -// "publisherDisplayName": "Microsoft" -// } -// }, -// { -// "name": "ms-vscode.js-debug", -// "version": "1.92.0", -// "sha256": "e5d0a74728292423631f79d076ecb2bc129f9637bcbc2529e48a0fd53baa69cc", -// "repo": "https://github.com/microsoft/vscode-js-debug", -// "metadata": { -// "id": "25629058-ddac-4e17-abba-74678e126c5d", -// "publisherId": { -// "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", -// "publisherName": "ms-vscode", -// "displayName": "Microsoft", -// "flags": "verified" -// }, -// "publisherDisplayName": "Microsoft" -// } -// }, -// { -// "name": "ms-vscode.vscode-js-profile-table", -// "version": "1.0.9", -// "sha256": "3b62ee4276a2bbea3fe230f94b1d5edd915b05966090ea56f882e1e0ab53e1a6", -// "repo": "https://github.com/microsoft/vscode-js-profile-visualizer", -// "metadata": { -// "id": "7e52b41b-71ad-457b-ab7e-0620f1fc4feb", -// "publisherId": { -// "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", -// "publisherName": "ms-vscode", -// "displayName": "Microsoft", -// "flags": "verified" -// }, -// "publisherDisplayName": "Microsoft" -// } -// } -// ] -// } diff --git a/remote/.npmrc b/remote/.npmrc index 4e4b93fab..d6905a0c0 100644 --- a/remote/.npmrc +++ b/remote/.npmrc @@ -1,6 +1,6 @@ disturl="https://nodejs.org/dist" -target="20.15.1" -ms_build_id="287145" +target="20.16.0" +ms_build_id="289487" runtime="node" build_from_source="true" legacy-peer-deps="true" diff --git a/remote/package-lock.json b/remote/package-lock.json index 9a7f72ec4..0fa0d8e40 100644 --- a/remote/package-lock.json +++ b/remote/package-lock.json @@ -16,18 +16,18 @@ "@vscode/proxy-agent": "^0.23.0", "@vscode/ripgrep": "^1.15.9", "@vscode/spdlog": "^0.15.0", - "@vscode/tree-sitter-wasm": "^0.0.2", + "@vscode/tree-sitter-wasm": "^0.0.4", "@vscode/vscode-languagedetection": "1.0.21", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "0.2.0-beta.35", - "@xterm/addon-image": "0.9.0-beta.52", - "@xterm/addon-search": "0.16.0-beta.52", - "@xterm/addon-serialize": "0.14.0-beta.52", - "@xterm/addon-unicode11": "0.9.0-beta.52", - "@xterm/addon-webgl": "0.19.0-beta.52", - "@xterm/headless": "5.6.0-beta.52", - "@xterm/xterm": "5.6.0-beta.52", + "@xterm/addon-clipboard": "^0.2.0-beta.47", + "@xterm/addon-image": "^0.9.0-beta.64", + "@xterm/addon-search": "^0.16.0-beta.64", + "@xterm/addon-serialize": "^0.14.0-beta.64", + "@xterm/addon-unicode11": "^0.9.0-beta.64", + "@xterm/addon-webgl": "^0.19.0-beta.64", + "@xterm/headless": "^5.6.0-beta.64", + "@xterm/xterm": "^5.6.0-beta.64", "cookie": "^0.4.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", @@ -184,9 +184,9 @@ } }, "node_modules/@vscode/tree-sitter-wasm": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.2.tgz", - "integrity": "sha512-N57MR/kt4jR0H/TXeDsVYeJmvvUiK7avow0fjy+/EeKcyNBJcM2BFhj4XOAaaMbhGsOcIeSvJFouRWctXI7sKw==" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.4.tgz", + "integrity": "sha512-vOONG3Zxsh1I4JOA48WdQ5KiXjJAdfMvYTuHbW7b27tGtRqsPLY5WZyTwLXc5uujKHyhG3LJXE9poxRZSxTIiA==" }, "node_modules/@vscode/vscode-languagedetection": { "version": "1.0.21", @@ -196,6 +196,19 @@ "vscode-languagedetection": "cli/index.js" } }, + "node_modules/@vscode/windows-ca-certs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@vscode/windows-ca-certs/-/windows-ca-certs-0.3.1.tgz", + "integrity": "sha512-1B6hZAsqg125wuMsXiKIFkBgKx/J7YR4RT/ccYGkWAToPU9MVa40PRe+evLFUmLPH6NmPohEPlCzZLbqgvHCcQ==", + "hasInstallScript": true, + "optional": true, + "os": [ + "win32" + ], + "dependencies": { + "node-addon-api": "^3.0.2" + } + }, "node_modules/@vscode/windows-process-tree": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@vscode/windows-process-tree/-/windows-process-tree-0.6.0.tgz", @@ -220,65 +233,65 @@ "hasInstallScript": true }, "node_modules/@xterm/addon-clipboard": { - "version": "0.2.0-beta.35", - "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.35.tgz", - "integrity": "sha512-B8AulZEjsfvSEaLKp8oyRu7yJ7FJb5R3W0wpPbI/rOMVAuBwxDJsz0CxLvJUXnJX7OJwd5cjnyTnEcXJfMJycA==", + "version": "0.2.0-beta.47", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.47.tgz", + "integrity": "sha512-mJHV1770gwVckj4mgjdxegt4zLL5WGCoJblTqaLbgEF7xOwsJUzvGk38qsZ4ZpdTa2ti76H0pkb1CpZGrXL9qg==", "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { - "@xterm/xterm": "^5.4.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-image": { - "version": "0.9.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.52.tgz", - "integrity": "sha512-1fWhnCIvLeO0aQ3CKqkTB9ye1bUsocpgFdDOgmwfW4XhLXpvu+QcyMGQMtWJHt8JWBN2w0cgR9eyfKw7orN+9Q==", + "version": "0.9.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.64.tgz", + "integrity": "sha512-1Aqqytx/z/Khecf5xrO++f/p5EQX4uG87TbbAmE0OQys/JgKMnNggDzqon5bpHboimLfQiFPw716NbTqMphjfw==", "peerDependencies": { - "@xterm/xterm": "^5.2.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-search": { - "version": "0.16.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.52.tgz", - "integrity": "sha512-ZLVh0O91dcjxCjrU3vadl+40Z/mBnYXhKNA58oU/dGWFtFxtUB9SaZoOUtBvnfDpQIloYAK6raC2AfVsKHzD8A==", + "version": "0.16.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.64.tgz", + "integrity": "sha512-vUsvTkEOFJwv8nVtiiGr/vTMeQhu62VkUejY2h1+yZagnVEusGVPU1JYoqBTLu5HM4cFiTGsJYXFI/0apASXYA==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-serialize": { - "version": "0.14.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.52.tgz", - "integrity": "sha512-1+ckKya1OURFmELH1Tjjoxz3Gnj78Dxj+NNRrEunfINkvyzaY+n8wT28FQxIlU5gJq+a0VGvlhNgTkMwgOn6aw==", + "version": "0.14.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.64.tgz", + "integrity": "sha512-0AqVveTV3Pr9Lp+beJYOP5WuRvIrPSDGAK24da7BRGcLIKVq8pok1FdlM9jPeUbkX0DKo6Ortm77qeb2Z+n8+A==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-unicode11": { - "version": "0.9.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.52.tgz", - "integrity": "sha512-5tZR/8c+vf0YNSYS6B9pEv8gyWWZpPYOf/BRQDkTGtYAnFf04MzggVE/U7tKUXGDzBhzwTPODq5qPNTX1xpGgw==", + "version": "0.9.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.64.tgz", + "integrity": "sha512-3+PKu+DXFq32xlsYfnI058/T8dTY2tQhRpJLP2CNR/jVWk5uBkVO0dBV0Srqj5QOAlAhzzZuS6TbsVRXORptqw==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-webgl": { - "version": "0.19.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.52.tgz", - "integrity": "sha512-kbPO9iR166xW8qgRkYmKX2Vu0kQHXpxYLQ9jY/01e5kvNrI/rqRDV63FIq14ncOi7N3+dmTuUkjvbg8anCpuIw==", + "version": "0.19.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.64.tgz", + "integrity": "sha512-cxTkMPAXPQAZnWqahNu7ff9mbJvM1sQqKnZWiFZAHTsZXym4oa3KCB4pjH4didSyYkhkPY/17E8I0UOUpvv0Yw==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/headless": { - "version": "5.6.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.6.0-beta.52.tgz", - "integrity": "sha512-f4QITQwotblRLW6YOHnK801wHJWfFDnjD7jUEwaaAXtSp32xH3jguWnMP9/uuQX45q9ndjDjnm1t5aXX7gwqBQ==" + "version": "5.6.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.6.0-beta.64.tgz", + "integrity": "sha512-my08kgH2K3CBEtBg/o8lamtD6BYNBv03Akq747Lajv0QzOiwan7B4r2xdbA6i9sovB+MdjFs0XP1ksc3EpKakg==" }, "node_modules/@xterm/xterm": { - "version": "5.6.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.52.tgz", - "integrity": "sha512-aZh8IBdZPb2N4NjTt/fQ/C90z/PM3Zxkfoqhmlsp5+v3Otmyw5kd3DepeHK1SFW/pz0/xdj4KFgX8t8Y2lDRbA==" + "version": "5.6.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.64.tgz", + "integrity": "sha512-iSKS6tQTFpoN5y487eptlxkUT0jqK5hrvtFQMLugMcQdn7gCUCiFGa4Z1RdqKYSGvAypka+b9gMKPrKWZ7Q3yQ==" }, "node_modules/agent-base": { "version": "7.1.1", @@ -649,11 +662,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { diff --git a/remote/package.json b/remote/package.json index 7a33b7e50..98776776c 100644 --- a/remote/package.json +++ b/remote/package.json @@ -11,18 +11,18 @@ "@vscode/proxy-agent": "^0.23.0", "@vscode/ripgrep": "^1.15.9", "@vscode/spdlog": "^0.15.0", - "@vscode/tree-sitter-wasm": "^0.0.2", + "@vscode/tree-sitter-wasm": "^0.0.4", "@vscode/vscode-languagedetection": "1.0.21", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "0.2.0-beta.35", - "@xterm/addon-image": "0.9.0-beta.52", - "@xterm/addon-search": "0.16.0-beta.52", - "@xterm/addon-serialize": "0.14.0-beta.52", - "@xterm/addon-unicode11": "0.9.0-beta.52", - "@xterm/addon-webgl": "0.19.0-beta.52", - "@xterm/headless": "5.6.0-beta.52", - "@xterm/xterm": "5.6.0-beta.52", + "@xterm/addon-clipboard": "^0.2.0-beta.47", + "@xterm/addon-image": "^0.9.0-beta.64", + "@xterm/addon-search": "^0.16.0-beta.64", + "@xterm/addon-serialize": "^0.14.0-beta.64", + "@xterm/addon-unicode11": "^0.9.0-beta.64", + "@xterm/addon-webgl": "^0.19.0-beta.64", + "@xterm/headless": "^5.6.0-beta.64", + "@xterm/xterm": "^5.6.0-beta.64", "cookie": "^0.4.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", diff --git a/remote/web/.npmrc b/remote/web/.npmrc new file mode 100644 index 000000000..a9c577096 --- /dev/null +++ b/remote/web/.npmrc @@ -0,0 +1,2 @@ +legacy-peer-deps="true" +timeout=180000 diff --git a/remote/web/package-lock.json b/remote/web/package-lock.json index 678ee5758..b971ca265 100644 --- a/remote/web/package-lock.json +++ b/remote/web/package-lock.json @@ -11,15 +11,15 @@ "@microsoft/1ds-core-js": "^3.2.13", "@microsoft/1ds-post-js": "^3.2.13", "@vscode/iconv-lite-umd": "0.7.0", - "@vscode/tree-sitter-wasm": "^0.0.2", + "@vscode/tree-sitter-wasm": "^0.0.4", "@vscode/vscode-languagedetection": "1.0.21", - "@xterm/addon-clipboard": "0.2.0-beta.35", - "@xterm/addon-image": "0.9.0-beta.52", - "@xterm/addon-search": "0.16.0-beta.52", - "@xterm/addon-serialize": "0.14.0-beta.52", - "@xterm/addon-unicode11": "0.9.0-beta.52", - "@xterm/addon-webgl": "0.19.0-beta.52", - "@xterm/xterm": "5.6.0-beta.52", + "@xterm/addon-clipboard": "^0.2.0-beta.47", + "@xterm/addon-image": "^0.9.0-beta.64", + "@xterm/addon-search": "^0.16.0-beta.64", + "@xterm/addon-serialize": "^0.14.0-beta.64", + "@xterm/addon-unicode11": "^0.9.0-beta.64", + "@xterm/addon-webgl": "^0.19.0-beta.64", + "@xterm/xterm": "^5.6.0-beta.64", "jschardet": "3.1.3", "tas-client-umd": "0.2.0", "vscode-oniguruma": "1.7.0", @@ -74,9 +74,9 @@ "integrity": "sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==" }, "node_modules/@vscode/tree-sitter-wasm": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.2.tgz", - "integrity": "sha512-N57MR/kt4jR0H/TXeDsVYeJmvvUiK7avow0fjy+/EeKcyNBJcM2BFhj4XOAaaMbhGsOcIeSvJFouRWctXI7sKw==" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.4.tgz", + "integrity": "sha512-vOONG3Zxsh1I4JOA48WdQ5KiXjJAdfMvYTuHbW7b27tGtRqsPLY5WZyTwLXc5uujKHyhG3LJXE9poxRZSxTIiA==" }, "node_modules/@vscode/vscode-languagedetection": { "version": "1.0.21", @@ -87,60 +87,60 @@ } }, "node_modules/@xterm/addon-clipboard": { - "version": "0.2.0-beta.35", - "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.35.tgz", - "integrity": "sha512-B8AulZEjsfvSEaLKp8oyRu7yJ7FJb5R3W0wpPbI/rOMVAuBwxDJsz0CxLvJUXnJX7OJwd5cjnyTnEcXJfMJycA==", + "version": "0.2.0-beta.47", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.47.tgz", + "integrity": "sha512-mJHV1770gwVckj4mgjdxegt4zLL5WGCoJblTqaLbgEF7xOwsJUzvGk38qsZ4ZpdTa2ti76H0pkb1CpZGrXL9qg==", "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { - "@xterm/xterm": "^5.4.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-image": { - "version": "0.9.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.52.tgz", - "integrity": "sha512-1fWhnCIvLeO0aQ3CKqkTB9ye1bUsocpgFdDOgmwfW4XhLXpvu+QcyMGQMtWJHt8JWBN2w0cgR9eyfKw7orN+9Q==", + "version": "0.9.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.64.tgz", + "integrity": "sha512-1Aqqytx/z/Khecf5xrO++f/p5EQX4uG87TbbAmE0OQys/JgKMnNggDzqon5bpHboimLfQiFPw716NbTqMphjfw==", "peerDependencies": { - "@xterm/xterm": "^5.2.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-search": { - "version": "0.16.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.52.tgz", - "integrity": "sha512-ZLVh0O91dcjxCjrU3vadl+40Z/mBnYXhKNA58oU/dGWFtFxtUB9SaZoOUtBvnfDpQIloYAK6raC2AfVsKHzD8A==", + "version": "0.16.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.64.tgz", + "integrity": "sha512-vUsvTkEOFJwv8nVtiiGr/vTMeQhu62VkUejY2h1+yZagnVEusGVPU1JYoqBTLu5HM4cFiTGsJYXFI/0apASXYA==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-serialize": { - "version": "0.14.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.52.tgz", - "integrity": "sha512-1+ckKya1OURFmELH1Tjjoxz3Gnj78Dxj+NNRrEunfINkvyzaY+n8wT28FQxIlU5gJq+a0VGvlhNgTkMwgOn6aw==", + "version": "0.14.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.64.tgz", + "integrity": "sha512-0AqVveTV3Pr9Lp+beJYOP5WuRvIrPSDGAK24da7BRGcLIKVq8pok1FdlM9jPeUbkX0DKo6Ortm77qeb2Z+n8+A==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-unicode11": { - "version": "0.9.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.52.tgz", - "integrity": "sha512-5tZR/8c+vf0YNSYS6B9pEv8gyWWZpPYOf/BRQDkTGtYAnFf04MzggVE/U7tKUXGDzBhzwTPODq5qPNTX1xpGgw==", + "version": "0.9.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.64.tgz", + "integrity": "sha512-3+PKu+DXFq32xlsYfnI058/T8dTY2tQhRpJLP2CNR/jVWk5uBkVO0dBV0Srqj5QOAlAhzzZuS6TbsVRXORptqw==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/addon-webgl": { - "version": "0.19.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.52.tgz", - "integrity": "sha512-kbPO9iR166xW8qgRkYmKX2Vu0kQHXpxYLQ9jY/01e5kvNrI/rqRDV63FIq14ncOi7N3+dmTuUkjvbg8anCpuIw==", + "version": "0.19.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.64.tgz", + "integrity": "sha512-cxTkMPAXPQAZnWqahNu7ff9mbJvM1sQqKnZWiFZAHTsZXym4oa3KCB4pjH4didSyYkhkPY/17E8I0UOUpvv0Yw==", "peerDependencies": { - "@xterm/xterm": "^5.0.0" + "@xterm/xterm": "^5.6.0-beta.64" } }, "node_modules/@xterm/xterm": { - "version": "5.6.0-beta.52", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.52.tgz", - "integrity": "sha512-aZh8IBdZPb2N4NjTt/fQ/C90z/PM3Zxkfoqhmlsp5+v3Otmyw5kd3DepeHK1SFW/pz0/xdj4KFgX8t8Y2lDRbA==" + "version": "5.6.0-beta.64", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.64.tgz", + "integrity": "sha512-iSKS6tQTFpoN5y487eptlxkUT0jqK5hrvtFQMLugMcQdn7gCUCiFGa4Z1RdqKYSGvAypka+b9gMKPrKWZ7Q3yQ==" }, "node_modules/js-base64": { "version": "3.7.7", diff --git a/remote/web/package.json b/remote/web/package.json index 1c75df5eb..27be6a503 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -6,15 +6,15 @@ "@microsoft/1ds-core-js": "^3.2.13", "@microsoft/1ds-post-js": "^3.2.13", "@vscode/iconv-lite-umd": "0.7.0", - "@vscode/tree-sitter-wasm": "^0.0.2", + "@vscode/tree-sitter-wasm": "^0.0.4", "@vscode/vscode-languagedetection": "1.0.21", - "@xterm/addon-clipboard": "0.2.0-beta.35", - "@xterm/addon-image": "0.9.0-beta.52", - "@xterm/addon-search": "0.16.0-beta.52", - "@xterm/addon-serialize": "0.14.0-beta.52", - "@xterm/addon-unicode11": "0.9.0-beta.52", - "@xterm/addon-webgl": "0.19.0-beta.52", - "@xterm/xterm": "5.6.0-beta.52", + "@xterm/addon-clipboard": "^0.2.0-beta.47", + "@xterm/addon-image": "^0.9.0-beta.64", + "@xterm/addon-search": "^0.16.0-beta.64", + "@xterm/addon-serialize": "^0.14.0-beta.64", + "@xterm/addon-unicode11": "^0.9.0-beta.64", + "@xterm/addon-webgl": "^0.19.0-beta.64", + "@xterm/xterm": "^5.6.0-beta.64", "jschardet": "3.1.3", "tas-client-umd": "0.2.0", "vscode-oniguruma": "1.7.0", diff --git a/resources/linux/rpm/code.spec.template b/resources/linux/rpm/code.spec.template index c9e57db95..a73bc02c3 100644 --- a/resources/linux/rpm/code.spec.template +++ b/resources/linux/rpm/code.spec.template @@ -19,6 +19,7 @@ Visual Studio Code is a new choice of tool that combines the simplicity of a cod # Don't generate build_id links to prevent conflicts when installing multiple # versions of VS Code alongside each other (e.g. `code` and `code-insiders`) %define _build_id_links none +%define __strip @@STRIP@@ %install # Destination directories diff --git a/resources/server/bin/helpers/check-requirements-linux.sh b/resources/server/bin/helpers/check-requirements-linux.sh index 31a618fbd..8ef07a2fb 100644 --- a/resources/server/bin/helpers/check-requirements-linux.sh +++ b/resources/server/bin/helpers/check-requirements-linux.sh @@ -125,6 +125,9 @@ elif [ -z "$(ldd --version 2>&1 | grep 'musl libc')" ]; then elif [ -f /usr/lib/libc.so.6 ]; then # Typical path libc_path='/usr/lib/libc.so.6' + elif [ -f /lib64/libc.so.6 ]; then + # Typical path (OpenSUSE) + libc_path='/lib64/libc.so.6' elif [ -f /usr/lib64/libc.so.6 ]; then # Typical path libc_path='/usr/lib64/libc.so.6' diff --git a/scripts/code-web.js b/scripts/code-web.js index 42fa65aaa..f2dc1ff04 100644 --- a/scripts/code-web.js +++ b/scripts/code-web.js @@ -74,7 +74,7 @@ async function main() { openSystemBrowser = true; } - if (fs.existsSync(path.join(APP_ROOT, 'src2')) || fs.existsSync(path.join(APP_ROOT, 'out-build', 'esm'))) { + if (!fs.existsSync(path.join(APP_ROOT, 'src2')) && !fs.existsSync(path.join(APP_ROOT, 'out-build', 'amd'))) { serverArgs.push('--esm'); } diff --git a/scripts/test-esm.bat b/scripts/test-amd.bat similarity index 91% rename from scripts/test-esm.bat rename to scripts/test-amd.bat index faeff7900..4ecd8a434 100644 --- a/scripts/test-esm.bat +++ b/scripts/test-amd.bat @@ -17,7 +17,7 @@ if %errorlevel% neq 0 node .\node_modules\gulp\bin\gulp.js electron :: Run tests set ELECTRON_ENABLE_LOGGING=1 -%CODE% .\test\unit\electron\index.esm.js --crash-reporter-directory=%~dp0\..\.build\crashes %* +%CODE% .\test\unit\electron\index.amd.js --crash-reporter-directory=%~dp0\..\.build\crashes %* popd diff --git a/scripts/test-esm.sh b/scripts/test-amd.sh similarity index 89% rename from scripts/test-esm.sh rename to scripts/test-amd.sh index 8546cdff1..be45e0903 100644 --- a/scripts/test-esm.sh +++ b/scripts/test-amd.sh @@ -34,10 +34,10 @@ if [[ "$OSTYPE" == "darwin"* ]]; then cd $ROOT ; ulimit -n 4096 ; \ ELECTRON_ENABLE_LOGGING=1 \ "$CODE" \ - test/unit/electron/index.esm.js --crash-reporter-directory=$VSCODECRASHDIR "$@" + test/unit/electron/index.amd.js --crash-reporter-directory=$VSCODECRASHDIR "$@" else cd $ROOT ; \ ELECTRON_ENABLE_LOGGING=1 \ "$CODE" \ - test/unit/electron/index.esm.js --crash-reporter-directory=$VSCODECRASHDIR $LINUX_EXTRA_ARGS "$@" + test/unit/electron/index.amd.js --crash-reporter-directory=$VSCODECRASHDIR $LINUX_EXTRA_ARGS "$@" fi diff --git a/scripts/test-integration-esm.bat b/scripts/test-integration-amd.bat similarity index 98% rename from scripts/test-integration-esm.bat rename to scripts/test-integration-amd.bat index de8f694e0..96231152b 100644 --- a/scripts/test-integration-esm.bat +++ b/scripts/test-integration-amd.bat @@ -29,7 +29,7 @@ echo Storing log files into '%VSCODELOGSDIR%'. echo. echo ### node.js integration tests -call .\scripts\test-esm.bat --runGlob **\*.integrationTest.js %* +call .\scripts\test-amd.bat --runGlob **\*.integrationTest.js %* if %errorlevel% neq 0 exit /b %errorlevel% diff --git a/scripts/test-integration-esm.sh b/scripts/test-integration-amd.sh similarity index 98% rename from scripts/test-integration-esm.sh rename to scripts/test-integration-amd.sh index 11f120045..70f50cc30 100644 --- a/scripts/test-integration-esm.sh +++ b/scripts/test-integration-amd.sh @@ -39,7 +39,7 @@ echo "Storing log files into '$VSCODELOGSDIR'." echo echo "### node.js integration tests" echo -./scripts/test-esm.sh --runGlob **/*.integrationTest.js "$@" +./scripts/test-amd.sh --runGlob **/*.integrationTest.js "$@" # Tests in the extension host diff --git a/src/bootstrap-amd.js b/src/bootstrap-amd.js index 344557c10..9c8daf557 100644 --- a/src/bootstrap-amd.js +++ b/src/bootstrap-amd.js @@ -12,54 +12,47 @@ */ // ESM-uncomment-begin -// import * as path from 'path'; -// import * as fs from 'fs'; -// import { fileURLToPath } from 'url'; -// import { createRequire, register } from 'node:module'; -// import { product, pkg } from './bootstrap-meta.js'; -// import './bootstrap-node.js'; -// import * as performance from './vs/base/common/performance.js'; -// -// const require = createRequire(import.meta.url); -// /** @type any */ -// const module = { exports: {} }; -// const __dirname = path.dirname(fileURLToPath(import.meta.url)); -// -// // Install a hook to module resolution to map 'fs' to 'original-fs' -// if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { -// const jsCode = ` -// export async function resolve(specifier, context, nextResolve) { -// if (specifier === 'fs') { -// return { -// format: 'builtin', -// shortCircuit: true, -// url: 'node:original-fs' -// }; -// } - -// // Defer to the next hook in the chain, which would be the -// // Node.js default resolve if this is the last user-specified loader. -// return nextResolve(specifier, context); -// }`; -// register(`data:text/javascript;base64,${Buffer.from(jsCode).toString('base64')}`, import.meta.url); -// } -// ESM-uncomment-end - -// Store the node.js require function in a variable -// before loading our AMD loader to avoid issues -// when this file is bundled with other files. -const nodeRequire = require; +import * as path from 'path'; +import * as fs from 'fs'; +import { fileURLToPath } from 'url'; +import { createRequire, register } from 'node:module'; +import { product, pkg } from './bootstrap-meta.js'; +import './bootstrap-node.js'; +import * as performance from './vs/base/common/performance.js'; + +/** @ts-ignore */ +const require = createRequire(import.meta.url); +/** @type any */ +const module = { exports: {} }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// Install a hook to module resolution to map 'fs' to 'original-fs' +if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { + const jsCode = ` + export async function resolve(specifier, context, nextResolve) { + if (specifier === 'fs') { + return { + format: 'builtin', + shortCircuit: true, + url: 'node:original-fs' + }; + } -// VSCODE_GLOBALS: node_modules -globalThis._VSCODE_NODE_MODULES = new Proxy(Object.create(null), { get: (_target, mod) => nodeRequire(String(mod)) }); + // Defer to the next hook in the chain, which would be the + // Node.js default resolve if this is the last user-specified loader. + return nextResolve(specifier, context); + }`; + register(`data:text/javascript;base64,${Buffer.from(jsCode).toString('base64')}`, import.meta.url); +} +// ESM-uncomment-end // VSCODE_GLOBALS: package/product.json /** @type Partial */ // ESM-comment-begin -globalThis._VSCODE_PRODUCT_JSON = require('./bootstrap-meta').product; +// globalThis._VSCODE_PRODUCT_JSON = require('./bootstrap-meta').product; // ESM-comment-end // ESM-uncomment-begin -// globalThis._VSCODE_PRODUCT_JSON = { ...product }; +globalThis._VSCODE_PRODUCT_JSON = { ...product }; // ESM-uncomment-end if (process.env['VSCODE_DEV']) { // Patch product overrides when running out of sources @@ -70,19 +63,19 @@ if (process.env['VSCODE_DEV']) { } catch (error) { /* ignore */ } } // ESM-comment-begin -globalThis._VSCODE_PACKAGE_JSON = require('./bootstrap-meta').pkg; +// globalThis._VSCODE_PACKAGE_JSON = require('./bootstrap-meta').pkg; // ESM-comment-end // ESM-uncomment-begin -// globalThis._VSCODE_PACKAGE_JSON = { ...pkg }; +globalThis._VSCODE_PACKAGE_JSON = { ...pkg }; // ESM-uncomment-end // VSCODE_GLOBALS: file root of all resources globalThis._VSCODE_FILE_ROOT = __dirname; // ESM-comment-begin -const bootstrapNode = require('./bootstrap-node'); -const performance = require(`./vs/base/common/performance`); -const fs = require('fs'); +// const bootstrapNode = require('./bootstrap-node'); +// const performance = require(`./vs/base/common/performance`); +// const fs = require('fs'); // ESM-comment-end //#region NLS helpers @@ -169,47 +162,6 @@ async function doSetupNLS() { //#region Loader Config // ESM-uncomment-begin -// /** -// * @param {string=} entrypoint -// * @param {(value: any) => void} [onLoad] -// * @param {(err: Error) => void} [onError] -// */ -// module.exports.load = function (entrypoint, onLoad, onError) { -// if (!entrypoint) { -// return; -// } - -// entrypoint = `./${entrypoint}.js`; - -// onLoad = onLoad || function () { }; -// onError = onError || function (err) { console.error(err); }; - -// setupNLS().then(() => { -// performance.mark(`code/fork/willLoadCode`); -// import(entrypoint).then(onLoad, onError); -// }); -// }; -// ESM-uncomment-end - -// ESM-comment-begin -// @ts-ignore -const loader = require('./vs/loader'); - -loader.config({ - baseUrl: bootstrapNode.fileUriFromPath(__dirname, { isWindows: process.platform === 'win32' }), - catchError: true, - nodeRequire, - amdModulesPattern: /^vs\//, - recordStats: true -}); - -// Running in Electron -if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { - loader.define('fs', ['original-fs'], function (/** @type {import('fs')} */originalFS) { - return originalFS; // replace the patched electron fs with the original node fs for all AMD code - }); -} - /** * @param {string=} entrypoint * @param {(value: any) => void} [onLoad] @@ -220,28 +172,69 @@ module.exports.load = function (entrypoint, onLoad, onError) { return; } - // code cache config - if (process.env['VSCODE_CODE_CACHE_PATH']) { - loader.config({ - nodeCachedData: { - path: process.env['VSCODE_CODE_CACHE_PATH'], - seed: entrypoint - } - }); - } + entrypoint = `./${entrypoint}.js`; onLoad = onLoad || function () { }; onError = onError || function (err) { console.error(err); }; setupNLS().then(() => { - performance.mark('code/fork/willLoadCode'); - loader([entrypoint], onLoad, onError); + performance.mark(`code/fork/willLoadCode`); + import(entrypoint).then(onLoad, onError); }); }; +// ESM-uncomment-end + +// ESM-comment-begin +// // @ts-ignore +// const loader = require('./vs/loader'); +// +// loader.config({ +// baseUrl: bootstrapNode.fileUriFromPath(__dirname, { isWindows: process.platform === 'win32' }), +// catchError: true, +// nodeRequire, +// amdModulesPattern: /^vs\//, +// recordStats: true +// }); +// +// // Running in Electron +// if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { +// loader.define('fs', ['original-fs'], function (/** @type {import('fs')} */originalFS) { +// return originalFS; // replace the patched electron fs with the original node fs for all AMD code +// }); +// } +// +// /** +// * @param {string=} entrypoint +// * @param {(value: any) => void} [onLoad] +// * @param {(err: Error) => void} [onError] +// */ +// module.exports.load = function (entrypoint, onLoad, onError) { +// if (!entrypoint) { +// return; +// } +// +// // code cache config +// if (process.env['VSCODE_CODE_CACHE_PATH']) { +// loader.config({ +// nodeCachedData: { +// path: process.env['VSCODE_CODE_CACHE_PATH'], +// seed: entrypoint +// } +// }); +// } +// +// onLoad = onLoad || function () { }; +// onError = onError || function (err) { console.error(err); }; +// +// setupNLS().then(() => { +// performance.mark('code/fork/willLoadCode'); +// loader([entrypoint], onLoad, onError); +// }); +// }; // ESM-comment-end //#endregion // ESM-uncomment-begin -// export const load = module.exports.load; +export const load = module.exports.load; // ESM-uncomment-end diff --git a/src/bootstrap-fork.js b/src/bootstrap-fork.js index e18265497..129517b60 100644 --- a/src/bootstrap-fork.js +++ b/src/bootstrap-fork.js @@ -7,14 +7,14 @@ 'use strict'; // ESM-comment-begin -const performance = require('./vs/base/common/performance'); -const bootstrapNode = require('./bootstrap-node'); -const bootstrapAmd = require('./bootstrap-amd'); +// const performance = require('./vs/base/common/performance'); +// const bootstrapNode = require('./bootstrap-node'); +// const bootstrapAmd = require('./bootstrap-amd'); // ESM-comment-end // ESM-uncomment-begin -// import * as performance from './vs/base/common/performance.js'; -// import * as bootstrapNode from './bootstrap-node.js'; -// import * as bootstrapAmd from './bootstrap-amd.js'; +import * as performance from './vs/base/common/performance.js'; +import * as bootstrapNode from './bootstrap-node.js'; +import * as bootstrapAmd from './bootstrap-amd.js'; // ESM-uncomment-end performance.mark('code/fork/start'); diff --git a/src/bootstrap-meta.js b/src/bootstrap-meta.js index b437ed75c..f9a968c82 100644 --- a/src/bootstrap-meta.js +++ b/src/bootstrap-meta.js @@ -11,11 +11,11 @@ */ // ESM-uncomment-begin -// import { createRequire } from 'node:module'; -// -// const require = createRequire(import.meta.url); -// /** @type any */ -// const module = { exports: {} }; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); +/** @type any */ +const module = { exports: {} }; // ESM-uncomment-end /** @type Partial & { BUILD_INSERT_PRODUCT_CONFIGURATION?: string } */ @@ -36,6 +36,6 @@ module.exports.product = productObj; module.exports.pkg = pkgObj; // ESM-uncomment-begin -// export const product = module.exports.product; -// export const pkg = module.exports.pkg; +export const product = module.exports.product; +export const pkg = module.exports.pkg; // ESM-uncomment-end diff --git a/src/bootstrap-node.js b/src/bootstrap-node.js index 8c9af7d92..d9e8e7e99 100644 --- a/src/bootstrap-node.js +++ b/src/bootstrap-node.js @@ -7,20 +7,21 @@ 'use strict'; // ESM-comment-begin -const path = require('path'); -const fs = require('fs'); -const Module = require('module'); +// const path = require('path'); +// const fs = require('fs'); +// const Module = require('module'); // ESM-comment-end // ESM-uncomment-begin -// import * as path from 'path'; -// import * as fs from 'fs'; -// import { fileURLToPath } from 'url'; -// import { createRequire } from 'node:module'; -// -// const require = createRequire(import.meta.url); -// /** @type any */ -// const module = { exports: {} }; -// const __dirname = path.dirname(fileURLToPath(import.meta.url)); +import * as path from 'path'; +import * as fs from 'fs'; +import { fileURLToPath } from 'url'; +import { createRequire } from 'node:module'; + +/** @ts-ignore */ +const require = createRequire(import.meta.url); +/** @type any */ +const module = { exports: {} }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); // ESM-uncomment-end // increase number of stack frames(from 10, https://github.com/v8/v8/wiki/Stack-Trace-API) @@ -84,29 +85,29 @@ module.exports.devInjectNodeModuleLookupPath = function (injectPath) { const Module = require('node:module'); // ESM-uncomment-begin - // // register a loader hook - // Module.register('./bootstrap-import.js', { parentURL: import.meta.url, data: injectPath }); + // register a loader hook + Module.register('./bootstrap-import.js', { parentURL: import.meta.url, data: injectPath }); // ESM-uncomment-end // ESM-comment-begin - const nodeModulesPath = path.join(__dirname, '../node_modules'); - - // @ts-ignore - const originalResolveLookupPaths = Module._resolveLookupPaths; - - // @ts-ignore - Module._resolveLookupPaths = function (moduleName, parent) { - const paths = originalResolveLookupPaths(moduleName, parent); - if (Array.isArray(paths)) { - for (let i = 0, len = paths.length; i < len; i++) { - if (paths[i] === nodeModulesPath) { - paths.splice(i, 0, injectPath); - break; - } - } - } - - return paths; - }; + // const nodeModulesPath = path.join(__dirname, '../node_modules'); + // + // // @ts-ignore + // const originalResolveLookupPaths = Module._resolveLookupPaths; + // + // // @ts-ignore + // Module._resolveLookupPaths = function (moduleName, parent) { + // const paths = originalResolveLookupPaths(moduleName, parent); + // if (Array.isArray(paths)) { + // for (let i = 0, len = paths.length; i < len; i++) { + // if (paths[i] === nodeModulesPath) { + // paths.splice(i, 0, injectPath); + // break; + // } + // } + // } + // + // return paths; + // }; // ESM-comment-end }; @@ -208,26 +209,26 @@ module.exports.configurePortable = function (product) { */ module.exports.enableASARSupport = function () { // ESM-comment-begin - const NODE_MODULES_PATH = path.join(__dirname, '../node_modules'); - const NODE_MODULES_ASAR_PATH = `${NODE_MODULES_PATH}.asar`; - - // @ts-ignore - const originalResolveLookupPaths = Module._resolveLookupPaths; - - // @ts-ignore - Module._resolveLookupPaths = function (request, parent) { - const paths = originalResolveLookupPaths(request, parent); - if (Array.isArray(paths)) { - for (let i = 0, len = paths.length; i < len; i++) { - if (paths[i] === NODE_MODULES_PATH) { - paths.splice(i, 0, NODE_MODULES_ASAR_PATH); - break; - } - } - } - - return paths; - }; + // const NODE_MODULES_PATH = path.join(__dirname, '../node_modules'); + // const NODE_MODULES_ASAR_PATH = `${NODE_MODULES_PATH}.asar`; + // + // // @ts-ignore + // const originalResolveLookupPaths = Module._resolveLookupPaths; + // + // // @ts-ignore + // Module._resolveLookupPaths = function (request, parent) { + // const paths = originalResolveLookupPaths(request, parent); + // if (Array.isArray(paths)) { + // for (let i = 0, len = paths.length; i < len; i++) { + // if (paths[i] === NODE_MODULES_PATH) { + // paths.splice(i, 0, NODE_MODULES_ASAR_PATH); + // break; + // } + // } + // } + // + // return paths; + // }; // ESM-comment-end }; @@ -270,9 +271,9 @@ module.exports.fileUriFromPath = function (path, config) { //#endregion // ESM-uncomment-begin -// export const devInjectNodeModuleLookupPath = module.exports.devInjectNodeModuleLookupPath; -// export const removeGlobalNodeJsModuleLookupPaths = module.exports.removeGlobalNodeJsModuleLookupPaths; -// export const configurePortable = module.exports.configurePortable; -// export const enableASARSupport = module.exports.enableASARSupport; -// export const fileUriFromPath = module.exports.fileUriFromPath; +export const devInjectNodeModuleLookupPath = module.exports.devInjectNodeModuleLookupPath; +export const removeGlobalNodeJsModuleLookupPaths = module.exports.removeGlobalNodeJsModuleLookupPaths; +export const configurePortable = module.exports.configurePortable; +export const enableASARSupport = module.exports.enableASARSupport; +export const fileUriFromPath = module.exports.fileUriFromPath; // ESM-uncomment-end diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js index 25a4a216b..9b5ed26e6 100644 --- a/src/bootstrap-window.js +++ b/src/bootstrap-window.js @@ -89,130 +89,130 @@ window['MonacoEnvironment'] = {}; // ESM-uncomment-begin - // // Signal before require() - // if (typeof options?.beforeRequire === 'function') { - // options.beforeRequire(configuration); - // } - - // const baseUrl = new URL(`${fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out/`); - // globalThis._VSCODE_FILE_ROOT = baseUrl.toString(); - - // // DEV --------------------------------------------------------------------------------------- - // // DEV: This is for development and enables loading CSS via import-statements via import-maps. - // // DEV: For each CSS modules that we have we defined an entry in the import map that maps to - // // DEV: a blob URL that loads the CSS via a dynamic @import-rule. - // // DEV --------------------------------------------------------------------------------------- - // if (Array.isArray(configuration.cssModules) && configuration.cssModules.length > 0) { - // performance.mark('code/willAddCssLoader'); - - // const style = document.createElement('style'); - // style.type = 'text/css'; - // style.media = 'screen'; - // style.id = 'vscode-css-loading'; - // document.head.appendChild(style); - - // globalThis._VSCODE_CSS_LOAD = function (url) { - // style.textContent += `@import url(${url});\n`; - // }; - - // /** - // * @type { { imports: Record }} - // */ - // const importMap = { imports: {} }; - // for (const cssModule of configuration.cssModules) { - // const cssUrl = new URL(cssModule, baseUrl).href; - // const jsSrc = `globalThis._VSCODE_CSS_LOAD('${cssUrl}');\n`; - // const blob = new Blob([jsSrc], { type: 'application/javascript' }); - // importMap.imports[cssUrl] = URL.createObjectURL(blob); - // } - - // const ttp = window.trustedTypes?.createPolicy('vscode-bootstrapImportMap', { createScript(value) { return value; }, }); - // const importMapSrc = JSON.stringify(importMap, undefined, 2); - // const importMapScript = document.createElement('script'); - // importMapScript.type = 'importmap'; - // importMapScript.setAttribute('nonce', '0c6a828f1297'); - // // @ts-ignore - // importMapScript.textContent = ttp?.createScript(importMapSrc) ?? importMapSrc; - // document.head.appendChild(importMapScript); - - // performance.mark('code/didAddCssLoader'); - // } - - // const result = Promise.all(modulePaths.map(modulePath => { - // if (modulePath.includes('vs/css!')) { - // // ESM/CSS when seeing the old `vs/css!` prefix we use that as a signal to - // // load CSS via a tag - // const cssModule = modulePath.replace('vs/css!', ''); - // const link = document.createElement('link'); - // link.rel = 'stylesheet'; - // link.href = new URL(`${cssModule}.css`, baseUrl).href; - // document.head.appendChild(link); - // return Promise.resolve(); - - // } else { - // // ESM/JS module loading - // return import(new URL(`${modulePath}.js`, baseUrl).href); - // } - // })); - - // result.then((res) => invokeResult(res[0]), onUnexpectedError); - // ESM-uncomment-end + // Signal before require() + if (typeof options?.beforeRequire === 'function') { + options.beforeRequire(configuration); + } - // ESM-comment-begin - /** @type {LoaderConfig} */ - const loaderConfig = { - baseUrl: `${fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out`, - preferScriptTags: true - }; + const baseUrl = new URL(`${fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out/`); + globalThis._VSCODE_FILE_ROOT = baseUrl.toString(); + + // DEV --------------------------------------------------------------------------------------- + // DEV: This is for development and enables loading CSS via import-statements via import-maps. + // DEV: For each CSS modules that we have we defined an entry in the import map that maps to + // DEV: a blob URL that loads the CSS via a dynamic @import-rule. + // DEV --------------------------------------------------------------------------------------- + if (Array.isArray(configuration.cssModules) && configuration.cssModules.length > 0) { + performance.mark('code/willAddCssLoader'); + + const style = document.createElement('style'); + style.type = 'text/css'; + style.media = 'screen'; + style.id = 'vscode-css-loading'; + document.head.appendChild(style); + + globalThis._VSCODE_CSS_LOAD = function (url) { + style.textContent += `@import url(${url});\n`; + }; - // use a trusted types policy when loading via script tags - loaderConfig.trustedTypesPolicy = window.trustedTypes?.createPolicy('amdLoader', { - createScriptURL(value) { - if (value.startsWith(window.location.origin)) { - return value; - } - throw new Error(`Invalid script url: ${value}`); + /** + * @type { { imports: Record }} + */ + const importMap = { imports: {} }; + for (const cssModule of configuration.cssModules) { + const cssUrl = new URL(cssModule, baseUrl).href; + const jsSrc = `globalThis._VSCODE_CSS_LOAD('${cssUrl}');\n`; + const blob = new Blob([jsSrc], { type: 'application/javascript' }); + importMap.imports[cssUrl] = URL.createObjectURL(blob); } - }); - - // Teach the loader the location of the node modules we use in renderers - // This will enable to load these modules via - + diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts index f8875029a..b98867e7a 100644 --- a/src/vs/code/browser/workbench/workbench.ts +++ b/src/vs/code/browser/workbench/workbench.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isStandalone } from 'vs/base/browser/browser'; -import { mainWindow } from 'vs/base/browser/window'; -import { VSBuffer, decodeBase64, encodeBase64 } from 'vs/base/common/buffer'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { parse } from 'vs/base/common/marshalling'; -import { Schemas } from 'vs/base/common/network'; -import { posix } from 'vs/base/common/path'; -import { isEqual } from 'vs/base/common/resources'; -import { ltrim } from 'vs/base/common/strings'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import product from 'vs/platform/product/common/product'; -import { ISecretStorageProvider } from 'vs/platform/secrets/common/secrets'; -import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/window/common/window'; -import type { IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from 'vs/workbench/browser/web.api'; -import { AuthenticationSessionInfo } from 'vs/workbench/services/authentication/browser/authenticationService'; -import type { IURLCallbackProvider } from 'vs/workbench/services/url/browser/urlService'; -import { create } from 'vs/workbench/workbench.web.main'; +import { isStandalone } from '../../../base/browser/browser.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { VSBuffer, decodeBase64, encodeBase64 } from '../../../base/common/buffer.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { parse } from '../../../base/common/marshalling.js'; +import { Schemas } from '../../../base/common/network.js'; +import { posix } from '../../../base/common/path.js'; +import { isEqual } from '../../../base/common/resources.js'; +import { ltrim } from '../../../base/common/strings.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import product from '../../../platform/product/common/product.js'; +import { ISecretStorageProvider } from '../../../platform/secrets/common/secrets.js'; +import { isFolderToOpen, isWorkspaceToOpen } from '../../../platform/window/common/window.js'; +import type { IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from '../../../workbench/browser/web.api.js'; +import { AuthenticationSessionInfo } from '../../../workbench/services/authentication/browser/authenticationService.js'; +import type { IURLCallbackProvider } from '../../../workbench/services/url/browser/urlService.js'; +import { create } from '../../../workbench/workbench.web.main.internal.js'; interface ISecretStorageCrypto { seal(data: string): Promise; diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index ca47f74ba..294295164 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -4,124 +4,122 @@ *--------------------------------------------------------------------------------------------*/ import { app, BrowserWindow, protocol, session, Session, systemPreferences, WebFrameMain } from 'electron'; -import { addUNCHostToAllowlist, disableUNCAccessRestrictions } from 'vs/base/node/unc'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; +import { addUNCHostToAllowlist, disableUNCAccessRestrictions } from '../../base/node/unc.js'; +import { validatedIpcMain } from '../../base/parts/ipc/electron-main/ipcMain.js'; import { hostname, release } from 'os'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { parse } from 'vs/base/common/jsonc'; -import { getPathLabel } from 'vs/base/common/labels'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas, VSCODE_AUTHORITY } from 'vs/base/common/network'; -import { join, posix } from 'vs/base/common/path'; -import { IProcessEnvironment, isLinux, isLinuxSnap, isMacintosh, isWindows, OS } from 'vs/base/common/platform'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { registerContextMenuListener } from 'vs/base/parts/contextmenu/electron-main/contextmenu'; -import { getDelayedChannel, ProxyChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc'; -import { Server as ElectronIPCServer } from 'vs/base/parts/ipc/electron-main/ipc.electron'; -import { Client as MessagePortClient } from 'vs/base/parts/ipc/electron-main/ipc.mp'; -import { Server as NodeIPCServer } from 'vs/base/parts/ipc/node/ipc.net'; -import { IProxyAuthService, ProxyAuthService } from 'vs/platform/native/electron-main/auth'; -import { localize } from 'vs/nls'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { BackupMainService } from 'vs/platform/backup/electron-main/backupMainService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ElectronExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/electron-main/extensionHostDebugIpc'; -import { IDiagnosticsService } from 'vs/platform/diagnostics/common/diagnostics'; -import { DiagnosticsMainService, IDiagnosticsMainService } from 'vs/platform/diagnostics/electron-main/diagnosticsMainService'; -import { DialogMainService, IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { IEncryptionMainService } from 'vs/platform/encryption/common/encryptionService'; -import { EncryptionMainService } from 'vs/platform/encryption/electron-main/encryptionMainService'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { isLaunchedFromCli } from 'vs/platform/environment/node/argvHelper'; -import { getResolvedShellEnv } from 'vs/platform/shell/node/shellEnv'; -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 { 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'; -import { DiskFileSystemProviderChannel } from 'vs/platform/files/electron-main/diskFileSystemProviderServer'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IProcessMainService, IIssueMainService } from 'vs/platform/issue/common/issue'; -import { IssueMainService } from 'vs/platform/issue/electron-main/issueMainService'; -import { ProcessMainService } from 'vs/platform/issue/electron-main/processMainService'; -import { IKeyboardLayoutMainService, KeyboardLayoutMainService } from 'vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService'; -import { ILaunchMainService, LaunchMainService } from 'vs/platform/launch/electron-main/launchMainService'; -import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILoggerService, ILogService } from 'vs/platform/log/common/log'; -import { IMenubarMainService, MenubarMainService } from 'vs/platform/menubar/electron-main/menubarMainService'; -import { INativeHostMainService, NativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { getRemoteAuthority } from 'vs/platform/remote/common/remoteHosts'; -import { SharedProcess } from 'vs/platform/sharedProcess/electron-main/sharedProcess'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { IStateService } from 'vs/platform/state/node/state'; -import { StorageDatabaseChannel } from 'vs/platform/storage/electron-main/storageIpc'; -import { ApplicationStorageMainService, IApplicationStorageMainService, IStorageMainService, StorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties'; -import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc'; -import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; -import { getPiiPathsFromEnvironment, getTelemetryLevel, isInternalTelemetry, NullTelemetryService, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IUpdateService } from 'vs/platform/update/common/update'; -import { UpdateChannel } from 'vs/platform/update/common/updateIpc'; -import { DarwinUpdateService } from 'vs/platform/update/electron-main/updateService.darwin'; -import { LinuxUpdateService } from 'vs/platform/update/electron-main/updateService.linux'; -import { SnapUpdateService } from 'vs/platform/update/electron-main/updateService.snap'; -import { Win32UpdateService } from 'vs/platform/update/electron-main/updateService.win32'; -import { IOpenURLOptions, IURLService } from 'vs/platform/url/common/url'; -import { URLHandlerChannelClient, URLHandlerRouter } from 'vs/platform/url/common/urlIpc'; -import { NativeURLService } from 'vs/platform/url/common/urlService'; -import { ElectronURLListener } from 'vs/platform/url/electron-main/electronUrlListener'; -import { IWebviewManagerService } from 'vs/platform/webview/common/webviewManagerService'; -import { WebviewMainService } from 'vs/platform/webview/electron-main/webviewMainService'; -import { isFolderToOpen, isWorkspaceToOpen, IWindowOpenable } from 'vs/platform/window/common/window'; -import { IWindowsMainService, OpenContext } from 'vs/platform/windows/electron-main/windows'; -import { ICodeWindow } from 'vs/platform/window/electron-main/window'; -import { WindowsMainService } from 'vs/platform/windows/electron-main/windowsMainService'; -import { ActiveWindowManager } from 'vs/platform/windows/node/windowTracker'; -import { hasWorkspaceFileExtension } from 'vs/platform/workspace/common/workspace'; -import { IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { IWorkspacesHistoryMainService, WorkspacesHistoryMainService } from 'vs/platform/workspaces/electron-main/workspacesHistoryMainService'; -import { WorkspacesMainService } from 'vs/platform/workspaces/electron-main/workspacesMainService'; -import { IWorkspacesManagementMainService, WorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { IPolicyService } from 'vs/platform/policy/common/policy'; -import { PolicyChannel } from 'vs/platform/policy/common/policyIpc'; -import { IUserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { RequestChannel } from 'vs/platform/request/common/requestIpc'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionsScannerService } from 'vs/platform/extensionManagement/node/extensionsScannerService'; -import { UserDataProfilesHandler } from 'vs/platform/userDataProfile/electron-main/userDataProfilesHandler'; -import { ProfileStorageChangesListenerChannel } from 'vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc'; -import { Promises, RunOnceScheduler, runWhenGlobalIdle } from 'vs/base/common/async'; -import { resolveMachineId, resolveSqmId, resolvedevDeviceId } from 'vs/platform/telemetry/electron-main/telemetryUtils'; -import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { LoggerChannel } from 'vs/platform/log/electron-main/logIpc'; -import { ILoggerMainService } from 'vs/platform/log/electron-main/loggerService'; -import { IInitialProtocolUrls, IProtocolUrl } from 'vs/platform/url/electron-main/url'; -import { IUtilityProcessWorkerMainService, UtilityProcessWorkerMainService } from 'vs/platform/utilityProcess/electron-main/utilityProcessWorkerMainService'; -import { ipcUtilityProcessWorkerChannelName } from 'vs/platform/utilityProcess/common/utilityProcessWorkerService'; -import { firstOrDefault } from 'vs/base/common/arrays'; -import { ILocalPtyService, LocalReconnectConstants, TerminalIpcChannels, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { ElectronPtyHostStarter } from 'vs/platform/terminal/electron-main/electronPtyHostStarter'; -import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService'; -import { NODE_REMOTE_RESOURCE_CHANNEL_NAME, NODE_REMOTE_RESOURCE_IPC_METHOD_NAME, NodeRemoteResourceResponse, NodeRemoteResourceRouter } from 'vs/platform/remote/common/electronRemoteResources'; -import { Lazy } from 'vs/base/common/lazy'; -import { IAuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows'; -import { AuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService'; -import { normalizeNFC } from 'vs/base/common/normalization'; -import { ICSSDevelopmentService, CSSDevelopmentService } from 'vs/platform/cssDev/node/cssDevService'; +import { VSBuffer } from '../../base/common/buffer.js'; +import { toErrorMessage } from '../../base/common/errorMessage.js'; +import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js'; +import { Event } from '../../base/common/event.js'; +import { parse } from '../../base/common/jsonc.js'; +import { getPathLabel } from '../../base/common/labels.js'; +import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; +import { Schemas, VSCODE_AUTHORITY } from '../../base/common/network.js'; +import { join, posix } from '../../base/common/path.js'; +import { IProcessEnvironment, isLinux, isLinuxSnap, isMacintosh, isWindows, OS } from '../../base/common/platform.js'; +import { assertType } from '../../base/common/types.js'; +import { URI } from '../../base/common/uri.js'; +import { generateUuid } from '../../base/common/uuid.js'; +import { registerContextMenuListener } from '../../base/parts/contextmenu/electron-main/contextmenu.js'; +import { getDelayedChannel, ProxyChannel, StaticRouter } from '../../base/parts/ipc/common/ipc.js'; +import { Server as ElectronIPCServer } from '../../base/parts/ipc/electron-main/ipc.electron.js'; +import { Client as MessagePortClient } from '../../base/parts/ipc/electron-main/ipc.mp.js'; +import { Server as NodeIPCServer } from '../../base/parts/ipc/node/ipc.net.js'; +import { IProxyAuthService, ProxyAuthService } from '../../platform/native/electron-main/auth.js'; +import { localize } from '../../nls.js'; +import { IBackupMainService } from '../../platform/backup/electron-main/backup.js'; +import { BackupMainService } from '../../platform/backup/electron-main/backupMainService.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ElectronExtensionHostDebugBroadcastChannel } from '../../platform/debug/electron-main/extensionHostDebugIpc.js'; +import { IDiagnosticsService } from '../../platform/diagnostics/common/diagnostics.js'; +import { DiagnosticsMainService, IDiagnosticsMainService } from '../../platform/diagnostics/electron-main/diagnosticsMainService.js'; +import { DialogMainService, IDialogMainService } from '../../platform/dialogs/electron-main/dialogMainService.js'; +import { IEncryptionMainService } from '../../platform/encryption/common/encryptionService.js'; +import { EncryptionMainService } from '../../platform/encryption/electron-main/encryptionMainService.js'; +import { NativeParsedArgs } from '../../platform/environment/common/argv.js'; +import { IEnvironmentMainService } from '../../platform/environment/electron-main/environmentMainService.js'; +import { isLaunchedFromCli } from '../../platform/environment/node/argvHelper.js'; +import { getResolvedShellEnv } from '../../platform/shell/node/shellEnv.js'; +import { IExtensionHostStarter, ipcExtensionHostStarterChannelName } from '../../platform/extensions/common/extensionHostStarter.js'; +import { ExtensionHostStarter } from '../../platform/extensions/electron-main/extensionHostStarter.js'; +import { IExternalTerminalMainService } from '../../platform/externalTerminal/electron-main/externalTerminal.js'; +import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from '../../platform/externalTerminal/node/externalTerminalService.js'; +import { LOCAL_FILE_SYSTEM_CHANNEL_NAME } from '../../platform/files/common/diskFileSystemProviderClient.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { DiskFileSystemProviderChannel } from '../../platform/files/electron-main/diskFileSystemProviderServer.js'; +import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystemProvider.js'; +import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; +import { IInstantiationService, ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js'; +import { IProcessMainService, IIssueMainService } from '../../platform/issue/common/issue.js'; +import { IssueMainService } from '../../platform/issue/electron-main/issueMainService.js'; +import { ProcessMainService } from '../../platform/issue/electron-main/processMainService.js'; +import { IKeyboardLayoutMainService, KeyboardLayoutMainService } from '../../platform/keyboardLayout/electron-main/keyboardLayoutMainService.js'; +import { ILaunchMainService, LaunchMainService } from '../../platform/launch/electron-main/launchMainService.js'; +import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from '../../platform/lifecycle/electron-main/lifecycleMainService.js'; +import { ILoggerService, ILogService } from '../../platform/log/common/log.js'; +import { IMenubarMainService, MenubarMainService } from '../../platform/menubar/electron-main/menubarMainService.js'; +import { INativeHostMainService, NativeHostMainService } from '../../platform/native/electron-main/nativeHostMainService.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { getRemoteAuthority } from '../../platform/remote/common/remoteHosts.js'; +import { SharedProcess } from '../../platform/sharedProcess/electron-main/sharedProcess.js'; +import { ISignService } from '../../platform/sign/common/sign.js'; +import { IStateService } from '../../platform/state/node/state.js'; +import { StorageDatabaseChannel } from '../../platform/storage/electron-main/storageIpc.js'; +import { ApplicationStorageMainService, IApplicationStorageMainService, IStorageMainService, StorageMainService } from '../../platform/storage/electron-main/storageMainService.js'; +import { resolveCommonProperties } from '../../platform/telemetry/common/commonProperties.js'; +import { ITelemetryService, TelemetryLevel } from '../../platform/telemetry/common/telemetry.js'; +import { TelemetryAppenderClient } from '../../platform/telemetry/common/telemetryIpc.js'; +import { ITelemetryServiceConfig, TelemetryService } from '../../platform/telemetry/common/telemetryService.js'; +import { getPiiPathsFromEnvironment, getTelemetryLevel, isInternalTelemetry, NullTelemetryService, supportsTelemetry } from '../../platform/telemetry/common/telemetryUtils.js'; +import { IUpdateService } from '../../platform/update/common/update.js'; +import { UpdateChannel } from '../../platform/update/common/updateIpc.js'; +import { DarwinUpdateService } from '../../platform/update/electron-main/updateService.darwin.js'; +import { LinuxUpdateService } from '../../platform/update/electron-main/updateService.linux.js'; +import { SnapUpdateService } from '../../platform/update/electron-main/updateService.snap.js'; +import { Win32UpdateService } from '../../platform/update/electron-main/updateService.win32.js'; +import { IOpenURLOptions, IURLService } from '../../platform/url/common/url.js'; +import { URLHandlerChannelClient, URLHandlerRouter } from '../../platform/url/common/urlIpc.js'; +import { NativeURLService } from '../../platform/url/common/urlService.js'; +import { ElectronURLListener } from '../../platform/url/electron-main/electronUrlListener.js'; +import { IWebviewManagerService } from '../../platform/webview/common/webviewManagerService.js'; +import { WebviewMainService } from '../../platform/webview/electron-main/webviewMainService.js'; +import { isFolderToOpen, isWorkspaceToOpen, IWindowOpenable } from '../../platform/window/common/window.js'; +import { IWindowsMainService, OpenContext } from '../../platform/windows/electron-main/windows.js'; +import { ICodeWindow } from '../../platform/window/electron-main/window.js'; +import { WindowsMainService } from '../../platform/windows/electron-main/windowsMainService.js'; +import { ActiveWindowManager } from '../../platform/windows/node/windowTracker.js'; +import { hasWorkspaceFileExtension } from '../../platform/workspace/common/workspace.js'; +import { IWorkspacesService } from '../../platform/workspaces/common/workspaces.js'; +import { IWorkspacesHistoryMainService, WorkspacesHistoryMainService } from '../../platform/workspaces/electron-main/workspacesHistoryMainService.js'; +import { WorkspacesMainService } from '../../platform/workspaces/electron-main/workspacesMainService.js'; +import { IWorkspacesManagementMainService, WorkspacesManagementMainService } from '../../platform/workspaces/electron-main/workspacesManagementMainService.js'; +import { IPolicyService } from '../../platform/policy/common/policy.js'; +import { PolicyChannel } from '../../platform/policy/common/policyIpc.js'; +import { IUserDataProfilesMainService } from '../../platform/userDataProfile/electron-main/userDataProfile.js'; +import { IExtensionsProfileScannerService } from '../../platform/extensionManagement/common/extensionsProfileScannerService.js'; +import { IExtensionsScannerService } from '../../platform/extensionManagement/common/extensionsScannerService.js'; +import { ExtensionsScannerService } from '../../platform/extensionManagement/node/extensionsScannerService.js'; +import { UserDataProfilesHandler } from '../../platform/userDataProfile/electron-main/userDataProfilesHandler.js'; +import { ProfileStorageChangesListenerChannel } from '../../platform/userDataProfile/electron-main/userDataProfileStorageIpc.js'; +import { Promises, RunOnceScheduler, runWhenGlobalIdle } from '../../base/common/async.js'; +import { resolveMachineId, resolveSqmId, resolvedevDeviceId } from '../../platform/telemetry/electron-main/telemetryUtils.js'; +import { ExtensionsProfileScannerService } from '../../platform/extensionManagement/node/extensionsProfileScannerService.js'; +import { LoggerChannel } from '../../platform/log/electron-main/logIpc.js'; +import { ILoggerMainService } from '../../platform/log/electron-main/loggerService.js'; +import { IInitialProtocolUrls, IProtocolUrl } from '../../platform/url/electron-main/url.js'; +import { IUtilityProcessWorkerMainService, UtilityProcessWorkerMainService } from '../../platform/utilityProcess/electron-main/utilityProcessWorkerMainService.js'; +import { ipcUtilityProcessWorkerChannelName } from '../../platform/utilityProcess/common/utilityProcessWorkerService.js'; +import { ILocalPtyService, LocalReconnectConstants, TerminalIpcChannels, TerminalSettingId } from '../../platform/terminal/common/terminal.js'; +import { ElectronPtyHostStarter } from '../../platform/terminal/electron-main/electronPtyHostStarter.js'; +import { PtyHostService } from '../../platform/terminal/node/ptyHostService.js'; +import { NODE_REMOTE_RESOURCE_CHANNEL_NAME, NODE_REMOTE_RESOURCE_IPC_METHOD_NAME, NodeRemoteResourceResponse, NodeRemoteResourceRouter } from '../../platform/remote/common/electronRemoteResources.js'; +import { Lazy } from '../../base/common/lazy.js'; +import { IAuxiliaryWindowsMainService } from '../../platform/auxiliaryWindow/electron-main/auxiliaryWindows.js'; +import { AuxiliaryWindowsMainService } from '../../platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.js'; +import { normalizeNFC } from '../../base/common/normalization.js'; +import { ICSSDevelopmentService, CSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js'; +import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from '../../platform/extensionManagement/node/extensionSignatureVerificationService.js'; /** * The main VS Code application. There will only ever be one instance, @@ -916,14 +914,14 @@ export class CodeApplication extends Disposable { } else { this.logService.trace('app#handleProtocolUrl() opening protocol url as window:', windowOpenableFromProtocolUrl, uri.toString(true)); - const window = firstOrDefault(await windowsMainService.open({ + const window = (await windowsMainService.open({ context: OpenContext.LINK, cli: { ...this.environmentMainService.args }, urisToOpen: [windowOpenableFromProtocolUrl], forceNewWindow: shouldOpenInNewWindow, gotoLineMode: true // remoteAuthority: will be determined based on windowOpenableFromProtocolUrl - })); + })).at(0); window?.focus(); // this should help ensuring that the right window gets focus when multiple are opened @@ -935,14 +933,14 @@ export class CodeApplication extends Disposable { if (shouldOpenInNewWindow) { this.logService.trace('app#handleProtocolUrl() opening empty window and passing in protocol url:', uri.toString(true)); - const window = firstOrDefault(await windowsMainService.open({ + const window = (await windowsMainService.open({ context: OpenContext.LINK, cli: { ...this.environmentMainService.args }, forceNewWindow: true, forceEmpty: true, gotoLineMode: true, remoteAuthority: getRemoteAuthority(uri) - })); + })).at(0); await window?.ready(); @@ -1106,6 +1104,11 @@ export class CodeApplication extends Disposable { // Dev Only: CSS service (for ESM) services.set(ICSSDevelopmentService, new SyncDescriptor(CSSDevelopmentService, undefined, true)); + if (this.productService.quality !== 'stable') { + // extensions signature verification service + services.set(IExtensionSignatureVerificationService, new SyncDescriptor(ExtensionSignatureVerificationService, undefined, true)); + } + // Init services that require it await Promises.settled([ backupMainService.initialize(), @@ -1147,9 +1150,12 @@ export class CodeApplication extends Disposable { mainProcessElectronServer.registerChannel('userDataProfiles', userDataProfilesService); sharedProcessClient.then(client => client.registerChannel('userDataProfiles', userDataProfilesService)); - // Request - const requestService = new RequestChannel(accessor.get(IRequestService)); - sharedProcessClient.then(client => client.registerChannel('request', requestService)); + if (this.productService.quality !== 'stable') { + // Extension signature verification service + const extensionSignatureVerificationService = accessor.get(IExtensionSignatureVerificationService); + sharedProcessClient.then(client => client.registerChannel('signatureVerificationService', + ProxyChannel.fromService(extensionSignatureVerificationService, disposables))); + } // Update const updateChannel = new UpdateChannel(accessor.get(IUpdateService)); diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index deb0d1eab..3f819e166 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -3,75 +3,75 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/platform/update/common/update.config.contribution'; +import '../../platform/update/common/update.config.contribution.js'; import { app, dialog } from 'electron'; import { unlinkSync, promises } from 'fs'; -import { URI } from 'vs/base/common/uri'; -import { coalesce, distinct } from 'vs/base/common/arrays'; -import { Promises } from 'vs/base/common/async'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { ExpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { IPathWithLineAndColumn, isValidBasename, parseLineAndColumnAware, sanitizeFilePath } from 'vs/base/common/extpath'; -import { Event } from 'vs/base/common/event'; -import { getPathLabel } from 'vs/base/common/labels'; -import { Schemas } from 'vs/base/common/network'; -import { basename, resolve } from 'vs/base/common/path'; -import { mark } from 'vs/base/common/performance'; -import { IProcessEnvironment, isMacintosh, isWindows, OS } from 'vs/base/common/platform'; -import { cwd } from 'vs/base/common/process'; -import { rtrim, trim } from 'vs/base/common/strings'; -import { Promises as FSPromises } from 'vs/base/node/pfs'; -import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { Client as NodeIPCClient } from 'vs/base/parts/ipc/common/ipc.net'; -import { connect as nodeIPCConnect, serve as nodeIPCServe, Server as NodeIPCServer, XDG_RUNTIME_DIR } from 'vs/base/parts/ipc/node/ipc.net'; -import { CodeApplication } from 'vs/code/electron-main/app'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { IDiagnosticsMainService } from 'vs/platform/diagnostics/electron-main/diagnosticsMainService'; -import { DiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsService'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { EnvironmentMainService, IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { addArg, parseMainProcessArgv } from 'vs/platform/environment/node/argvHelper'; -import { createWaitMarkerFileSync } from 'vs/platform/environment/node/wait'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILaunchMainService } from 'vs/platform/launch/electron-main/launchMainService'; -import { ILifecycleMainService, LifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { BufferLogger } from 'vs/platform/log/common/bufferLog'; -import { ConsoleMainLogger, getLogLevel, ILoggerService, ILogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol'; -import { ProtocolMainService } from 'vs/platform/protocol/electron-main/protocolMainService'; -import { ITunnelService } from 'vs/platform/tunnel/common/tunnel'; -import { TunnelService } from 'vs/platform/tunnel/node/tunnelService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { RequestMainService } from 'vs/platform/request/electron-main/requestMainService'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { SignService } from 'vs/platform/sign/node/signService'; -import { IStateReadService, IStateService } from 'vs/platform/state/node/state'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IThemeMainService, ThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; -import { IUserDataProfilesMainService, UserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { IPolicyService, NullPolicyService } from 'vs/platform/policy/common/policy'; -import { NativePolicyService } from 'vs/platform/policy/node/nativePolicyService'; -import { FilePolicyService } from 'vs/platform/policy/common/filePolicyService'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { ILoggerMainService, LoggerMainService } from 'vs/platform/log/electron-main/loggerService'; -import { LogService } from 'vs/platform/log/common/logService'; -import { massageMessageBoxOptions } from 'vs/platform/dialogs/common/dialogs'; -import { SaveStrategy, StateService } from 'vs/platform/state/node/stateService'; -import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; -import { addUNCHostToAllowlist, getUNCHost } from 'vs/base/node/unc'; +import { URI } from '../../base/common/uri.js'; +import { coalesce, distinct } from '../../base/common/arrays.js'; +import { Promises } from '../../base/common/async.js'; +import { toErrorMessage } from '../../base/common/errorMessage.js'; +import { ExpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js'; +import { IPathWithLineAndColumn, isValidBasename, parseLineAndColumnAware, sanitizeFilePath } from '../../base/common/extpath.js'; +import { Event } from '../../base/common/event.js'; +import { getPathLabel } from '../../base/common/labels.js'; +import { Schemas } from '../../base/common/network.js'; +import { basename, resolve } from '../../base/common/path.js'; +import { mark } from '../../base/common/performance.js'; +import { IProcessEnvironment, isMacintosh, isWindows, OS } from '../../base/common/platform.js'; +import { cwd } from '../../base/common/process.js'; +import { rtrim, trim } from '../../base/common/strings.js'; +import { Promises as FSPromises } from '../../base/node/pfs.js'; +import { ProxyChannel } from '../../base/parts/ipc/common/ipc.js'; +import { Client as NodeIPCClient } from '../../base/parts/ipc/common/ipc.net.js'; +import { connect as nodeIPCConnect, serve as nodeIPCServe, Server as NodeIPCServer, XDG_RUNTIME_DIR } from '../../base/parts/ipc/node/ipc.net.js'; +import { CodeApplication } from './app.js'; +import { localize } from '../../nls.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; +import { IDiagnosticsMainService } from '../../platform/diagnostics/electron-main/diagnosticsMainService.js'; +import { DiagnosticsService } from '../../platform/diagnostics/node/diagnosticsService.js'; +import { NativeParsedArgs } from '../../platform/environment/common/argv.js'; +import { EnvironmentMainService, IEnvironmentMainService } from '../../platform/environment/electron-main/environmentMainService.js'; +import { addArg, parseMainProcessArgv } from '../../platform/environment/node/argvHelper.js'; +import { createWaitMarkerFileSync } from '../../platform/environment/node/wait.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { FileService } from '../../platform/files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystemProvider.js'; +import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; +import { IInstantiationService, ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +import { InstantiationService } from '../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js'; +import { ILaunchMainService } from '../../platform/launch/electron-main/launchMainService.js'; +import { ILifecycleMainService, LifecycleMainService } from '../../platform/lifecycle/electron-main/lifecycleMainService.js'; +import { BufferLogger } from '../../platform/log/common/bufferLog.js'; +import { ConsoleMainLogger, getLogLevel, ILoggerService, ILogService } from '../../platform/log/common/log.js'; +import product from '../../platform/product/common/product.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { IProtocolMainService } from '../../platform/protocol/electron-main/protocol.js'; +import { ProtocolMainService } from '../../platform/protocol/electron-main/protocolMainService.js'; +import { ITunnelService } from '../../platform/tunnel/common/tunnel.js'; +import { TunnelService } from '../../platform/tunnel/node/tunnelService.js'; +import { IRequestService } from '../../platform/request/common/request.js'; +import { RequestService } from '../../platform/request/electron-utility/requestService.js'; +import { ISignService } from '../../platform/sign/common/sign.js'; +import { SignService } from '../../platform/sign/node/signService.js'; +import { IStateReadService, IStateService } from '../../platform/state/node/state.js'; +import { NullTelemetryService } from '../../platform/telemetry/common/telemetryUtils.js'; +import { IThemeMainService, ThemeMainService } from '../../platform/theme/electron-main/themeMainService.js'; +import { IUserDataProfilesMainService, UserDataProfilesMainService } from '../../platform/userDataProfile/electron-main/userDataProfile.js'; +import { IPolicyService, NullPolicyService } from '../../platform/policy/common/policy.js'; +import { NativePolicyService } from '../../platform/policy/node/nativePolicyService.js'; +import { FilePolicyService } from '../../platform/policy/common/filePolicyService.js'; +import { DisposableStore } from '../../base/common/lifecycle.js'; +import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../platform/uriIdentity/common/uriIdentityService.js'; +import { ILoggerMainService, LoggerMainService } from '../../platform/log/electron-main/loggerService.js'; +import { LogService } from '../../platform/log/common/logService.js'; +import { massageMessageBoxOptions } from '../../platform/dialogs/common/dialogs.js'; +import { SaveStrategy, StateService } from '../../platform/state/node/stateService.js'; +import { FileUserDataProvider } from '../../platform/userData/common/fileUserDataProvider.js'; +import { addUNCHostToAllowlist, getUNCHost } from '../../base/node/unc.js'; /** * The main VS Code entry point. @@ -99,7 +99,7 @@ class CodeMain { setUnexpectedErrorHandler(err => console.error(err)); // Create services - const [instantiationService, instanceEnvironment, environmentMainService, configurationService, stateMainService, bufferLogService, productService, userDataProfilesMainService] = this.createServices(); + const [instantiationService, instanceEnvironment, environmentMainService, configurationService, stateMainService, bufferLogger, productService, userDataProfilesMainService] = this.createServices(); try { @@ -133,7 +133,7 @@ class CodeMain { }); // Delay creation of spdlog for perf reasons (https://github.com/microsoft/vscode/issues/72906) - bufferLogService.logger = loggerService.createLogger('main', { name: localize('mainLog', "Main") }); + bufferLogger.logger = loggerService.createLogger('main', { name: localize('mainLog', "Main") }); // Lifecycle Event.once(lifecycleMainService.onWillShutdown)(evt => { @@ -211,7 +211,7 @@ class CodeMain { services.set(ILifecycleMainService, new SyncDescriptor(LifecycleMainService, undefined, false)); // Request - services.set(IRequestService, new SyncDescriptor(RequestMainService, undefined, true)); + services.set(IRequestService, new SyncDescriptor(RequestService, undefined, true)); // Themes services.set(IThemeMainService, new SyncDescriptor(ThemeMainService)); diff --git a/src/vs/code/electron-sandbox/processExplorer/processExplorerMain.ts b/src/vs/code/electron-sandbox/processExplorer/processExplorerMain.ts index 6acf0415b..6ee7d3e29 100644 --- a/src/vs/code/electron-sandbox/processExplorer/processExplorerMain.ts +++ b/src/vs/code/electron-sandbox/processExplorer/processExplorerMain.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/processExplorer'; -import 'vs/base/browser/ui/codicons/codiconStyles'; // make sure codicon css is loaded -import { localize } from 'vs/nls'; -import { $, append, createStyleSheet } from 'vs/base/browser/dom'; -import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { DataTree } from 'vs/base/browser/ui/tree/dataTree'; -import { IDataSource, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { ProcessItem } from 'vs/base/common/processes'; -import { IContextMenuItem } from 'vs/base/parts/contextmenu/common/contextmenu'; -import { popup } from 'vs/base/parts/contextmenu/electron-sandbox/contextmenu'; -import { ipcRenderer } from 'vs/base/parts/sandbox/electron-sandbox/globals'; -import { IRemoteDiagnosticError, isRemoteDiagnosticError } from 'vs/platform/diagnostics/common/diagnostics'; -import { ByteSize } from 'vs/platform/files/common/files'; -import { ElectronIPCMainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService'; -import { ProcessExplorerData, ProcessExplorerStyles, ProcessExplorerWindowConfiguration } from 'vs/platform/issue/common/issue'; -import { INativeHostService } from 'vs/platform/native/common/native'; -import { NativeHostService } from 'vs/platform/native/common/nativeHostService'; -import { getIconsStyleSheet } from 'vs/platform/theme/browser/iconsStyleSheet'; -import { applyZoom, zoomIn, zoomOut } from 'vs/platform/window/electron-sandbox/window'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { mainWindow } from 'vs/base/browser/window'; +import './media/processExplorer.css'; +import '../../../base/browser/ui/codicons/codiconStyles.js'; // make sure codicon css is loaded +import { localize } from '../../../nls.js'; +import { $, append, createStyleSheet } from '../../../base/browser/dom.js'; +import { IListVirtualDelegate } from '../../../base/browser/ui/list/list.js'; +import { DataTree } from '../../../base/browser/ui/tree/dataTree.js'; +import { IDataSource, ITreeNode, ITreeRenderer } from '../../../base/browser/ui/tree/tree.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { ProcessItem } from '../../../base/common/processes.js'; +import { IContextMenuItem } from '../../../base/parts/contextmenu/common/contextmenu.js'; +import { popup } from '../../../base/parts/contextmenu/electron-sandbox/contextmenu.js'; +import { ipcRenderer } from '../../../base/parts/sandbox/electron-sandbox/globals.js'; +import { IRemoteDiagnosticError, isRemoteDiagnosticError } from '../../../platform/diagnostics/common/diagnostics.js'; +import { ByteSize } from '../../../platform/files/common/files.js'; +import { ElectronIPCMainProcessService } from '../../../platform/ipc/electron-sandbox/mainProcessService.js'; +import { ProcessExplorerData, ProcessExplorerStyles, ProcessExplorerWindowConfiguration } from '../../../platform/issue/common/issue.js'; +import { INativeHostService } from '../../../platform/native/common/native.js'; +import { NativeHostService } from '../../../platform/native/common/nativeHostService.js'; +import { getIconsStyleSheet } from '../../../platform/theme/browser/iconsStyleSheet.js'; +import { applyZoom, zoomIn, zoomOut } from '../../../platform/window/electron-sandbox/window.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { mainWindow } from '../../../base/browser/window.js'; const DEBUG_FLAGS_PATTERN = /\s--inspect(?:-brk|port)?=(?\d+)?/; const DEBUG_PORT_PATTERN = /\s--inspect-port=(?\d+)/; diff --git a/src/vs/code/electron-sandbox/workbench/workbench.js b/src/vs/code/electron-sandbox/workbench/workbench.js index bed16c9f9..0ddbcd49b 100644 --- a/src/vs/code/electron-sandbox/workbench/workbench.js +++ b/src/vs/code/electron-sandbox/workbench/workbench.js @@ -162,7 +162,12 @@ const style = document.createElement('style'); style.className = 'initialShellColors'; document.head.appendChild(style); - style.textContent = `body { background-color: ${shellBackground}; color: ${shellForeground}; margin: 0; padding: 0; }`; + style.textContent = `body { + background-color: ${shellBackground}; + color: ${shellForeground}; + margin: 0; + padding: 0; + }`; // set zoom level as soon as possible // @ts-ignore @@ -180,10 +185,12 @@ splash.className = baseTheme ?? 'vs-dark'; if (layoutInfo.windowBorder && colorInfo.windowBorder) { - splash.style.position = 'relative'; - splash.style.height = 'calc(100vh - 2px)'; - splash.style.width = 'calc(100vw - 2px)'; - splash.style.border = '1px solid var(--window-border-color)'; + splash.setAttribute('style', ` + position: relative; + height: calc(100vh - 2px); + width: calc(100vw - 2px); + border: 1px solid var(--window-border-color); + `); splash.style.setProperty('--window-border-color', colorInfo.windowBorder); if (layoutInfo.windowBorderRadius) { @@ -196,27 +203,108 @@ // part: title const titleDiv = document.createElement('div'); - titleDiv.setAttribute('style', `position: absolute; width: 100%; left: 0; top: 0; height: ${layoutInfo.titleBarHeight}px; background-color: ${colorInfo.titleBarBackground}; -webkit-app-region: drag;`); + titleDiv.setAttribute('style', ` + position: absolute; + width: 100%; + height: ${layoutInfo.titleBarHeight}px; + left: 0; + top: 0; + background-color: ${colorInfo.titleBarBackground}; + -webkit-app-region: drag; + `); splash.appendChild(titleDiv); + if (colorInfo.titleBarBorder && layoutInfo.titleBarHeight > 0) { + const titleBorder = document.createElement('div'); + titleBorder.setAttribute('style', ` + position: absolute; + width: 100%; + height: 1px; + left: 0; + bottom: 0; + border-bottom: 1px solid ${colorInfo.titleBarBorder}; + `); + titleDiv.appendChild(titleBorder); + } + // part: activity bar const activityDiv = document.createElement('div'); - activityDiv.setAttribute('style', `position: absolute; height: calc(100% - ${layoutInfo.titleBarHeight}px); top: ${layoutInfo.titleBarHeight}px; ${layoutInfo.sideBarSide}: 0; width: ${layoutInfo.activityBarWidth}px; background-color: ${colorInfo.activityBarBackground};`); + activityDiv.setAttribute('style', ` + position: absolute; + width: ${layoutInfo.activityBarWidth}px; + height: calc(100% - ${layoutInfo.titleBarHeight + layoutInfo.statusBarHeight}px); + top: ${layoutInfo.titleBarHeight}px; + ${layoutInfo.sideBarSide}: 0; + background-color: ${colorInfo.activityBarBackground}; + `); splash.appendChild(activityDiv); + if (colorInfo.activityBarBorder && layoutInfo.activityBarWidth > 0) { + const activityBorderDiv = document.createElement('div'); + activityBorderDiv.setAttribute('style', ` + position: absolute; + width: 1px; + height: 100%; + top: 0; + ${layoutInfo.sideBarSide === 'left' ? 'right' : 'left'}: 0; + ${layoutInfo.sideBarSide === 'left' ? 'border-right' : 'border-left'}: 1px solid ${colorInfo.activityBarBorder}; + `); + activityDiv.appendChild(activityBorderDiv); + } + // part: side bar (only when opening workspace/folder) // folder or workspace -> status bar color, sidebar if (configuration.workspace) { const sideDiv = document.createElement('div'); - sideDiv.setAttribute('style', `position: absolute; height: calc(100% - ${layoutInfo.titleBarHeight}px); top: ${layoutInfo.titleBarHeight}px; ${layoutInfo.sideBarSide}: ${layoutInfo.activityBarWidth}px; width: ${layoutInfo.sideBarWidth}px; background-color: ${colorInfo.sideBarBackground};`); + sideDiv.setAttribute('style', ` + position: absolute; + width: ${layoutInfo.sideBarWidth}px; + height: calc(100% - ${layoutInfo.titleBarHeight + layoutInfo.statusBarHeight}px); + top: ${layoutInfo.titleBarHeight}px; + ${layoutInfo.sideBarSide}: ${layoutInfo.activityBarWidth}px; + background-color: ${colorInfo.sideBarBackground}; + `); splash.appendChild(sideDiv); + + if (colorInfo.sideBarBorder && layoutInfo.sideBarWidth > 0) { + const sideBorderDiv = document.createElement('div'); + sideBorderDiv.setAttribute('style', ` + position: absolute; + width: 1px; + height: 100%; + top: 0; + right: 0; + ${layoutInfo.sideBarSide === 'left' ? 'right' : 'left'}: 0; + ${layoutInfo.sideBarSide === 'left' ? 'border-right' : 'border-left'}: 1px solid ${colorInfo.sideBarBorder}; + `); + sideDiv.appendChild(sideBorderDiv); + } } // part: statusbar const statusDiv = document.createElement('div'); - statusDiv.setAttribute('style', `position: absolute; width: 100%; bottom: 0; left: 0; height: ${layoutInfo.statusBarHeight}px; background-color: ${configuration.workspace ? colorInfo.statusBarBackground : colorInfo.statusBarNoFolderBackground};`); + statusDiv.setAttribute('style', ` + position: absolute; + width: 100%; + height: ${layoutInfo.statusBarHeight}px; + bottom: 0; + left: 0; + background-color: ${configuration.workspace ? colorInfo.statusBarBackground : colorInfo.statusBarNoFolderBackground}; + `); splash.appendChild(statusDiv); + if (colorInfo.statusBarBorder && layoutInfo.statusBarHeight > 0) { + const statusBorderDiv = document.createElement('div'); + statusBorderDiv.setAttribute('style', ` + position: absolute; + width: 100%; + height: 1px; + top: 0; + border-top: 1px solid ${colorInfo.statusBarBorder}; + `); + statusDiv.appendChild(statusBorderDiv); + } + document.body.appendChild(splash); } diff --git a/src/vs/code/node/sharedProcess/contrib/codeCacheCleaner.ts b/src/vs/code/electron-utility/sharedProcess/contrib/codeCacheCleaner.ts similarity index 82% rename from src/vs/code/node/sharedProcess/contrib/codeCacheCleaner.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/codeCacheCleaner.ts index 7ca147e38..7560b8fac 100644 --- a/src/vs/code/node/sharedProcess/contrib/codeCacheCleaner.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/codeCacheCleaner.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { basename, dirname, join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { basename, dirname, join } from '../../../../base/common/path.js'; +import { Promises } from '../../../../base/node/pfs.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IProductService } from '../../../../platform/product/common/productService.js'; export class CodeCacheCleaner extends Disposable { diff --git a/src/vs/code/node/sharedProcess/contrib/extensions.ts b/src/vs/code/electron-utility/sharedProcess/contrib/extensions.ts similarity index 67% rename from src/vs/code/node/sharedProcess/contrib/extensions.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/extensions.ts index f1f61f5fb..4140b645f 100644 --- a/src/vs/code/node/sharedProcess/contrib/extensions.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/extensions.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IExtensionGalleryService, IGlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionStorageService, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { migrateUnsupportedExtensions } from 'vs/platform/extensionManagement/common/unsupportedExtensionsMigration'; -import { INativeServerExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStorageService } from 'vs/platform/storage/common/storage'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IExtensionGalleryService, IGlobalExtensionEnablementService } from '../../../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionStorageService, IExtensionStorageService } from '../../../../platform/extensionManagement/common/extensionStorage.js'; +import { migrateUnsupportedExtensions } from '../../../../platform/extensionManagement/common/unsupportedExtensionsMigration.js'; +import { INativeServerExtensionManagementService } from '../../../../platform/extensionManagement/node/extensionManagementService.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; export class ExtensionsContributions extends Disposable { constructor( diff --git a/src/vs/code/node/sharedProcess/contrib/languagePackCachedDataCleaner.ts b/src/vs/code/electron-utility/sharedProcess/contrib/languagePackCachedDataCleaner.ts similarity index 83% rename from src/vs/code/node/sharedProcess/contrib/languagePackCachedDataCleaner.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/languagePackCachedDataCleaner.ts index 0c7e517d4..0c70b33f1 100644 --- a/src/vs/code/node/sharedProcess/contrib/languagePackCachedDataCleaner.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/languagePackCachedDataCleaner.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { IStringDictionary } from '../../../../base/common/collections.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { join } from '../../../../base/common/path.js'; +import { Promises } from '../../../../base/node/pfs.js'; +import { INativeEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IProductService } from '../../../../platform/product/common/productService.js'; interface IExtensionEntry { version: string; diff --git a/src/vs/code/node/sharedProcess/contrib/localizationsUpdater.ts b/src/vs/code/electron-utility/sharedProcess/contrib/localizationsUpdater.ts similarity index 70% rename from src/vs/code/node/sharedProcess/contrib/localizationsUpdater.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/localizationsUpdater.ts index f035c7d8e..59c74ecfb 100644 --- a/src/vs/code/node/sharedProcess/contrib/localizationsUpdater.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/localizationsUpdater.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; -import { NativeLanguagePackService } from 'vs/platform/languagePacks/node/languagePacks'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ILanguagePackService } from '../../../../platform/languagePacks/common/languagePacks.js'; +import { NativeLanguagePackService } from '../../../../platform/languagePacks/node/languagePacks.js'; export class LocalizationsUpdater extends Disposable { diff --git a/src/vs/code/node/sharedProcess/contrib/logsDataCleaner.ts b/src/vs/code/electron-utility/sharedProcess/contrib/logsDataCleaner.ts similarity index 72% rename from src/vs/code/node/sharedProcess/contrib/logsDataCleaner.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/logsDataCleaner.ts index 60a3652ed..384a49a8d 100644 --- a/src/vs/code/node/sharedProcess/contrib/logsDataCleaner.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/logsDataCleaner.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { join } from 'vs/base/common/path'; -import { basename, dirname } from 'vs/base/common/resources'; -import { Promises } from 'vs/base/node/pfs'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService } from 'vs/platform/log/common/log'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { join } from '../../../../base/common/path.js'; +import { basename, dirname } from '../../../../base/common/resources.js'; +import { Promises } from '../../../../base/node/pfs.js'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; export class LogsDataCleaner extends Disposable { diff --git a/src/vs/code/node/sharedProcess/contrib/storageDataCleaner.ts b/src/vs/code/electron-utility/sharedProcess/contrib/storageDataCleaner.ts similarity index 71% rename from src/vs/code/node/sharedProcess/contrib/storageDataCleaner.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/storageDataCleaner.ts index 23af4d227..6e2e213c5 100644 --- a/src/vs/code/node/sharedProcess/contrib/storageDataCleaner.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/storageDataCleaner.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService } from 'vs/platform/log/common/log'; -import { StorageClient } from 'vs/platform/storage/common/storageIpc'; -import { EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE } from 'vs/platform/workspace/common/workspace'; -import { NON_EMPTY_WORKSPACE_ID_LENGTH } from 'vs/platform/workspaces/node/workspaces'; -import { INativeHostService } from 'vs/platform/native/common/native'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { Schemas } from 'vs/base/common/network'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { join } from '../../../../base/common/path.js'; +import { Promises } from '../../../../base/node/pfs.js'; +import { INativeEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { StorageClient } from '../../../../platform/storage/common/storageIpc.js'; +import { EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE } from '../../../../platform/workspace/common/workspace.js'; +import { NON_EMPTY_WORKSPACE_ID_LENGTH } from '../../../../platform/workspaces/node/workspaces.js'; +import { INativeHostService } from '../../../../platform/native/common/native.js'; +import { IMainProcessService } from '../../../../platform/ipc/common/mainProcessService.js'; +import { Schemas } from '../../../../base/common/network.js'; export class UnusedWorkspaceStorageDataCleaner extends Disposable { diff --git a/src/vs/code/node/sharedProcess/contrib/userDataProfilesCleaner.ts b/src/vs/code/electron-utility/sharedProcess/contrib/userDataProfilesCleaner.ts similarity index 73% rename from src/vs/code/node/sharedProcess/contrib/userDataProfilesCleaner.ts rename to src/vs/code/electron-utility/sharedProcess/contrib/userDataProfilesCleaner.ts index 37c57771e..f1fe69dd6 100644 --- a/src/vs/code/node/sharedProcess/contrib/userDataProfilesCleaner.ts +++ b/src/vs/code/electron-utility/sharedProcess/contrib/userDataProfilesCleaner.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js'; export class UserDataProfilesCleaner extends Disposable { diff --git a/src/vs/code/node/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-utility/sharedProcess/sharedProcessMain.ts similarity index 67% rename from src/vs/code/node/sharedProcess/sharedProcessMain.ts rename to src/vs/code/electron-utility/sharedProcess/sharedProcessMain.ts index 69c81ac24..80e8fdab8 100644 --- a/src/vs/code/node/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-utility/sharedProcess/sharedProcessMain.ts @@ -4,121 +4,120 @@ *--------------------------------------------------------------------------------------------*/ import { hostname, release } from 'os'; -import { MessagePortMain, MessageEvent } from 'vs/base/parts/sandbox/node/electronTypes'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { combinedDisposable, Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { firstOrDefault } from 'vs/base/common/arrays'; -import { Emitter } from 'vs/base/common/event'; -import { ProxyChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc'; -import { IClientConnectionFilter, Server as UtilityProcessMessagePortServer, once } from 'vs/base/parts/ipc/node/ipc.mp'; -import { CodeCacheCleaner } from 'vs/code/node/sharedProcess/contrib/codeCacheCleaner'; -import { LanguagePackCachedDataCleaner } from 'vs/code/node/sharedProcess/contrib/languagePackCachedDataCleaner'; -import { LocalizationsUpdater } from 'vs/code/node/sharedProcess/contrib/localizationsUpdater'; -import { LogsDataCleaner } from 'vs/code/node/sharedProcess/contrib/logsDataCleaner'; -import { UnusedWorkspaceStorageDataCleaner } from 'vs/code/node/sharedProcess/contrib/storageDataCleaner'; -import { IChecksumService } from 'vs/platform/checksum/common/checksumService'; -import { ChecksumService } from 'vs/platform/checksum/node/checksumService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { IDiagnosticsService } from 'vs/platform/diagnostics/common/diagnostics'; -import { DiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsService'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { DownloadService } from 'vs/platform/download/common/downloadService'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService'; -import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService'; -import { IExtensionGalleryService, IExtensionManagementService, IExtensionTipsService, IGlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; -import { ExtensionManagementChannel, ExtensionTipsChannel } from 'vs/platform/extensionManagement/common/extensionManagementIpc'; -import { ExtensionManagementService, INativeServerExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; -import { IExtensionRecommendationNotificationService } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; -import { NativeLanguagePackService } from 'vs/platform/languagePacks/node/languagePacks'; -import { ConsoleLogger, ILoggerService, ILogService } from 'vs/platform/log/common/log'; -import { LoggerChannelClient } from 'vs/platform/log/common/logIpc'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { ISharedProcessConfiguration } from 'vs/platform/sharedProcess/node/sharedProcess'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties'; -import { ICustomEndpointTelemetryService, ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc'; -import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender'; -import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; -import { supportsTelemetry, ITelemetryAppender, NullAppender, NullTelemetryService, getPiiPathsFromEnvironment, isInternalTelemetry, isLoggingOnly } from 'vs/platform/telemetry/common/telemetryUtils'; -import { CustomEndpointTelemetryService } from 'vs/platform/telemetry/node/customEndpointTelemetryService'; -import { ExtensionStorageService, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions'; -import { IUserDataSyncLocalStoreService, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration as registerUserDataSyncConfiguration, IUserDataSyncResourceProviderService } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataSyncAccountService, UserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount'; -import { UserDataSyncLocalStoreService } from 'vs/platform/userDataSync/common/userDataSyncLocalStoreService'; -import { UserDataSyncAccountServiceChannel, UserDataSyncStoreManagementServiceChannel } from 'vs/platform/userDataSync/common/userDataSyncIpc'; -import { UserDataSyncLogService } from 'vs/platform/userDataSync/common/userDataSyncLog'; -import { IUserDataSyncMachinesService, UserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; -import { UserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSyncEnablementService'; -import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService'; -import { UserDataSyncServiceChannel } from 'vs/platform/userDataSync/common/userDataSyncServiceIpc'; -import { UserDataSyncStoreManagementService, UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; -import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { SharedProcessUserDataProfileStorageService } from 'vs/platform/userDataProfile/node/userDataProfileStorageService'; -import { ActiveWindowManager } from 'vs/platform/windows/node/windowTracker'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { SignService } from 'vs/platform/sign/node/signService'; -import { ISharedTunnelsService } from 'vs/platform/tunnel/common/tunnel'; -import { SharedTunnelsService } from 'vs/platform/tunnel/node/tunnelService'; -import { ipcSharedProcessTunnelChannelName, ISharedProcessTunnelService } from 'vs/platform/remote/common/sharedProcessTunnelService'; -import { SharedProcessTunnelService } from 'vs/platform/tunnel/node/sharedProcessTunnelService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { isLinux } from 'vs/base/common/platform'; -import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; -import { DiskFileSystemProviderClient, LOCAL_FILE_SYSTEM_CHANNEL_NAME } from 'vs/platform/files/common/diskFileSystemProviderClient'; -import { InspectProfilingService as V8InspectProfilingService } from 'vs/platform/profiling/node/profilingService'; -import { IV8InspectProfilingService } from 'vs/platform/profiling/common/profiling'; -import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionsScannerService } from 'vs/platform/extensionManagement/node/extensionsScannerService'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { PolicyChannelClient } from 'vs/platform/policy/common/policyIpc'; -import { IPolicyService, NullPolicyService } from 'vs/platform/policy/common/policy'; -import { UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfileIpc'; -import { OneDataSystemAppender } from 'vs/platform/telemetry/node/1dsAppender'; -import { UserDataProfilesCleaner } from 'vs/code/node/sharedProcess/contrib/userDataProfilesCleaner'; -import { IRemoteTunnelService } from 'vs/platform/remoteTunnel/common/remoteTunnel'; -import { UserDataSyncResourceProviderService } from 'vs/platform/userDataSync/common/userDataSyncResourceProvider'; -import { ExtensionsContributions } from 'vs/code/node/sharedProcess/contrib/extensions'; -import { localize } from 'vs/nls'; -import { LogService } from 'vs/platform/log/common/logService'; -import { ISharedProcessLifecycleService, SharedProcessLifecycleService } from 'vs/platform/lifecycle/node/sharedProcessLifecycleService'; -import { RemoteTunnelService } from 'vs/platform/remoteTunnel/node/remoteTunnelService'; -import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { RequestChannelClient } from 'vs/platform/request/common/requestIpc'; -import { ExtensionRecommendationNotificationServiceChannelClient } from 'vs/platform/extensionRecommendations/common/extensionRecommendationsIpc'; -import { INativeHostService } from 'vs/platform/native/common/native'; -import { NativeHostService } from 'vs/platform/native/common/nativeHostService'; -import { UserDataAutoSyncService } from 'vs/platform/userDataSync/node/userDataAutoSyncService'; -import { ExtensionTipsService } from 'vs/platform/extensionManagement/node/extensionTipsService'; -import { IMainProcessService, MainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { RemoteStorageService } from 'vs/platform/storage/common/storageService'; -import { IRemoteSocketFactoryService, RemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; -import { RemoteConnectionType } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { nodeSocketFactory } from 'vs/platform/remote/node/nodeSocketFactory'; -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { SharedProcessRawConnection, SharedProcessLifecycle } from 'vs/platform/sharedProcess/common/sharedProcess'; -import { getOSReleaseInfo } from 'vs/base/node/osReleaseInfo'; -import { getDesktopEnvironment } from 'vs/base/common/desktopEnvironmentInfo'; -import { getCodeDisplayProtocol, getDisplayProtocol } from 'vs/base/node/osDisplayProtocolInfo'; +import { MessagePortMain, MessageEvent } from '../../../base/parts/sandbox/node/electronTypes.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { onUnexpectedError, setUnexpectedErrorHandler } from '../../../base/common/errors.js'; +import { combinedDisposable, Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { Emitter } from '../../../base/common/event.js'; +import { ProxyChannel, StaticRouter } from '../../../base/parts/ipc/common/ipc.js'; +import { IClientConnectionFilter, Server as UtilityProcessMessagePortServer, once } from '../../../base/parts/ipc/node/ipc.mp.js'; +import { CodeCacheCleaner } from './contrib/codeCacheCleaner.js'; +import { LanguagePackCachedDataCleaner } from './contrib/languagePackCachedDataCleaner.js'; +import { LocalizationsUpdater } from './contrib/localizationsUpdater.js'; +import { LogsDataCleaner } from './contrib/logsDataCleaner.js'; +import { UnusedWorkspaceStorageDataCleaner } from './contrib/storageDataCleaner.js'; +import { IChecksumService } from '../../../platform/checksum/common/checksumService.js'; +import { ChecksumService } from '../../../platform/checksum/node/checksumService.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ConfigurationService } from '../../../platform/configuration/common/configurationService.js'; +import { IDiagnosticsService } from '../../../platform/diagnostics/common/diagnostics.js'; +import { DiagnosticsService } from '../../../platform/diagnostics/node/diagnosticsService.js'; +import { IDownloadService } from '../../../platform/download/common/download.js'; +import { DownloadService } from '../../../platform/download/common/downloadService.js'; +import { INativeEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { GlobalExtensionEnablementService } from '../../../platform/extensionManagement/common/extensionEnablementService.js'; +import { ExtensionGalleryService } from '../../../platform/extensionManagement/common/extensionGalleryService.js'; +import { IExtensionGalleryService, IExtensionManagementService, IExtensionTipsService, IGlobalExtensionEnablementService } from '../../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from '../../../platform/extensionManagement/node/extensionSignatureVerificationService.js'; +import { ExtensionManagementChannel, ExtensionTipsChannel } from '../../../platform/extensionManagement/common/extensionManagementIpc.js'; +import { ExtensionManagementService, INativeServerExtensionManagementService } from '../../../platform/extensionManagement/node/extensionManagementService.js'; +import { IExtensionRecommendationNotificationService } from '../../../platform/extensionRecommendations/common/extensionRecommendations.js'; +import { IFileService } from '../../../platform/files/common/files.js'; +import { FileService } from '../../../platform/files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../../platform/files/node/diskFileSystemProvider.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { IInstantiationService, ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { InstantiationService } from '../../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { ILanguagePackService } from '../../../platform/languagePacks/common/languagePacks.js'; +import { NativeLanguagePackService } from '../../../platform/languagePacks/node/languagePacks.js'; +import { ConsoleLogger, ILoggerService, ILogService } from '../../../platform/log/common/log.js'; +import { LoggerChannelClient } from '../../../platform/log/common/logIpc.js'; +import product from '../../../platform/product/common/product.js'; +import { IProductService } from '../../../platform/product/common/productService.js'; +import { IRequestService } from '../../../platform/request/common/request.js'; +import { ISharedProcessConfiguration } from '../../../platform/sharedProcess/node/sharedProcess.js'; +import { IStorageService } from '../../../platform/storage/common/storage.js'; +import { resolveCommonProperties } from '../../../platform/telemetry/common/commonProperties.js'; +import { ICustomEndpointTelemetryService, ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { TelemetryAppenderChannel } from '../../../platform/telemetry/common/telemetryIpc.js'; +import { TelemetryLogAppender } from '../../../platform/telemetry/common/telemetryLogAppender.js'; +import { TelemetryService } from '../../../platform/telemetry/common/telemetryService.js'; +import { supportsTelemetry, ITelemetryAppender, NullAppender, NullTelemetryService, getPiiPathsFromEnvironment, isInternalTelemetry, isLoggingOnly } from '../../../platform/telemetry/common/telemetryUtils.js'; +import { CustomEndpointTelemetryService } from '../../../platform/telemetry/node/customEndpointTelemetryService.js'; +import { ExtensionStorageService, IExtensionStorageService } from '../../../platform/extensionManagement/common/extensionStorage.js'; +import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from '../../../platform/userDataSync/common/ignoredExtensions.js'; +import { IUserDataSyncLocalStoreService, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration as registerUserDataSyncConfiguration, IUserDataSyncResourceProviderService } from '../../../platform/userDataSync/common/userDataSync.js'; +import { IUserDataSyncAccountService, UserDataSyncAccountService } from '../../../platform/userDataSync/common/userDataSyncAccount.js'; +import { UserDataSyncLocalStoreService } from '../../../platform/userDataSync/common/userDataSyncLocalStoreService.js'; +import { UserDataSyncAccountServiceChannel, UserDataSyncStoreManagementServiceChannel } from '../../../platform/userDataSync/common/userDataSyncIpc.js'; +import { UserDataSyncLogService } from '../../../platform/userDataSync/common/userDataSyncLog.js'; +import { IUserDataSyncMachinesService, UserDataSyncMachinesService } from '../../../platform/userDataSync/common/userDataSyncMachines.js'; +import { UserDataSyncEnablementService } from '../../../platform/userDataSync/common/userDataSyncEnablementService.js'; +import { UserDataSyncService } from '../../../platform/userDataSync/common/userDataSyncService.js'; +import { UserDataSyncServiceChannel } from '../../../platform/userDataSync/common/userDataSyncServiceIpc.js'; +import { UserDataSyncStoreManagementService, UserDataSyncStoreService } from '../../../platform/userDataSync/common/userDataSyncStoreService.js'; +import { IUserDataProfileStorageService } from '../../../platform/userDataProfile/common/userDataProfileStorageService.js'; +import { SharedProcessUserDataProfileStorageService } from '../../../platform/userDataProfile/node/userDataProfileStorageService.js'; +import { ActiveWindowManager } from '../../../platform/windows/node/windowTracker.js'; +import { ISignService } from '../../../platform/sign/common/sign.js'; +import { SignService } from '../../../platform/sign/node/signService.js'; +import { ISharedTunnelsService } from '../../../platform/tunnel/common/tunnel.js'; +import { SharedTunnelsService } from '../../../platform/tunnel/node/tunnelService.js'; +import { ipcSharedProcessTunnelChannelName, ISharedProcessTunnelService } from '../../../platform/remote/common/sharedProcessTunnelService.js'; +import { SharedProcessTunnelService } from '../../../platform/tunnel/node/sharedProcessTunnelService.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../../platform/uriIdentity/common/uriIdentityService.js'; +import { isLinux } from '../../../base/common/platform.js'; +import { FileUserDataProvider } from '../../../platform/userData/common/fileUserDataProvider.js'; +import { DiskFileSystemProviderClient, LOCAL_FILE_SYSTEM_CHANNEL_NAME } from '../../../platform/files/common/diskFileSystemProviderClient.js'; +import { InspectProfilingService as V8InspectProfilingService } from '../../../platform/profiling/node/profilingService.js'; +import { IV8InspectProfilingService } from '../../../platform/profiling/common/profiling.js'; +import { IExtensionsScannerService } from '../../../platform/extensionManagement/common/extensionsScannerService.js'; +import { ExtensionsScannerService } from '../../../platform/extensionManagement/node/extensionsScannerService.js'; +import { IUserDataProfilesService } from '../../../platform/userDataProfile/common/userDataProfile.js'; +import { IExtensionsProfileScannerService } from '../../../platform/extensionManagement/common/extensionsProfileScannerService.js'; +import { PolicyChannelClient } from '../../../platform/policy/common/policyIpc.js'; +import { IPolicyService, NullPolicyService } from '../../../platform/policy/common/policy.js'; +import { UserDataProfilesService } from '../../../platform/userDataProfile/common/userDataProfileIpc.js'; +import { OneDataSystemAppender } from '../../../platform/telemetry/node/1dsAppender.js'; +import { UserDataProfilesCleaner } from './contrib/userDataProfilesCleaner.js'; +import { IRemoteTunnelService } from '../../../platform/remoteTunnel/common/remoteTunnel.js'; +import { UserDataSyncResourceProviderService } from '../../../platform/userDataSync/common/userDataSyncResourceProvider.js'; +import { ExtensionsContributions } from './contrib/extensions.js'; +import { localize } from '../../../nls.js'; +import { LogService } from '../../../platform/log/common/logService.js'; +import { ISharedProcessLifecycleService, SharedProcessLifecycleService } from '../../../platform/lifecycle/node/sharedProcessLifecycleService.js'; +import { RemoteTunnelService } from '../../../platform/remoteTunnel/node/remoteTunnelService.js'; +import { ExtensionsProfileScannerService } from '../../../platform/extensionManagement/node/extensionsProfileScannerService.js'; +import { ExtensionRecommendationNotificationServiceChannelClient } from '../../../platform/extensionRecommendations/common/extensionRecommendationsIpc.js'; +import { INativeHostService } from '../../../platform/native/common/native.js'; +import { NativeHostService } from '../../../platform/native/common/nativeHostService.js'; +import { UserDataAutoSyncService } from '../../../platform/userDataSync/node/userDataAutoSyncService.js'; +import { ExtensionTipsService } from '../../../platform/extensionManagement/node/extensionTipsService.js'; +import { IMainProcessService, MainProcessService } from '../../../platform/ipc/common/mainProcessService.js'; +import { RemoteStorageService } from '../../../platform/storage/common/storageService.js'; +import { IRemoteSocketFactoryService, RemoteSocketFactoryService } from '../../../platform/remote/common/remoteSocketFactoryService.js'; +import { RemoteConnectionType } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { nodeSocketFactory } from '../../../platform/remote/node/nodeSocketFactory.js'; +import { NativeEnvironmentService } from '../../../platform/environment/node/environmentService.js'; +import { SharedProcessRawConnection, SharedProcessLifecycle } from '../../../platform/sharedProcess/common/sharedProcess.js'; +import { getOSReleaseInfo } from '../../../base/node/osReleaseInfo.js'; +import { getDesktopEnvironment } from '../../../base/common/desktopEnvironmentInfo.js'; +import { getCodeDisplayProtocol, getDisplayProtocol } from '../../../base/node/osDisplayProtocolInfo.js'; +import { RequestService } from '../../../platform/request/electron-utility/requestService.js'; class SharedProcessMain extends Disposable implements IClientConnectionFilter { @@ -271,7 +270,7 @@ class SharedProcessMain extends Disposable implements IClientConnectionFilter { ]); // Request - const requestService = new RequestChannelClient(mainProcessService.getChannel('request')); + const requestService = new RequestService(configurationService, environmentService, logService); services.set(IRequestService, requestService); // Checksum @@ -327,7 +326,14 @@ class SharedProcessMain extends Disposable implements IClientConnectionFilter { // Extension Management services.set(IExtensionsProfileScannerService, new SyncDescriptor(ExtensionsProfileScannerService, undefined, true)); services.set(IExtensionsScannerService, new SyncDescriptor(ExtensionsScannerService, undefined, true)); - services.set(IExtensionSignatureVerificationService, new SyncDescriptor(ExtensionSignatureVerificationService, undefined, true)); + + if (productService.quality === 'stable') { + services.set(IExtensionSignatureVerificationService, new SyncDescriptor(ExtensionSignatureVerificationService, undefined, true)); + } else { + // Do extension signature verification in the main process in insiders + services.set(IExtensionSignatureVerificationService, ProxyChannel.toService(mainProcessService.getChannel('signatureVerificationService'))); + } + services.set(INativeServerExtensionManagementService, new SyncDescriptor(ExtensionManagementService, undefined, true)); // Extension Gallery @@ -514,7 +520,7 @@ class SharedProcessMain extends Disposable implements IClientConnectionFilter { return false; } - const port = firstOrDefault(e.ports); + const port = e.ports.at(0); if (port) { this.onDidWindowConnectRaw.fire(port); diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index 58e394564..b25377a80 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -7,27 +7,27 @@ import { ChildProcess, spawn, SpawnOptions, StdioOptions } from 'child_process'; import { chmodSync, existsSync, readFileSync, statSync, truncateSync, unlinkSync } from 'fs'; import { homedir, release, tmpdir } from 'os'; import type { ProfilingSession, Target } from 'v8-inspect-profiler'; -import { Event } from 'vs/base/common/event'; -import { isAbsolute, resolve, join, dirname } from 'vs/base/common/path'; -import { IProcessEnvironment, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { randomPort } from 'vs/base/common/ports'; -import { whenDeleted, writeFileSync } from 'vs/base/node/pfs'; -import { findFreePort } from 'vs/base/node/ports'; -import { watchFileContents } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcherLib'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { buildHelpMessage, buildVersionMessage, NATIVE_CLI_COMMANDS, OPTIONS } from 'vs/platform/environment/node/argv'; -import { addArg, parseCLIProcessArgv } from 'vs/platform/environment/node/argvHelper'; -import { getStdinFilePath, hasStdinWithoutTty, readFromStdin, stdinDataListener } from 'vs/platform/environment/node/stdin'; -import { createWaitMarkerFileSync } from 'vs/platform/environment/node/wait'; -import product from 'vs/platform/product/common/product'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isUNC, randomPath } from 'vs/base/common/extpath'; -import { Utils } from 'vs/platform/profiling/common/profiling'; -import { FileAccess } from 'vs/base/common/network'; -import { cwd } from 'vs/base/common/process'; -import { addUNCHostToAllowlist } from 'vs/base/node/unc'; -import { URI } from 'vs/base/common/uri'; -import { DeferredPromise } from 'vs/base/common/async'; +import { Event } from '../../base/common/event.js'; +import { isAbsolute, resolve, join, dirname } from '../../base/common/path.js'; +import { IProcessEnvironment, isMacintosh, isWindows } from '../../base/common/platform.js'; +import { randomPort } from '../../base/common/ports.js'; +import { whenDeleted, writeFileSync } from '../../base/node/pfs.js'; +import { findFreePort } from '../../base/node/ports.js'; +import { watchFileContents } from '../../platform/files/node/watcher/nodejs/nodejsWatcherLib.js'; +import { NativeParsedArgs } from '../../platform/environment/common/argv.js'; +import { buildHelpMessage, buildVersionMessage, NATIVE_CLI_COMMANDS, OPTIONS } from '../../platform/environment/node/argv.js'; +import { addArg, parseCLIProcessArgv } from '../../platform/environment/node/argvHelper.js'; +import { getStdinFilePath, hasStdinWithoutTty, readFromStdin, stdinDataListener } from '../../platform/environment/node/stdin.js'; +import { createWaitMarkerFileSync } from '../../platform/environment/node/wait.js'; +import product from '../../platform/product/common/product.js'; +import { CancellationTokenSource } from '../../base/common/cancellation.js'; +import { isUNC, randomPath } from '../../base/common/extpath.js'; +import { Utils } from '../../platform/profiling/common/profiling.js'; +import { FileAccess } from '../../base/common/network.js'; +import { cwd } from '../../base/common/process.js'; +import { addUNCHostToAllowlist } from '../../base/node/unc.js'; +import { URI } from '../../base/common/uri.js'; +import { DeferredPromise } from '../../base/common/async.js'; function shouldSpawnCliProcess(argv: NativeParsedArgs): boolean { return !!argv['install-source'] @@ -112,12 +112,12 @@ export async function main(argv: string[]): Promise { case 'fish': file = 'fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish'; break; default: throw new Error('Error using --locate-shell-integration-path: Invalid shell type'); } - console.log(join(getAppRoot(), 'out', 'vs', 'workbench', 'contrib', 'terminal', 'browser', 'media', file)); + console.log(join(getAppRoot(), 'out', 'vs', 'workbench', 'contrib', 'terminal', 'common', 'scripts', file)); } // Extensions Management else if (shouldSpawnCliProcess(args)) { - const cli = await import(['vs', 'code', 'node', 'cliProcessMain'].join('/') /* TODO@esm workaround to prevent esbuild from inlining this */); + const cli = await import(['./cliProcessMain.js'].join('/') /* TODO@esm workaround to prevent esbuild from inlining this */); await cli.main(args); return; diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index f940e372a..d3b20ecea 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -5,65 +5,65 @@ import * as fs from 'fs'; import { hostname, release } from 'os'; -import { raceTimeout } from 'vs/base/common/async'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { isAbsolute, join } from 'vs/base/common/path'; -import { isWindows } from 'vs/base/common/platform'; -import { cwd } from 'vs/base/common/process'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { DownloadService } from 'vs/platform/download/common/downloadService'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { ExtensionGalleryServiceWithNoStorageService } from 'vs/platform/extensionManagement/common/extensionGalleryService'; -import { IExtensionGalleryService, InstallOptions } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; -import { ExtensionManagementCLI } from 'vs/platform/extensionManagement/common/extensionManagementCLI'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionManagementService, INativeServerExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; -import { ExtensionsScannerService } from 'vs/platform/extensionManagement/node/extensionsScannerService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; -import { NativeLanguagePackService } from 'vs/platform/languagePacks/node/languagePacks'; -import { ConsoleLogger, getLogLevel, ILogger, ILoggerService, ILogService, LogLevel } from 'vs/platform/log/common/log'; -import { FilePolicyService } from 'vs/platform/policy/common/filePolicyService'; -import { IPolicyService, NullPolicyService } from 'vs/platform/policy/common/policy'; -import { NativePolicyService } from 'vs/platform/policy/node/nativePolicyService'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { RequestService } from 'vs/platform/request/node/requestService'; -import { SaveStrategy, StateReadonlyService } from 'vs/platform/state/node/stateService'; -import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; -import { supportsTelemetry, NullTelemetryService, getPiiPathsFromEnvironment, isInternalTelemetry, ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils'; -import { OneDataSystemAppender } from 'vs/platform/telemetry/node/1dsAppender'; -import { buildTelemetryMessage } from 'vs/platform/telemetry/node/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UserDataProfilesReadonlyService } from 'vs/platform/userDataProfile/node/userDataProfile'; -import { resolveMachineId, resolveSqmId, resolvedevDeviceId } from 'vs/platform/telemetry/node/telemetryUtils'; -import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { LogService } from 'vs/platform/log/common/logService'; -import { LoggerService } from 'vs/platform/log/node/loggerService'; -import { localize } from 'vs/nls'; -import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; -import { addUNCHostToAllowlist, getUNCHost } from 'vs/base/node/unc'; +import { raceTimeout } from '../../base/common/async.js'; +import { toErrorMessage } from '../../base/common/errorMessage.js'; +import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js'; +import { Disposable } from '../../base/common/lifecycle.js'; +import { Schemas } from '../../base/common/network.js'; +import { isAbsolute, join } from '../../base/common/path.js'; +import { isWindows } from '../../base/common/platform.js'; +import { cwd } from '../../base/common/process.js'; +import { URI } from '../../base/common/uri.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; +import { IDownloadService } from '../../platform/download/common/download.js'; +import { DownloadService } from '../../platform/download/common/downloadService.js'; +import { NativeParsedArgs } from '../../platform/environment/common/argv.js'; +import { INativeEnvironmentService } from '../../platform/environment/common/environment.js'; +import { NativeEnvironmentService } from '../../platform/environment/node/environmentService.js'; +import { ExtensionGalleryServiceWithNoStorageService } from '../../platform/extensionManagement/common/extensionGalleryService.js'; +import { IExtensionGalleryService, InstallOptions } from '../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from '../../platform/extensionManagement/node/extensionSignatureVerificationService.js'; +import { ExtensionManagementCLI } from '../../platform/extensionManagement/common/extensionManagementCLI.js'; +import { IExtensionsProfileScannerService } from '../../platform/extensionManagement/common/extensionsProfileScannerService.js'; +import { IExtensionsScannerService } from '../../platform/extensionManagement/common/extensionsScannerService.js'; +import { ExtensionManagementService, INativeServerExtensionManagementService } from '../../platform/extensionManagement/node/extensionManagementService.js'; +import { ExtensionsScannerService } from '../../platform/extensionManagement/node/extensionsScannerService.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { FileService } from '../../platform/files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystemProvider.js'; +import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { InstantiationService } from '../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js'; +import { ILanguagePackService } from '../../platform/languagePacks/common/languagePacks.js'; +import { NativeLanguagePackService } from '../../platform/languagePacks/node/languagePacks.js'; +import { ConsoleLogger, getLogLevel, ILogger, ILoggerService, ILogService, LogLevel } from '../../platform/log/common/log.js'; +import { FilePolicyService } from '../../platform/policy/common/filePolicyService.js'; +import { IPolicyService, NullPolicyService } from '../../platform/policy/common/policy.js'; +import { NativePolicyService } from '../../platform/policy/node/nativePolicyService.js'; +import product from '../../platform/product/common/product.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { IRequestService } from '../../platform/request/common/request.js'; +import { RequestService } from '../../platform/request/node/requestService.js'; +import { SaveStrategy, StateReadonlyService } from '../../platform/state/node/stateService.js'; +import { resolveCommonProperties } from '../../platform/telemetry/common/commonProperties.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { ITelemetryServiceConfig, TelemetryService } from '../../platform/telemetry/common/telemetryService.js'; +import { supportsTelemetry, NullTelemetryService, getPiiPathsFromEnvironment, isInternalTelemetry, ITelemetryAppender } from '../../platform/telemetry/common/telemetryUtils.js'; +import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; +import { buildTelemetryMessage } from '../../platform/telemetry/node/telemetry.js'; +import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../platform/uriIdentity/common/uriIdentityService.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js'; +import { UserDataProfilesReadonlyService } from '../../platform/userDataProfile/node/userDataProfile.js'; +import { resolveMachineId, resolveSqmId, resolvedevDeviceId } from '../../platform/telemetry/node/telemetryUtils.js'; +import { ExtensionsProfileScannerService } from '../../platform/extensionManagement/node/extensionsProfileScannerService.js'; +import { LogService } from '../../platform/log/common/logService.js'; +import { LoggerService } from '../../platform/log/node/loggerService.js'; +import { localize } from '../../nls.js'; +import { FileUserDataProvider } from '../../platform/userData/common/fileUserDataProvider.js'; +import { addUNCHostToAllowlist, getUNCHost } from '../../base/node/unc.js'; class CliMain extends Disposable { @@ -195,7 +195,7 @@ class CliMain extends Disposable { services.set(IUriIdentityService, new UriIdentityService(fileService)); // Request - const requestService = new RequestService(configurationService, environmentService, logService, loggerService); + const requestService = new RequestService(configurationService, environmentService, logService); services.set(IRequestService, requestService); // Download Service diff --git a/src/vs/editor/browser/config/charWidthReader.ts b/src/vs/editor/browser/config/charWidthReader.ts index e1d36f142..98846a73d 100644 --- a/src/vs/editor/browser/config/charWidthReader.ts +++ b/src/vs/editor/browser/config/charWidthReader.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; +import { applyFontInfo } from './domFontInfo.js'; +import { BareFontInfo } from '../../common/config/fontInfo.js'; export const enum CharWidthRequestType { Regular = 0, diff --git a/src/vs/editor/browser/config/domFontInfo.ts b/src/vs/editor/browser/config/domFontInfo.ts index dc4f38c54..7c235cb92 100644 --- a/src/vs/editor/browser/config/domFontInfo.ts +++ b/src/vs/editor/browser/config/domFontInfo.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode } from 'vs/base/browser/fastDomNode'; -import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; +import { FastDomNode } from '../../../base/browser/fastDomNode.js'; +import { BareFontInfo } from '../../common/config/fontInfo.js'; export function applyFontInfo(domNode: FastDomNode | HTMLElement, fontInfo: BareFontInfo): void { if (domNode instanceof FastDomNode) { diff --git a/src/vs/editor/browser/config/editorConfiguration.ts b/src/vs/editor/browser/config/editorConfiguration.ts index 4de800bd5..d65d85cfe 100644 --- a/src/vs/editor/browser/config/editorConfiguration.ts +++ b/src/vs/editor/browser/config/editorConfiguration.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as browser from 'vs/base/browser/browser'; -import * as arrays from 'vs/base/common/arrays'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as objects from 'vs/base/common/objects'; -import * as platform from 'vs/base/common/platform'; -import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver'; -import { FontMeasurements } from 'vs/editor/browser/config/fontMeasurements'; -import { migrateOptions } from 'vs/editor/browser/config/migrateOptions'; -import { TabFocus } from 'vs/editor/browser/config/tabFocus'; -import { ComputeOptionsMemory, ConfigurationChangedEvent, EditorOption, editorOptionsRegistry, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, IEnvironmentalOptions } from 'vs/editor/common/config/editorOptions'; -import { EditorZoom } from 'vs/editor/common/config/editorZoom'; -import { BareFontInfo, FontInfo, IValidatedEditorOptions } from 'vs/editor/common/config/fontInfo'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { AccessibilitySupport, IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { getWindow, getWindowById } from 'vs/base/browser/dom'; -import { PixelRatio } from 'vs/base/browser/pixelRatio'; -import { MenuId } from 'vs/platform/actions/common/actions'; +import * as browser from '../../../base/browser/browser.js'; +import * as arrays from '../../../base/common/arrays.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import * as objects from '../../../base/common/objects.js'; +import * as platform from '../../../base/common/platform.js'; +import { ElementSizeObserver } from './elementSizeObserver.js'; +import { FontMeasurements } from './fontMeasurements.js'; +import { migrateOptions } from './migrateOptions.js'; +import { TabFocus } from './tabFocus.js'; +import { ComputeOptionsMemory, ConfigurationChangedEvent, EditorOption, editorOptionsRegistry, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, IEnvironmentalOptions } from '../../common/config/editorOptions.js'; +import { EditorZoom } from '../../common/config/editorZoom.js'; +import { BareFontInfo, FontInfo, IValidatedEditorOptions } from '../../common/config/fontInfo.js'; +import { IDimension } from '../../common/core/dimension.js'; +import { IEditorConfiguration } from '../../common/config/editorConfiguration.js'; +import { AccessibilitySupport, IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js'; +import { getWindow, getWindowById } from '../../../base/browser/dom.js'; +import { PixelRatio } from '../../../base/browser/pixelRatio.js'; +import { MenuId } from '../../../platform/actions/common/actions.js'; export interface IEditorConstructionOptions extends IEditorOptions { /** diff --git a/src/vs/editor/browser/config/elementSizeObserver.ts b/src/vs/editor/browser/config/elementSizeObserver.ts index 33eefc3ab..303d6377c 100644 --- a/src/vs/editor/browser/config/elementSizeObserver.ts +++ b/src/vs/editor/browser/config/elementSizeObserver.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { Emitter, Event } from 'vs/base/common/event'; -import { getWindow, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IDimension } from '../../common/core/dimension.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { getWindow, scheduleAtNextAnimationFrame } from '../../../base/browser/dom.js'; export class ElementSizeObserver extends Disposable { diff --git a/src/vs/editor/browser/config/fontMeasurements.ts b/src/vs/editor/browser/config/fontMeasurements.ts index 4b1ac7e21..d9a5cb897 100644 --- a/src/vs/editor/browser/config/fontMeasurements.ts +++ b/src/vs/editor/browser/config/fontMeasurements.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getWindowId } from 'vs/base/browser/dom'; -import { PixelRatio } from 'vs/base/browser/pixelRatio'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { CharWidthRequest, CharWidthRequestType, readCharWidths } from 'vs/editor/browser/config/charWidthReader'; -import { EditorFontLigatures } from 'vs/editor/common/config/editorOptions'; -import { BareFontInfo, FontInfo, SERIALIZED_FONT_INFO_VERSION } from 'vs/editor/common/config/fontInfo'; +import { getWindowId } from '../../../base/browser/dom.js'; +import { PixelRatio } from '../../../base/browser/pixelRatio.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { CharWidthRequest, CharWidthRequestType, readCharWidths } from './charWidthReader.js'; +import { EditorFontLigatures } from '../../common/config/editorOptions.js'; +import { BareFontInfo, FontInfo, SERIALIZED_FONT_INFO_VERSION } from '../../common/config/fontInfo.js'; /** * Serializable font information. diff --git a/src/vs/editor/browser/config/migrateOptions.ts b/src/vs/editor/browser/config/migrateOptions.ts index c98f644a3..622994ed7 100644 --- a/src/vs/editor/browser/config/migrateOptions.ts +++ b/src/vs/editor/browser/config/migrateOptions.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { IEditorOptions } from '../../common/config/editorOptions.js'; export interface ISettingsReader { (key: string): any; diff --git a/src/vs/editor/browser/config/tabFocus.ts b/src/vs/editor/browser/config/tabFocus.ts index f0102e4c0..6d821bc27 100644 --- a/src/vs/editor/browser/config/tabFocus.ts +++ b/src/vs/editor/browser/config/tabFocus.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; +import { Emitter, Event } from '../../../base/common/event.js'; class TabFocusImpl { private _tabFocus: boolean = false; diff --git a/src/vs/editor/browser/controller/editContext/clipboardUtils.ts b/src/vs/editor/browser/controller/editContext/clipboardUtils.ts new file mode 100644 index 000000000..d7091d613 --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/clipboardUtils.ts @@ -0,0 +1,86 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { IViewModel } from '../../../common/viewModel.js'; +import { Range } from '../../../common/core/range.js'; +import { isWindows } from '../../../../base/common/platform.js'; + +export function getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy { + const rawTextToCopy = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows); + const newLineCharacter = viewModel.model.getEOL(); + + const isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty()); + const multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null); + const text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy); + + let html: string | null | undefined = undefined; + let mode: string | null = null; + if (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && text.length < 65536)) { + const richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard); + if (richText) { + html = richText.html; + mode = richText.mode; + } + } + const dataToCopy: ClipboardDataToCopy = { + isFromEmptySelection, + multicursorText, + text, + html, + mode + }; + return dataToCopy; +} + +/** + * Every time we write to the clipboard, we record a bit of extra metadata here. + * Every time we read from the cipboard, if the text matches our last written text, + * we can fetch the previous metadata. + */ +export class InMemoryClipboardMetadataManager { + public static readonly INSTANCE = new InMemoryClipboardMetadataManager(); + + private _lastState: InMemoryClipboardMetadata | null; + + constructor() { + this._lastState = null; + } + + public set(lastCopiedValue: string, data: ClipboardStoredMetadata): void { + this._lastState = { lastCopiedValue, data }; + } + + public get(pastedText: string): ClipboardStoredMetadata | null { + if (this._lastState && this._lastState.lastCopiedValue === pastedText) { + // match! + return this._lastState.data; + } + this._lastState = null; + return null; + } +} + +export interface ClipboardDataToCopy { + isFromEmptySelection: boolean; + multicursorText: string[] | null | undefined; + text: string; + html: string | null | undefined; + mode: string | null; +} + +export interface ClipboardStoredMetadata { + version: 1; + isFromEmptySelection: boolean | undefined; + multicursorText: string[] | null | undefined; + mode: string | null; +} + +export const CopyOptions = { + forceCopyWithSyntaxHighlighting: false +}; + +interface InMemoryClipboardMetadata { + lastCopiedValue: string; + data: ClipboardStoredMetadata; +} diff --git a/src/vs/editor/browser/controller/editContext/editContextUtils.ts b/src/vs/editor/browser/controller/editContext/editContextUtils.ts new file mode 100644 index 000000000..19f284b10 --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/editContextUtils.ts @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { FastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { Position } from '../../../common/core/position.js'; +import { IEditorAriaOptions } from '../../editorBrowser.js'; +import { ViewPart } from '../../view/viewPart.js'; + +export abstract class AbstractEditContext extends ViewPart { + abstract domNode: FastDomNode; + abstract appendTo(overflowGuardContainer: FastDomNode): void; + abstract focus(): void; + abstract isFocused(): boolean; + abstract refreshFocusState(): void; + abstract setAriaOptions(options: IEditorAriaOptions): void; + abstract getLastRenderData(): Position | null; + abstract writeScreenReaderContent(reason: string): void; +} diff --git a/src/vs/editor/browser/controller/editContext/native/debugEditContext.ts b/src/vs/editor/browser/controller/editContext/native/debugEditContext.ts new file mode 100644 index 000000000..301c21dc5 --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/native/debugEditContext.ts @@ -0,0 +1,225 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +const COLOR_FOR_CONTROL_BOUNDS = 'blue'; +const COLOR_FOR_SELECTION_BOUNDS = 'red'; +const COLOR_FOR_CHARACTER_BOUNDS = 'green'; + +export class DebugEditContext extends EditContext { + private _isDebugging = true; + private _controlBounds: DOMRect | null = null; + private _selectionBounds: DOMRect | null = null; + private _characterBounds: { rangeStart: number; characterBounds: DOMRect[] } | null = null; + + constructor(options?: EditContextInit | undefined) { + super(options); + } + + override updateText(rangeStart: number, rangeEnd: number, text: string): void { + super.updateText(rangeStart, rangeEnd, text); + this.renderDebug(); + } + override updateSelection(start: number, end: number): void { + super.updateSelection(start, end); + this.renderDebug(); + } + override updateControlBounds(controlBounds: DOMRect): void { + super.updateControlBounds(controlBounds); + this._controlBounds = controlBounds; + this.renderDebug(); + } + override updateSelectionBounds(selectionBounds: DOMRect): void { + super.updateSelectionBounds(selectionBounds); + this._selectionBounds = selectionBounds; + this.renderDebug(); + } + override updateCharacterBounds(rangeStart: number, characterBounds: DOMRect[]): void { + super.updateCharacterBounds(rangeStart, characterBounds); + this._characterBounds = { rangeStart, characterBounds }; + this.renderDebug(); + } + override attachedElements(): HTMLElement[] { + return super.attachedElements(); + } + + override characterBounds(): DOMRect[] { + return super.characterBounds(); + } + + private readonly _ontextupdateWrapper = new EventListenerWrapper('textupdate', this); + private readonly _ontextformatupdateWrapper = new EventListenerWrapper('textformatupdate', this); + private readonly _oncharacterboundsupdateWrapper = new EventListenerWrapper('characterboundsupdate', this); + private readonly _oncompositionstartWrapper = new EventListenerWrapper('compositionstart', this); + private readonly _oncompositionendWrapper = new EventListenerWrapper('compositionend', this); + + override get ontextupdate(): EventHandler | null { return this._ontextupdateWrapper.eventHandler; } + override set ontextupdate(value: EventHandler | null) { this._ontextupdateWrapper.eventHandler = value; } + override get ontextformatupdate(): EventHandler | null { return this._ontextformatupdateWrapper.eventHandler; } + override set ontextformatupdate(value: EventHandler | null) { this._ontextformatupdateWrapper.eventHandler = value; } + override get oncharacterboundsupdate(): EventHandler | null { return this._oncharacterboundsupdateWrapper.eventHandler; } + override set oncharacterboundsupdate(value: EventHandler | null) { this._oncharacterboundsupdateWrapper.eventHandler = value; } + override get oncompositionstart(): EventHandler | null { return this._oncompositionstartWrapper.eventHandler; } + override set oncompositionstart(value: EventHandler | null) { this._oncompositionstartWrapper.eventHandler = value; } + override get oncompositionend(): EventHandler | null { return this._oncompositionendWrapper.eventHandler; } + override set oncompositionend(value: EventHandler | null) { this._oncompositionendWrapper.eventHandler = value; } + + + private readonly _listenerMap = new Map(); + + override addEventListener(type: K, listener: (this: GlobalEventHandlers, ev: EditContextEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + override addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void { + if (!listener) { return; } + + const debugListener = (event: Event) => { + if (this._isDebugging) { + this.renderDebug(); + console.log(`DebugEditContex.on_${type}`, event); + } + if (typeof listener === 'function') { + listener.call(this, event); + } else if (typeof listener === 'object' && 'handleEvent' in listener) { + listener.handleEvent(event); + } + }; + this._listenerMap.set(listener, debugListener); + super.addEventListener(type, debugListener, options); + this.renderDebug(); + } + + override removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions | undefined): void { + if (!listener) { return; } + const debugListener = this._listenerMap.get(listener); + if (debugListener) { + super.removeEventListener(type, debugListener, options); + this._listenerMap.delete(listener); + } + this.renderDebug(); + } + + override dispatchEvent(event: Event): boolean { + return super.dispatchEvent(event); + } + + public startDebugging() { + this._isDebugging = true; + this.renderDebug(); + } + + public endDebugging() { + this._isDebugging = false; + this.renderDebug(); + } + + private _disposables: { dispose(): void }[] = []; + + public renderDebug() { + this._disposables.forEach(d => d.dispose()); + this._disposables = []; + if (!this._isDebugging || this._listenerMap.size === 0) { + return; + } + if (this._controlBounds) { + this._disposables.push(createRect(this._controlBounds, COLOR_FOR_CONTROL_BOUNDS)); + } + if (this._selectionBounds) { + this._disposables.push(createRect(this._selectionBounds, COLOR_FOR_SELECTION_BOUNDS)); + } + if (this._characterBounds) { + for (const rect of this._characterBounds.characterBounds) { + this._disposables.push(createRect(rect, COLOR_FOR_CHARACTER_BOUNDS)); + } + } + this._disposables.push(createDiv(this.text, this.selectionStart, this.selectionEnd)); + } +} + +function createDiv(text: string, selectionStart: number, selectionEnd: number) { + const ret = document.createElement('div'); + ret.className = 'debug-rect-marker'; + ret.style.position = 'absolute'; + ret.style.zIndex = '999999999'; + ret.style.bottom = '50px'; + ret.style.left = '60px'; + ret.style.backgroundColor = 'white'; + ret.style.border = '1px solid black'; + ret.style.padding = '5px'; + ret.style.whiteSpace = 'pre'; + ret.style.font = '12px monospace'; + ret.style.pointerEvents = 'none'; + + const before = text.substring(0, selectionStart); + const selected = text.substring(selectionStart, selectionEnd) || '|'; + const after = text.substring(selectionEnd) + ' '; + + const beforeNode = document.createTextNode(before); + ret.appendChild(beforeNode); + + const selectedNode = document.createElement('span'); + selectedNode.style.backgroundColor = 'yellow'; + selectedNode.appendChild(document.createTextNode(selected)); + + selectedNode.style.minWidth = '2px'; + selectedNode.style.minHeight = '16px'; + ret.appendChild(selectedNode); + + const afterNode = document.createTextNode(after); + ret.appendChild(afterNode); + + // eslint-disable-next-line no-restricted-syntax + document.body.appendChild(ret); + + return { + dispose: () => { + ret.remove(); + } + }; +} + +function createRect(rect: DOMRect, color: 'green' | 'blue' | 'red') { + const ret = document.createElement('div'); + ret.className = 'debug-rect-marker'; + ret.style.position = 'absolute'; + ret.style.zIndex = '999999999'; + ret.style.outline = `2px solid ${color}`; + ret.style.pointerEvents = 'none'; + + ret.style.top = rect.top + 'px'; + ret.style.left = rect.left + 'px'; + ret.style.width = rect.width + 'px'; + ret.style.height = rect.height + 'px'; + + // eslint-disable-next-line no-restricted-syntax + document.body.appendChild(ret); + + return { + dispose: () => { + ret.remove(); + } + }; +} + +class EventListenerWrapper { + private _eventHandler: EventHandler | null = null; + + constructor( + private readonly _eventType: string, + private readonly _target: EventTarget, + ) { + } + + get eventHandler(): EventHandler | null { + return this._eventHandler; + } + + set eventHandler(value: EventHandler | null) { + if (this._eventHandler) { + this._target.removeEventListener(this._eventType, this._eventHandler); + } + this._eventHandler = value; + if (value) { + this._target.addEventListener(this._eventType, value); + } + } +} diff --git a/src/vs/editor/browser/controller/editContext/native/nativeEditContext.css b/src/vs/editor/browser/controller/editContext/native/nativeEditContext.css new file mode 100644 index 000000000..e093d99a7 --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/native/nativeEditContext.css @@ -0,0 +1,56 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +.monaco-editor .native-edit-context { + margin: 0; + padding: 0; + position: absolute; + overflow: hidden; + z-index: -10; + white-space: pre-wrap; + text-wrap: nowrap; +} + +.monaco-editor .edit-context-format-decoration { + text-decoration-line: underline; + /* TODO @aiday chose a theme color */ + text-decoration-color: blue; + color: var(--vscode-editor-foreground, inherit); + opacity: 0.8; + + &.underline-style-none { + text-decoration-line: none; + text-decoration-style: none; + } + + &.underline-style-solid { + text-decoration-style: solid; + } + + &.underline-style-dotted { + text-decoration-style: dotted; + } + + &.underline-style-dashed { + text-decoration-style: dashed; + } + + &.underline-style-wavy { + text-decoration-style: wavy; + } + + &.underline-thickness-none { + text-decoration-line: none; + text-decoration-thickness: none; + } + + &.underline-thickness-thin { + text-decoration-thickness: 1px; + } + + &.underline-thickness-thick { + text-decoration-thickness: 2px; + } +} diff --git a/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts b/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts new file mode 100644 index 000000000..541a4bc7e --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts @@ -0,0 +1,367 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import './nativeEditContext.css'; +import { isFirefox } from '../../../../../base/browser/browser.js'; +import { addDisposableListener } from '../../../../../base/browser/dom.js'; +import { FastDomNode } from '../../../../../base/browser/fastDomNode.js'; +import { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js'; +import { KeyCode } from '../../../../../base/common/keyCodes.js'; +import { IClipboardService } from '../../../../../platform/clipboard/common/clipboardService.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { EndOfLinePreference, IModelDeltaDecoration } from '../../../../common/model.js'; +import { ViewConfigurationChangedEvent, ViewCursorStateChangedEvent } from '../../../../common/viewEvents.js'; +import { ViewContext } from '../../../../common/viewModel/viewContext.js'; +import { RestrictedRenderingContext, RenderingContext } from '../../../view/renderingContext.js'; +import { ViewController } from '../../../view/viewController.js'; +import { ClipboardStoredMetadata, getDataToCopy, InMemoryClipboardMetadataManager } from '../clipboardUtils.js'; +import { AbstractEditContext } from '../editContextUtils.js'; +import { editContextAddDisposableListener, FocusTracker, ITypeData } from './nativeEditContextUtils.js'; +import { ScreenReaderSupport } from './screenReaderSupport.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { Position } from '../../../../common/core/position.js'; +import { IVisibleRangeProvider } from '../textArea/textAreaEditContext.js'; +import { PositionOffsetTransformer } from '../../../../common/core/positionToOffset.js'; + +export class NativeEditContext extends AbstractEditContext { + + public readonly domNode: FastDomNode; + private readonly _editContext: EditContext; + private readonly _screenReaderSupport: ScreenReaderSupport; + + // Overflow guard container + private _parent: HTMLElement | undefined; + private _decorations: string[] = []; + private _primarySelection: Selection = new Selection(1, 1, 1, 1); + + private _textStartPositionWithinEditor: Position = new Position(1, 1); + + private readonly _focusTracker: FocusTracker; + + constructor( + context: ViewContext, + viewController: ViewController, + private readonly _visibleRangeProvider: IVisibleRangeProvider, + @IInstantiationService instantiationService: IInstantiationService, + @IClipboardService clipboardService: IClipboardService, + ) { + super(context); + + this.domNode = new FastDomNode(document.createElement('div')); + this.domNode.setClassName(`native-edit-context`); + this._updateDomAttributes(); + + this._focusTracker = this._register(new FocusTracker(this.domNode.domNode, (newFocusValue: boolean) => this._context.viewModel.setHasFocus(newFocusValue))); + + this._editContext = new EditContext(); + this.domNode.domNode.editContext = this._editContext; + + this._screenReaderSupport = instantiationService.createInstance(ScreenReaderSupport, this.domNode, context); + + this._register(addDisposableListener(this.domNode.domNode, 'copy', () => this._ensureClipboardGetsEditorSelection(clipboardService))); + this._register(addDisposableListener(this.domNode.domNode, 'cut', () => { + this._ensureClipboardGetsEditorSelection(clipboardService); + viewController.cut(); + })); + + this._register(addDisposableListener(this.domNode.domNode, 'keyup', (e) => viewController.emitKeyUp(new StandardKeyboardEvent(e)))); + this._register(addDisposableListener(this.domNode.domNode, 'keydown', async (e) => { + + const standardKeyboardEvent = new StandardKeyboardEvent(e); + + // When the IME is visible, the keys, like arrow-left and arrow-right, should be used to navigate in the IME, and should not be propagated further + if (standardKeyboardEvent.keyCode === KeyCode.KEY_IN_COMPOSITION) { + standardKeyboardEvent.stopPropagation(); + } + viewController.emitKeyDown(standardKeyboardEvent); + })); + this._register(addDisposableListener(this.domNode.domNode, 'beforeinput', async (e) => { + if (e.inputType === 'insertParagraph') { + this._onType(viewController, { text: '\n', replacePrevCharCnt: 0, replaceNextCharCnt: 0, positionDelta: 0 }); + } + })); + + // Edit context events + this._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e))); + this._register(editContextAddDisposableListener(this._editContext, 'characterboundsupdate', (e) => this._updateCharacterBounds(e))); + this._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => { + this._emitTypeEvent(viewController, e); + })); + this._register(editContextAddDisposableListener(this._editContext, 'compositionstart', (e) => { + // Utlimately fires onDidCompositionStart() on the editor to notify for example suggest model of composition state + // Updates the composition state of the cursor controller which determines behavior of typing with interceptors + viewController.compositionStart(); + // Emits ViewCompositionStartEvent which can be depended on by ViewEventHandlers + this._context.viewModel.onCompositionStart(); + })); + this._register(editContextAddDisposableListener(this._editContext, 'compositionend', (e) => { + // Utlimately fires compositionEnd() on the editor to notify for example suggest model of composition state + // Updates the composition state of the cursor controller which determines behavior of typing with interceptors + viewController.compositionEnd(); + // Emits ViewCompositionEndEvent which can be depended on by ViewEventHandlers + this._context.viewModel.onCompositionEnd(); + })); + } + + // --- Public methods --- + + public override dispose(): void { + // Force blue the dom node so can write in pane with no native edit context after disposal + this.domNode.domNode.blur(); + this.domNode.domNode.remove(); + super.dispose(); + } + + public appendTo(overflowGuardContainer: FastDomNode): void { + overflowGuardContainer.appendChild(this.domNode); + this._parent = overflowGuardContainer.domNode; + } + + public setAriaOptions(): void { + this._screenReaderSupport.setAriaOptions(); + } + + /* Last rendered data needed for correct hit-testing and determining the mouse position. + * Without this, the selection will blink as incorrect mouse position is calculated */ + public getLastRenderData(): Position | null { + return this._primarySelection.getPosition(); + } + + public prepareRender(ctx: RenderingContext): void { + this._screenReaderSupport.prepareRender(ctx); + this._updateEditContext(); + this._updateSelectionAndControlBounds(ctx); + } + + public render(ctx: RestrictedRenderingContext): void { + this._screenReaderSupport.render(ctx); + } + + public override onCursorStateChanged(e: ViewCursorStateChangedEvent): boolean { + this._primarySelection = e.modelSelections[0] ?? new Selection(1, 1, 1, 1); + this._screenReaderSupport.onCursorStateChanged(e); + return true; + } + + public override onConfigurationChanged(e: ViewConfigurationChangedEvent): boolean { + this._screenReaderSupport.onConfigurationChanged(e); + this._updateDomAttributes(); + return true; + } + + public writeScreenReaderContent(): void { + this._screenReaderSupport.writeScreenReaderContent(); + } + + public isFocused(): boolean { return this._focusTracker.isFocused; } + + public focus(): void { this._focusTracker.focus(); } + + public refreshFocusState(): void { } + + // --- Private methods --- + + private _updateDomAttributes(): void { + const options = this._context.configuration.options; + this.domNode.domNode.setAttribute('tabindex', String(options.get(EditorOption.tabIndex))); + } + + private _updateEditContext(): void { + const editContextState = this._getNewEditContextState(); + this._editContext.updateText(0, Number.MAX_SAFE_INTEGER, editContextState.text); + this._editContext.updateSelection(editContextState.selectionStartOffset, editContextState.selectionEndOffset); + this._textStartPositionWithinEditor = editContextState.textStartPositionWithinEditor; + } + + private _emitTypeEvent(viewController: ViewController, e: TextUpdateEvent): void { + if (!this._editContext) { + return; + } + const model = this._context.viewModel.model; + const offsetOfStartOfText = model.getOffsetAt(this._textStartPositionWithinEditor); + const offsetOfSelectionEnd = model.getOffsetAt(this._primarySelection.getEndPosition()); + const offsetOfSelectionStart = model.getOffsetAt(this._primarySelection.getStartPosition()); + const selectionEndOffset = offsetOfSelectionEnd - offsetOfStartOfText; + const selectionStartOffset = offsetOfSelectionStart - offsetOfStartOfText; + + let replaceNextCharCnt = 0; + let replacePrevCharCnt = 0; + if (e.updateRangeEnd > selectionEndOffset) { + replaceNextCharCnt = e.updateRangeEnd - selectionEndOffset; + } + if (e.updateRangeStart < selectionStartOffset) { + replacePrevCharCnt = selectionStartOffset - e.updateRangeStart; + } + let text = ''; + if (selectionStartOffset < e.updateRangeStart) { + text += this._editContext.text.substring(selectionStartOffset, e.updateRangeStart); + } + text += e.text; + if (selectionEndOffset > e.updateRangeEnd) { + text += this._editContext.text.substring(e.updateRangeEnd, selectionEndOffset); + } + const typeInput: ITypeData = { + text, + replacePrevCharCnt, + replaceNextCharCnt, + positionDelta: 0, + }; + this._onType(viewController, typeInput); + + // It could be that the typed letter does not produce a change in the editor text, + // for example if an extension registers a custom typing command, and the typing operation does something else like scrolling + // Need to update the edit context to reflect this + this._updateEditContext(); + } + + private _onType(viewController: ViewController, typeInput: ITypeData): void { + if (typeInput.replacePrevCharCnt || typeInput.replaceNextCharCnt || typeInput.positionDelta) { + viewController.compositionType(typeInput.text, typeInput.replacePrevCharCnt, typeInput.replaceNextCharCnt, typeInput.positionDelta); + } else { + viewController.type(typeInput.text); + } + } + + private _getNewEditContextState(): { text: string; selectionStartOffset: number; selectionEndOffset: number; textStartPositionWithinEditor: Position } { + const model = this._context.viewModel.model; + const primarySelectionStartLine = this._primarySelection.startLineNumber; + const primarySelectionEndLine = this._primarySelection.endLineNumber; + const endColumnOfEndLineNumber = model.getLineMaxColumn(primarySelectionEndLine); + const rangeOfText = new Range(primarySelectionStartLine, 1, primarySelectionEndLine, endColumnOfEndLineNumber); + const text = model.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined); + const selectionStartOffset = this._primarySelection.startColumn - 1; + const selectionEndOffset = text.length + this._primarySelection.endColumn - endColumnOfEndLineNumber; + const textStartPositionWithinEditor = rangeOfText.getStartPosition(); + return { + text, + selectionStartOffset, + selectionEndOffset, + textStartPositionWithinEditor + }; + } + + private _handleTextFormatUpdate(e: TextFormatUpdateEvent): void { + if (!this._editContext) { + return; + } + const formats = e.getTextFormats(); + const textStartPositionWithinEditor = this._textStartPositionWithinEditor; + const decorations: IModelDeltaDecoration[] = []; + formats.forEach(f => { + const textModel = this._context.viewModel.model; + const offsetOfEditContextText = textModel.getOffsetAt(textStartPositionWithinEditor); + const startPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeStart); + const endPositionOfDecoration = textModel.getPositionAt(offsetOfEditContextText + f.rangeEnd); + const decorationRange = Range.fromPositions(startPositionOfDecoration, endPositionOfDecoration); + const classNames = [ + 'edit-context-format-decoration', + `underline-style-${f.underlineStyle.toLowerCase()}`, + `underline-thickness-${f.underlineThickness.toLowerCase()}`, + ]; + decorations.push({ + range: decorationRange, + options: { + description: 'textFormatDecoration', + inlineClassName: classNames.join(' '), + } + }); + }); + this._decorations = this._context.viewModel.model.deltaDecorations(this._decorations, decorations); + } + + private _updateSelectionAndControlBounds(ctx: RenderingContext) { + if (!this._parent) { + return; + } + const options = this._context.configuration.options; + const lineHeight = options.get(EditorOption.lineHeight); + const contentLeft = options.get(EditorOption.layoutInfo).contentLeft; + const parentBounds = this._parent.getBoundingClientRect(); + const modelStartPosition = this._primarySelection.getStartPosition(); + const viewStartPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelStartPosition); + const verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewStartPosition.lineNumber); + const editorScrollTop = this._context.viewLayout.getCurrentScrollTop(); + + const top = parentBounds.top + verticalOffsetStart - editorScrollTop; + const height = (this._primarySelection.endLineNumber - this._primarySelection.startLineNumber + 1) * lineHeight; + let left = parentBounds.left + contentLeft; + let width: number; + + if (this._primarySelection.isEmpty()) { + const linesVisibleRanges = ctx.visibleRangeForPosition(viewStartPosition); + if (linesVisibleRanges) { + left += linesVisibleRanges.left; + } + width = 0; + } else { + width = parentBounds.width - contentLeft; + } + + const selectionBounds = new DOMRect(left, top, width, height); + this._editContext.updateSelectionBounds(selectionBounds); + this._editContext.updateControlBounds(selectionBounds); + } + + private _updateCharacterBounds(e: CharacterBoundsUpdateEvent): void { + if (!this._parent) { + return; + } + const options = this._context.configuration.options; + const typicalHalfWidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth; + const lineHeight = options.get(EditorOption.lineHeight); + const contentLeft = options.get(EditorOption.layoutInfo).contentLeft; + const parentBounds = this._parent.getBoundingClientRect(); + + const characterBounds: DOMRect[] = []; + const offsetTransformer = new PositionOffsetTransformer(this._editContext.text); + for (let offset = e.rangeStart; offset < e.rangeEnd; offset++) { + const editContextStartPosition = offsetTransformer.getPosition(offset); + const textStartLineOffsetWithinEditor = this._textStartPositionWithinEditor.lineNumber - 1; + const characterStartPosition = new Position(textStartLineOffsetWithinEditor + editContextStartPosition.lineNumber, editContextStartPosition.column); + const characterEndPosition = characterStartPosition.delta(0, 1); + const characterModelRange = Range.fromPositions(characterStartPosition, characterEndPosition); + const characterViewRange = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(characterModelRange); + const characterLinesVisibleRanges = this._visibleRangeProvider.linesVisibleRangesForRange(characterViewRange, true) ?? []; + const characterVerticalOffset = this._context.viewLayout.getVerticalOffsetForLineNumber(characterViewRange.startLineNumber); + const editorScrollTop = this._context.viewLayout.getCurrentScrollTop(); + const top = parentBounds.top + characterVerticalOffset - editorScrollTop; + + let left = 0; + let width = typicalHalfWidthCharacterWidth; + if (characterLinesVisibleRanges.length > 0) { + for (const visibleRange of characterLinesVisibleRanges[0].ranges) { + left = visibleRange.left; + width = visibleRange.width; + break; + } + } + characterBounds.push(new DOMRect(parentBounds.left + contentLeft + left, top, width, lineHeight)); + } + this._editContext.updateCharacterBounds(e.rangeStart, characterBounds); + } + + private _ensureClipboardGetsEditorSelection(clipboardService: IClipboardService): void { + const options = this._context.configuration.options; + const emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard); + const copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting); + const selections = this._context.viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection); + const dataToCopy = getDataToCopy(this._context.viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting); + const storedMetadata: ClipboardStoredMetadata = { + version: 1, + isFromEmptySelection: dataToCopy.isFromEmptySelection, + multicursorText: dataToCopy.multicursorText, + mode: dataToCopy.mode + }; + InMemoryClipboardMetadataManager.INSTANCE.set( + // When writing "LINE\r\n" to the clipboard and then pasting, + // Firefox pastes "LINE\n", so let's work around this quirk + (isFirefox ? dataToCopy.text.replace(/\r\n/g, '\n') : dataToCopy.text), + storedMetadata + ); + clipboardService.writeText(dataToCopy.text); + } +} diff --git a/src/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.ts b/src/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.ts new file mode 100644 index 000000000..e55e1521f --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.ts @@ -0,0 +1,55 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { addDisposableListener } from '../../../../../base/browser/dom.js'; +import { IDisposable, Disposable } from '../../../../../base/common/lifecycle.js'; + +export interface ITypeData { + text: string; + replacePrevCharCnt: number; + replaceNextCharCnt: number; + positionDelta: number; +} + +export class FocusTracker extends Disposable { + private _isFocused: boolean = false; + + constructor( + private readonly _domNode: HTMLElement, + private readonly _onFocusChange: (newFocusValue: boolean) => void, + ) { + super(); + this._register(addDisposableListener(this._domNode, 'focus', () => this._handleFocusedChanged(true))); + this._register(addDisposableListener(this._domNode, 'blur', () => this._handleFocusedChanged(false))); + } + + private _handleFocusedChanged(focused: boolean): void { + if (this._isFocused === focused) { + return; + } + this._isFocused = focused; + this._onFocusChange(this._isFocused); + } + + public focus(): void { + // fixes: https://github.com/microsoft/vscode/issues/228147 + // Immediately call this method in order to directly set the field isFocused to true so the textInputFocus context key is evaluated correctly + this._handleFocusedChanged(true); + this._domNode.focus(); + } + + get isFocused(): boolean { + return this._isFocused; + } +} + +export function editContextAddDisposableListener(target: EventTarget, type: K, listener: (this: GlobalEventHandlers, ev: EditContextEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable { + target.addEventListener(type, listener as any, options); + return { + dispose() { + target.removeEventListener(type, listener as any); + } + }; +} diff --git a/src/vs/editor/browser/controller/editContext/native/screenReaderSupport.ts b/src/vs/editor/browser/controller/editContext/native/screenReaderSupport.ts new file mode 100644 index 000000000..bea87b94b --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/native/screenReaderSupport.ts @@ -0,0 +1,164 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../../../base/browser/dom.js'; +import { FastDomNode } from '../../../../../base/browser/fastDomNode.js'; +import { localize } from '../../../../../nls.js'; +import { AccessibilitySupport } from '../../../../../platform/accessibility/common/accessibility.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { FontInfo } from '../../../../common/config/fontInfo.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { EndOfLinePreference } from '../../../../common/model.js'; +import { ViewConfigurationChangedEvent, ViewCursorStateChangedEvent } from '../../../../common/viewEvents.js'; +import { ViewContext } from '../../../../common/viewModel/viewContext.js'; +import { applyFontInfo } from '../../../config/domFontInfo.js'; +import { RestrictedRenderingContext, RenderingContext } from '../../../view/renderingContext.js'; +import { ariaLabelForScreenReaderContent, ISimpleModel, newlinecount, PagedScreenReaderStrategy, ScreenReaderContentState } from '../screenReaderUtils.js'; + +export class ScreenReaderSupport { + + // Configuration values + private _contentLeft: number = 1; + private _contentWidth: number = 1; + private _lineHeight: number = 1; + private _fontInfo: FontInfo | undefined; + private _accessibilitySupport: AccessibilitySupport = AccessibilitySupport.Unknown; + private _accessibilityPageSize: number = 1; + + private _primarySelection: Selection = new Selection(1, 1, 1, 1); + private _screenReaderContentState: ScreenReaderContentState | undefined; + + constructor( + private readonly _domNode: FastDomNode, + private readonly _context: ViewContext, + @IKeybindingService private readonly _keybindingService: IKeybindingService, + ) { + this._updateConfigurationSettings(); + this._updateDomAttributes(); + } + + public onConfigurationChanged(e: ViewConfigurationChangedEvent): void { + this._updateConfigurationSettings(); + this._updateDomAttributes(); + if (e.hasChanged(EditorOption.accessibilitySupport)) { + this.writeScreenReaderContent(); + } + } + + private _updateConfigurationSettings(): void { + const options = this._context.configuration.options; + const layoutInfo = options.get(EditorOption.layoutInfo); + this._contentLeft = layoutInfo.contentLeft; + this._contentWidth = layoutInfo.contentWidth; + this._fontInfo = options.get(EditorOption.fontInfo); + this._lineHeight = options.get(EditorOption.lineHeight); + this._accessibilitySupport = options.get(EditorOption.accessibilitySupport); + this._accessibilityPageSize = options.get(EditorOption.accessibilityPageSize); + } + + private _updateDomAttributes(): void { + const options = this._context.configuration.options; + this._domNode.domNode.setAttribute('role', 'textbox'); + this._domNode.domNode.setAttribute('aria-required', options.get(EditorOption.ariaRequired) ? 'true' : 'false'); + this._domNode.domNode.setAttribute('aria-multiline', 'true'); + this._domNode.domNode.setAttribute('aria-autocomplete', options.get(EditorOption.readOnly) ? 'none' : 'both'); + this._domNode.domNode.setAttribute('aria-roledescription', localize('editor', "editor")); + this._domNode.domNode.setAttribute('aria-label', ariaLabelForScreenReaderContent(options, this._keybindingService)); + const tabSize = this._context.viewModel.model.getOptions().tabSize; + const spaceWidth = options.get(EditorOption.fontInfo).spaceWidth; + this._domNode.domNode.style.tabSize = `${tabSize * spaceWidth}px`; + } + + public onCursorStateChanged(e: ViewCursorStateChangedEvent): void { + this._primarySelection = e.selections[0] ?? new Selection(1, 1, 1, 1); + } + + public prepareRender(ctx: RenderingContext): void { + this.writeScreenReaderContent(); + } + + public render(ctx: RestrictedRenderingContext): void { + if (!this._screenReaderContentState) { + return; + } + // For correct alignment of the screen reader content, we need to apply the correct font + applyFontInfo(this._domNode, this._fontInfo!); + + const verticalOffsetForPrimaryLineNumber = this._context.viewLayout.getVerticalOffsetForLineNumber(this._primarySelection.positionLineNumber); + const editorScrollTop = this._context.viewLayout.getCurrentScrollTop(); + const top = verticalOffsetForPrimaryLineNumber - editorScrollTop; + + this._domNode.setTop(top); + this._domNode.setLeft(this._contentLeft); + this._domNode.setWidth(this._contentWidth); + this._domNode.setHeight(this._lineHeight); + + // Setting position within the screen reader content by modifying scroll position + const textContentBeforeSelection = this._screenReaderContentState.value.substring(0, this._screenReaderContentState.selectionStart); + const numberOfLinesOfContentBeforeSelection = newlinecount(textContentBeforeSelection); + this._domNode.domNode.scrollTop = numberOfLinesOfContentBeforeSelection * this._lineHeight; + } + + public setAriaOptions(): void { } + + public writeScreenReaderContent(): void { + const focusedElement = getActiveWindow().document.activeElement; + if (!focusedElement || focusedElement !== this._domNode.domNode) { + return; + } + this._screenReaderContentState = this._getScreenReaderContentState(); + if (!this._screenReaderContentState) { + return; + } + if (this._domNode.domNode.textContent !== this._screenReaderContentState.value) { + this._domNode.domNode.textContent = this._screenReaderContentState.value; + } + this._setSelectionOfScreenReaderContent(this._screenReaderContentState.selectionStart, this._screenReaderContentState.selectionEnd); + } + + private _getScreenReaderContentState(): ScreenReaderContentState | undefined { + if (this._accessibilitySupport === AccessibilitySupport.Disabled) { + return; + } + const simpleModel: ISimpleModel = { + getLineCount: (): number => { + return this._context.viewModel.getLineCount(); + }, + getLineMaxColumn: (lineNumber: number): number => { + return this._context.viewModel.getLineMaxColumn(lineNumber); + }, + getValueInRange: (range: Range, eol: EndOfLinePreference): string => { + return this._context.viewModel.getValueInRange(range, eol); + }, + getValueLengthInRange: (range: Range, eol: EndOfLinePreference): number => { + return this._context.viewModel.getValueLengthInRange(range, eol); + }, + modifyPosition: (position: Position, offset: number): Position => { + return this._context.viewModel.modifyPosition(position, offset); + } + }; + return PagedScreenReaderStrategy.fromEditorSelection(simpleModel, this._primarySelection, this._accessibilityPageSize, this._accessibilitySupport === AccessibilitySupport.Unknown); + } + + private _setSelectionOfScreenReaderContent(selectionOffsetStart: number, selectionOffsetEnd: number): void { + const activeDocument = getActiveWindow().document; + const activeDocumentSelection = activeDocument.getSelection(); + if (!activeDocumentSelection) { + return; + } + const textContent = this._domNode.domNode.firstChild; + if (!textContent) { + return; + } + const range = new globalThis.Range(); + range.setStart(textContent, selectionOffsetStart); + range.setEnd(textContent, selectionOffsetEnd); + activeDocumentSelection.removeAllRanges(); + activeDocumentSelection.addRange(range); + } +} diff --git a/src/vs/editor/browser/controller/editContext/screenReaderUtils.ts b/src/vs/editor/browser/controller/editContext/screenReaderUtils.ts new file mode 100644 index 000000000..cc2dcd3f3 --- /dev/null +++ b/src/vs/editor/browser/controller/editContext/screenReaderUtils.ts @@ -0,0 +1,138 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { EndOfLinePreference } from '../../../common/model.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { EditorOption, IComputedEditorOptions } from '../../../common/config/editorOptions.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js'; +import * as nls from '../../../../nls.js'; + +export interface ISimpleModel { + getLineCount(): number; + getLineMaxColumn(lineNumber: number): number; + getValueInRange(range: Range, eol: EndOfLinePreference): string; + getValueLengthInRange(range: Range, eol: EndOfLinePreference): number; + modifyPosition(position: Position, offset: number): Position; +} + +export interface ScreenReaderContentState { + value: string; + + /** the offset where selection starts inside `value` */ + selectionStart: number; + + /** the offset where selection ends inside `value` */ + selectionEnd: number; + + /** the editor range in the view coordinate system that matches the selection inside `value` */ + selection: Range; + + /** the visible line count (wrapped, not necessarily matching \n characters) for the text in `value` before `selectionStart` */ + newlineCountBeforeSelection: number; +} + +export class PagedScreenReaderStrategy { + private static _getPageOfLine(lineNumber: number, linesPerPage: number): number { + return Math.floor((lineNumber - 1) / linesPerPage); + } + + private static _getRangeForPage(page: number, linesPerPage: number): Range { + const offset = page * linesPerPage; + const startLineNumber = offset + 1; + const endLineNumber = offset + linesPerPage; + return new Range(startLineNumber, 1, endLineNumber + 1, 1); + } + + public static fromEditorSelection(model: ISimpleModel, selection: Range, linesPerPage: number, trimLongText: boolean): ScreenReaderContentState { + // Chromium handles very poorly text even of a few thousand chars + // Cut text to avoid stalling the entire UI + const LIMIT_CHARS = 500; + + const selectionStartPage = PagedScreenReaderStrategy._getPageOfLine(selection.startLineNumber, linesPerPage); + const selectionStartPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionStartPage, linesPerPage); + + const selectionEndPage = PagedScreenReaderStrategy._getPageOfLine(selection.endLineNumber, linesPerPage); + const selectionEndPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionEndPage, linesPerPage); + + let pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn))!; + if (trimLongText && model.getValueLengthInRange(pretextRange, EndOfLinePreference.LF) > LIMIT_CHARS) { + const pretextStart = model.modifyPosition(pretextRange.getEndPosition(), -LIMIT_CHARS); + pretextRange = Range.fromPositions(pretextStart, pretextRange.getEndPosition()); + } + const pretext = model.getValueInRange(pretextRange, EndOfLinePreference.LF); + + const lastLine = model.getLineCount(); + const lastLineMaxColumn = model.getLineMaxColumn(lastLine); + let posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn))!; + if (trimLongText && model.getValueLengthInRange(posttextRange, EndOfLinePreference.LF) > LIMIT_CHARS) { + const posttextEnd = model.modifyPosition(posttextRange.getStartPosition(), LIMIT_CHARS); + posttextRange = Range.fromPositions(posttextRange.getStartPosition(), posttextEnd); + } + const posttext = model.getValueInRange(posttextRange, EndOfLinePreference.LF); + + + let text: string; + if (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) { + // take full selection + text = model.getValueInRange(selection, EndOfLinePreference.LF); + } else { + const selectionRange1 = selectionStartPageRange.intersectRanges(selection)!; + const selectionRange2 = selectionEndPageRange.intersectRanges(selection)!; + text = ( + model.getValueInRange(selectionRange1, EndOfLinePreference.LF) + + String.fromCharCode(8230) + + model.getValueInRange(selectionRange2, EndOfLinePreference.LF) + ); + } + if (trimLongText && text.length > 2 * LIMIT_CHARS) { + text = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length); + } + + return { + value: pretext + text + posttext, + selection: selection, + selectionStart: pretext.length, + selectionEnd: pretext.length + text.length, + newlineCountBeforeSelection: pretextRange.endLineNumber - pretextRange.startLineNumber, + }; + } +} + +export function ariaLabelForScreenReaderContent(options: IComputedEditorOptions, keybindingService: IKeybindingService) { + const accessibilitySupport = options.get(EditorOption.accessibilitySupport); + if (accessibilitySupport === AccessibilitySupport.Disabled) { + + const toggleKeybindingLabel = keybindingService.lookupKeybinding('editor.action.toggleScreenReaderAccessibilityMode')?.getAriaLabel(); + const runCommandKeybindingLabel = keybindingService.lookupKeybinding('workbench.action.showCommands')?.getAriaLabel(); + const keybindingEditorKeybindingLabel = keybindingService.lookupKeybinding('workbench.action.openGlobalKeybindings')?.getAriaLabel(); + const editorNotAccessibleMessage = nls.localize('accessibilityModeOff', "The editor is not accessible at this time."); + if (toggleKeybindingLabel) { + return nls.localize('accessibilityOffAriaLabel', "{0} To enable screen reader optimized mode, use {1}", editorNotAccessibleMessage, toggleKeybindingLabel); + } else if (runCommandKeybindingLabel) { + return nls.localize('accessibilityOffAriaLabelNoKb', "{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.", editorNotAccessibleMessage, runCommandKeybindingLabel); + } else if (keybindingEditorKeybindingLabel) { + return nls.localize('accessibilityOffAriaLabelNoKbs', "{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it.", editorNotAccessibleMessage, keybindingEditorKeybindingLabel); + } else { + // SOS + return editorNotAccessibleMessage; + } + } + return options.get(EditorOption.ariaLabel); +} + +export function newlinecount(text: string): number { + let result = 0; + let startIndex = -1; + do { + startIndex = text.indexOf('\n', startIndex + 1); + if (startIndex === -1) { + break; + } + result++; + } while (true); + return result; +} diff --git a/src/vs/editor/browser/controller/textAreaHandler.css b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.css similarity index 100% rename from src/vs/editor/browser/controller/textAreaHandler.css rename to src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.css diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts similarity index 85% rename from src/vs/editor/browser/controller/textAreaHandler.ts rename to src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts index a5f824ca4..acbc89e9e 100644 --- a/src/vs/editor/browser/controller/textAreaHandler.ts +++ b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts @@ -3,43 +3,47 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./textAreaHandler'; -import * as nls from 'vs/nls'; -import * as browser from 'vs/base/browser/browser'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import * as platform from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { CopyOptions, ICompositionData, IPasteData, ITextAreaInputHost, TextAreaInput, ClipboardDataToCopy, TextAreaWrapper } from 'vs/editor/browser/controller/textAreaInput'; -import { ISimpleModel, ITypeData, PagedScreenReaderStrategy, TextAreaState, _debugComposition } from 'vs/editor/browser/controller/textAreaState'; -import { ViewController } from 'vs/editor/browser/view/viewController'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; -import { Margin } from 'vs/editor/browser/viewParts/margin/margin'; -import { RenderLineNumbersType, EditorOption, IComputedEditorOptions, EditorOptions } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { WordCharacterClass, getMapForWordSeparators } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { EndOfLinePreference } from 'vs/editor/common/model'; -import { RenderingContext, RestrictedRenderingContext, HorizontalPosition } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { IEditorAriaOptions } from 'vs/editor/browser/editorBrowser'; -import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { ColorId, ITokenPresentation } from 'vs/editor/common/encodedTokenAttributes'; -import { Color } from 'vs/base/common/color'; -import { IME } from 'vs/base/common/ime'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import './textAreaEditContext.css'; +import * as nls from '../../../../../nls.js'; +import * as browser from '../../../../../base/browser/browser.js'; +import { FastDomNode, createFastDomNode } from '../../../../../base/browser/fastDomNode.js'; +import { IKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js'; +import * as platform from '../../../../../base/common/platform.js'; +import * as strings from '../../../../../base/common/strings.js'; +import { applyFontInfo } from '../../../config/domFontInfo.js'; +import { ViewController } from '../../../view/viewController.js'; +import { PartFingerprint, PartFingerprints } from '../../../view/viewPart.js'; +import { LineNumbersOverlay } from '../../../viewParts/lineNumbers/lineNumbers.js'; +import { Margin } from '../../../viewParts/margin/margin.js'; +import { RenderLineNumbersType, EditorOption, IComputedEditorOptions, EditorOptions } from '../../../../common/config/editorOptions.js'; +import { FontInfo } from '../../../../common/config/fontInfo.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ScrollType } from '../../../../common/editorCommon.js'; +import { EndOfLinePreference } from '../../../../common/model.js'; +import { RenderingContext, RestrictedRenderingContext, HorizontalPosition, LineVisibleRanges } from '../../../view/renderingContext.js'; +import { ViewContext } from '../../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../../common/viewEvents.js'; +import { AccessibilitySupport } from '../../../../../platform/accessibility/common/accessibility.js'; +import { IEditorAriaOptions } from '../../../editorBrowser.js'; +import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../../base/browser/ui/mouseCursor/mouseCursor.js'; +import { TokenizationRegistry } from '../../../../common/languages.js'; +import { ColorId, ITokenPresentation } from '../../../../common/encodedTokenAttributes.js'; +import { Color } from '../../../../../base/common/color.js'; +import { IME } from '../../../../../base/common/ime.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { AbstractEditContext } from '../editContextUtils.js'; +import { ICompositionData, IPasteData, ITextAreaInputHost, TextAreaInput, TextAreaWrapper } from './textAreaEditContextInput.js'; +import { ariaLabelForScreenReaderContent, ISimpleModel, newlinecount, PagedScreenReaderStrategy } from '../screenReaderUtils.js'; +import { ClipboardDataToCopy, getDataToCopy } from '../clipboardUtils.js'; +import { _debugComposition, ITypeData, TextAreaState } from './textAreaEditContextState.js'; +import { getMapForWordSeparators, WordCharacterClass } from '../../../../common/core/wordCharacterClassifier.js'; export interface IVisibleRangeProvider { visibleRangeForPosition(position: Position): HorizontalPosition | null; + linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null; } class VisibleTextAreaData { @@ -106,7 +110,7 @@ class VisibleTextAreaData { const canUseZeroSizeTextarea = (browser.isFirefox); -export class TextAreaHandler extends ViewPart { +export class TextAreaEditContext extends AbstractEditContext { private readonly _viewController: ViewController; private readonly _visibleRangeProvider: IVisibleRangeProvider; @@ -184,7 +188,7 @@ export class TextAreaHandler extends ViewPart { this.textArea.setAttribute('autocapitalize', 'off'); this.textArea.setAttribute('autocomplete', 'off'); this.textArea.setAttribute('spellcheck', 'false'); - this.textArea.setAttribute('aria-label', this._getAriaLabel(options)); + this.textArea.setAttribute('aria-label', ariaLabelForScreenReaderContent(options, this._keybindingService)); this.textArea.setAttribute('aria-required', options.get(EditorOption.ariaRequired) ? 'true' : 'false'); this.textArea.setAttribute('tabindex', String(options.get(EditorOption.tabIndex))); this.textArea.setAttribute('role', 'textbox'); @@ -217,29 +221,7 @@ export class TextAreaHandler extends ViewPart { const textAreaInputHost: ITextAreaInputHost = { getDataToCopy: (): ClipboardDataToCopy => { - const rawTextToCopy = this._context.viewModel.getPlainTextToCopy(this._modelSelections, this._emptySelectionClipboard, platform.isWindows); - const newLineCharacter = this._context.viewModel.model.getEOL(); - - const isFromEmptySelection = (this._emptySelectionClipboard && this._modelSelections.length === 1 && this._modelSelections[0].isEmpty()); - const multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null); - const text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy); - - let html: string | null | undefined = undefined; - let mode: string | null = null; - if (CopyOptions.forceCopyWithSyntaxHighlighting || (this._copyWithSyntaxHighlighting && text.length < 65536)) { - const richText = this._context.viewModel.getRichTextToCopy(this._modelSelections, this._emptySelectionClipboard); - if (richText) { - html = richText.html; - mode = richText.mode; - } - } - return { - isFromEmptySelection, - multicursorText, - text, - html, - mode - }; + return getDataToCopy(this._context.viewModel, this._modelSelections, this._emptySelectionClipboard, this._copyWithSyntaxHighlighting); }, getScreenReaderContent: (): TextAreaState => { if (this._accessibilitySupport === AccessibilitySupport.Disabled) { @@ -296,7 +278,8 @@ export class TextAreaHandler extends ViewPart { return TextAreaState.EMPTY; } - return PagedScreenReaderStrategy.fromEditorSelection(simpleModel, this._selections[0], this._accessibilityPageSize, this._accessibilitySupport === AccessibilitySupport.Unknown); + const screenReaderContentState = PagedScreenReaderStrategy.fromEditorSelection(simpleModel, this._selections[0], this._accessibilityPageSize, this._accessibilitySupport === AccessibilitySupport.Unknown); + return TextAreaState.fromScreenReaderContentState(screenReaderContentState); }, deduceModelPosition: (viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position => { @@ -479,12 +462,23 @@ export class TextAreaHandler extends ViewPart { })); } + public get domNode() { + return this.textArea; + } + + appendTo(overflowGuardContainer: FastDomNode): void { + overflowGuardContainer.appendChild(this.textArea); + overflowGuardContainer.appendChild(this.textAreaCover); + } + public writeScreenReaderContent(reason: string): void { this._textAreaInput.writeNativeTextAreaContent(reason); } public override dispose(): void { super.dispose(); + this.textArea.domNode.remove(); + this.textAreaCover.domNode.remove(); } private _getAndroidWordAtPosition(position: Position): [string, number] { @@ -557,28 +551,6 @@ export class TextAreaHandler extends ViewPart { return ''; } - private _getAriaLabel(options: IComputedEditorOptions): string { - const accessibilitySupport = options.get(EditorOption.accessibilitySupport); - if (accessibilitySupport === AccessibilitySupport.Disabled) { - - const toggleKeybindingLabel = this._keybindingService.lookupKeybinding('editor.action.toggleScreenReaderAccessibilityMode')?.getAriaLabel(); - const runCommandKeybindingLabel = this._keybindingService.lookupKeybinding('workbench.action.showCommands')?.getAriaLabel(); - const keybindingEditorKeybindingLabel = this._keybindingService.lookupKeybinding('workbench.action.openGlobalKeybindings')?.getAriaLabel(); - const editorNotAccessibleMessage = nls.localize('accessibilityModeOff', "The editor is not accessible at this time."); - if (toggleKeybindingLabel) { - return nls.localize('accessibilityOffAriaLabel', "{0} To enable screen reader optimized mode, use {1}", editorNotAccessibleMessage, toggleKeybindingLabel); - } else if (runCommandKeybindingLabel) { - return nls.localize('accessibilityOffAriaLabelNoKb', "{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.", editorNotAccessibleMessage, runCommandKeybindingLabel); - } else if (keybindingEditorKeybindingLabel) { - return nls.localize('accessibilityOffAriaLabelNoKbs', "{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it.", editorNotAccessibleMessage, keybindingEditorKeybindingLabel); - } else { - // SOS - return editorNotAccessibleMessage; - } - } - return options.get(EditorOption.ariaLabel); - } - private _setAccessibilityOptions(options: IComputedEditorOptions): void { this._accessibilitySupport = options.get(EditorOption.accessibilitySupport); const accessibilityPageSize = options.get(EditorOption.accessibilityPageSize); @@ -622,7 +594,7 @@ export class TextAreaHandler extends ViewPart { this.textArea.setAttribute('wrap', this._textAreaWrapping && !this._visibleTextArea ? 'on' : 'off'); const { tabSize } = this._context.viewModel.model.getOptions(); this.textArea.domNode.style.tabSize = `${tabSize * this._fontInfo.spaceWidth}px`; - this.textArea.setAttribute('aria-label', this._getAriaLabel(options)); + this.textArea.setAttribute('aria-label', ariaLabelForScreenReaderContent(options, this._keybindingService)); this.textArea.setAttribute('aria-required', options.get(EditorOption.ariaRequired) ? 'true' : 'false'); this.textArea.setAttribute('tabindex', String(options.get(EditorOption.tabIndex))); @@ -677,7 +649,7 @@ export class TextAreaHandler extends ViewPart { return this._textAreaInput.isFocused(); } - public focusTextArea(): void { + public focus(): void { this._textAreaInput.focusTextArea(); } @@ -742,7 +714,7 @@ export class TextAreaHandler extends ViewPart { const endPosition = this._visibleTextArea.endPosition; if (startPosition && endPosition && visibleStart && visibleEnd && visibleEnd.left >= this._scrollLeft && visibleStart.left <= this._scrollLeft + this._contentWidth) { const top = (this._context.viewLayout.getVerticalOffsetForLineNumber(this._primaryCursorPosition.lineNumber) - this._scrollTop); - const lineCount = this._newlinecount(this.textArea.domNode.value.substr(0, this.textArea.domNode.selectionStart)); + const lineCount = newlinecount(this.textArea.domNode.value.substr(0, this.textArea.domNode.selectionStart)); let scrollLeft = this._visibleTextArea.widthOfHiddenLineTextBefore; let left = (this._contentLeft + visibleStart.left - this._scrollLeft); @@ -834,7 +806,7 @@ export class TextAreaHandler extends ViewPart { // In case the textarea contains a word, we're going to try to align the textarea's cursor // with our cursor by scrolling the textarea as much as possible this.textArea.domNode.scrollLeft = this._primaryCursorVisibleRange.left; - const lineCount = this._textAreaInput.textAreaState.newlineCountBeforeSelection ?? this._newlinecount(this.textArea.domNode.value.substr(0, this.textArea.domNode.selectionStart)); + const lineCount = this._textAreaInput.textAreaState.newlineCountBeforeSelection ?? newlinecount(this.textArea.domNode.value.substring(0, this.textArea.domNode.selectionStart)); this.textArea.domNode.scrollTop = lineCount * this._lineHeight; return; } @@ -849,19 +821,6 @@ export class TextAreaHandler extends ViewPart { }); } - private _newlinecount(text: string): number { - let result = 0; - let startIndex = -1; - do { - startIndex = text.indexOf('\n', startIndex + 1); - if (startIndex === -1) { - break; - } - result++; - } while (true); - return result; - } - private _renderAtTopLeft(): void { // (in WebKit the textarea is 1px by 1px because it cannot handle input to a 0x0 textarea) // specifically, when doing Korean IME, setting the textarea to 0x0 breaks IME badly. diff --git a/src/vs/editor/browser/controller/textAreaInput.ts b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.ts similarity index 92% rename from src/vs/editor/browser/controller/textAreaInput.ts rename to src/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.ts index 88e783a1f..87e99556b 100644 --- a/src/vs/editor/browser/controller/textAreaInput.ts +++ b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.ts @@ -3,23 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as browser from 'vs/base/browser/browser'; -import * as dom from 'vs/base/browser/dom'; -import { DomEmitter } from 'vs/base/browser/event'; -import { IKeyboardEvent, StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { inputLatency } from 'vs/base/browser/performance'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import { OperatingSystem } from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import { ITextAreaWrapper, ITypeData, TextAreaState, _debugComposition } from 'vs/editor/browser/controller/textAreaState'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { ILogService } from 'vs/platform/log/common/log'; +import * as browser from '../../../../../base/browser/browser.js'; +import * as dom from '../../../../../base/browser/dom.js'; +import { DomEmitter } from '../../../../../base/browser/event.js'; +import { IKeyboardEvent, StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js'; +import { inputLatency } from '../../../../../base/browser/performance.js'; +import { RunOnceScheduler } from '../../../../../base/common/async.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { KeyCode } from '../../../../../base/common/keyCodes.js'; +import { Disposable, IDisposable, MutableDisposable } from '../../../../../base/common/lifecycle.js'; +import { Mimes } from '../../../../../base/common/mime.js'; +import { OperatingSystem } from '../../../../../base/common/platform.js'; +import * as strings from '../../../../../base/common/strings.js'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { IAccessibilityService } from '../../../../../platform/accessibility/common/accessibility.js'; +import { ILogService } from '../../../../../platform/log/common/log.js'; +import { ClipboardDataToCopy, ClipboardStoredMetadata, InMemoryClipboardMetadataManager } from '../clipboardUtils.js'; +import { _debugComposition, ITextAreaWrapper, ITypeData, TextAreaState } from './textAreaEditContextState.js'; export namespace TextAreaSyntethicEvents { export const Tap = '-monaco-textarea-synthetic-tap'; @@ -29,69 +30,18 @@ export interface ICompositionData { data: string; } -export const CopyOptions = { - forceCopyWithSyntaxHighlighting: false -}; export interface IPasteData { text: string; metadata: ClipboardStoredMetadata | null; } -export interface ClipboardDataToCopy { - isFromEmptySelection: boolean; - multicursorText: string[] | null | undefined; - text: string; - html: string | null | undefined; - mode: string | null; -} - -export interface ClipboardStoredMetadata { - version: 1; - isFromEmptySelection: boolean | undefined; - multicursorText: string[] | null | undefined; - mode: string | null; -} - export interface ITextAreaInputHost { getDataToCopy(): ClipboardDataToCopy; getScreenReaderContent(): TextAreaState; deduceModelPosition(viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position; } -interface InMemoryClipboardMetadata { - lastCopiedValue: string; - data: ClipboardStoredMetadata; -} - -/** - * Every time we write to the clipboard, we record a bit of extra metadata here. - * Every time we read from the cipboard, if the text matches our last written text, - * we can fetch the previous metadata. - */ -export class InMemoryClipboardMetadataManager { - public static readonly INSTANCE = new InMemoryClipboardMetadataManager(); - - private _lastState: InMemoryClipboardMetadata | null; - - constructor() { - this._lastState = null; - } - - public set(lastCopiedValue: string, data: ClipboardStoredMetadata): void { - this._lastState = { lastCopiedValue, data }; - } - - public get(pastedText: string): ClipboardStoredMetadata | null { - if (this._lastState && this._lastState.lastCopiedValue === pastedText) { - // match! - return this._lastState.data; - } - this._lastState = null; - return null; - } -} - export interface ICompositionStartEvent { data: string; } diff --git a/src/vs/editor/browser/controller/textAreaState.ts b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.ts similarity index 66% rename from src/vs/editor/browser/controller/textAreaState.ts rename to src/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.ts index adbf0ef7b..2e833a1b2 100644 --- a/src/vs/editor/browser/controller/textAreaState.ts +++ b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { EndOfLinePreference } from 'vs/editor/common/model'; +import { commonPrefixLength, commonSuffixLength } from '../../../../../base/common/strings.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { ScreenReaderContentState } from '../screenReaderUtils.js'; export const _debugComposition = false; @@ -19,14 +19,6 @@ export interface ITextAreaWrapper { setSelectionRange(reason: string, selectionStart: number, selectionEnd: number): void; } -export interface ISimpleModel { - getLineCount(): number; - getLineMaxColumn(lineNumber: number): number; - getValueInRange(range: Range, eol: EndOfLinePreference): string; - getValueLengthInRange(range: Range, eol: EndOfLinePreference): number; - modifyPosition(position: Position, offset: number): Position; -} - export interface ITypeData { text: string; replacePrevCharCnt: number; @@ -130,12 +122,12 @@ export class TextAreaState { } const prefixLength = Math.min( - strings.commonPrefixLength(previousState.value, currentState.value), + commonPrefixLength(previousState.value, currentState.value), previousState.selectionStart, currentState.selectionStart ); const suffixLength = Math.min( - strings.commonSuffixLength(previousState.value, currentState.value), + commonSuffixLength(previousState.value, currentState.value), previousState.value.length - previousState.selectionEnd, currentState.value.length - currentState.selectionEnd ); @@ -202,8 +194,8 @@ export class TextAreaState { }; } - const prefixLength = Math.min(strings.commonPrefixLength(previousState.value, currentState.value), previousState.selectionEnd); - const suffixLength = Math.min(strings.commonSuffixLength(previousState.value, currentState.value), previousState.value.length - previousState.selectionEnd); + const prefixLength = Math.min(commonPrefixLength(previousState.value, currentState.value), previousState.selectionEnd); + const suffixLength = Math.min(commonSuffixLength(previousState.value, currentState.value), previousState.value.length - previousState.selectionEnd); const previousValue = previousState.value.substring(prefixLength, previousState.value.length - suffixLength); const currentValue = currentState.value.substring(prefixLength, currentState.value.length - suffixLength); const previousSelectionStart = previousState.selectionStart - prefixLength; @@ -223,65 +215,14 @@ export class TextAreaState { positionDelta: currentSelectionEnd - currentValue.length }; } -} - -export class PagedScreenReaderStrategy { - private static _getPageOfLine(lineNumber: number, linesPerPage: number): number { - return Math.floor((lineNumber - 1) / linesPerPage); - } - - private static _getRangeForPage(page: number, linesPerPage: number): Range { - const offset = page * linesPerPage; - const startLineNumber = offset + 1; - const endLineNumber = offset + linesPerPage; - return new Range(startLineNumber, 1, endLineNumber + 1, 1); - } - - public static fromEditorSelection(model: ISimpleModel, selection: Range, linesPerPage: number, trimLongText: boolean): TextAreaState { - // Chromium handles very poorly text even of a few thousand chars - // Cut text to avoid stalling the entire UI - const LIMIT_CHARS = 500; - - const selectionStartPage = PagedScreenReaderStrategy._getPageOfLine(selection.startLineNumber, linesPerPage); - const selectionStartPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionStartPage, linesPerPage); - - const selectionEndPage = PagedScreenReaderStrategy._getPageOfLine(selection.endLineNumber, linesPerPage); - const selectionEndPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionEndPage, linesPerPage); - let pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn))!; - if (trimLongText && model.getValueLengthInRange(pretextRange, EndOfLinePreference.LF) > LIMIT_CHARS) { - const pretextStart = model.modifyPosition(pretextRange.getEndPosition(), -LIMIT_CHARS); - pretextRange = Range.fromPositions(pretextStart, pretextRange.getEndPosition()); - } - const pretext = model.getValueInRange(pretextRange, EndOfLinePreference.LF); - - const lastLine = model.getLineCount(); - const lastLineMaxColumn = model.getLineMaxColumn(lastLine); - let posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn))!; - if (trimLongText && model.getValueLengthInRange(posttextRange, EndOfLinePreference.LF) > LIMIT_CHARS) { - const posttextEnd = model.modifyPosition(posttextRange.getStartPosition(), LIMIT_CHARS); - posttextRange = Range.fromPositions(posttextRange.getStartPosition(), posttextEnd); - } - const posttext = model.getValueInRange(posttextRange, EndOfLinePreference.LF); - - - let text: string; - if (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) { - // take full selection - text = model.getValueInRange(selection, EndOfLinePreference.LF); - } else { - const selectionRange1 = selectionStartPageRange.intersectRanges(selection)!; - const selectionRange2 = selectionEndPageRange.intersectRanges(selection)!; - text = ( - model.getValueInRange(selectionRange1, EndOfLinePreference.LF) - + String.fromCharCode(8230) - + model.getValueInRange(selectionRange2, EndOfLinePreference.LF) - ); - } - if (trimLongText && text.length > 2 * LIMIT_CHARS) { - text = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length); - } - - return new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length, selection, pretextRange.endLineNumber - pretextRange.startLineNumber); + public static fromScreenReaderContentState(screenReaderContentState: ScreenReaderContentState) { + return new TextAreaState( + screenReaderContentState.value, + screenReaderContentState.selectionStart, + screenReaderContentState.selectionEnd, + screenReaderContentState.selection, + screenReaderContentState.newlineCountBeforeSelection + ); } } diff --git a/src/vs/editor/browser/controller/mouseHandler.ts b/src/vs/editor/browser/controller/mouseHandler.ts index 55d58d6ee..cd9b92c4e 100644 --- a/src/vs/editor/browser/controller/mouseHandler.ts +++ b/src/vs/editor/browser/controller/mouseHandler.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { StandardWheelEvent, IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import { HitTestContext, MouseTarget, MouseTargetFactory, PointerHandlerLastRenderData } from 'vs/editor/browser/controller/mouseTarget'; -import { IMouseTarget, IMouseTargetOutsideEditor, IMouseTargetViewZoneData, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { ClientCoordinates, EditorMouseEvent, EditorMouseEventFactory, GlobalEditorPointerMoveMonitor, createEditorPagePosition, createCoordinatesRelativeToEditor, PageCoordinates } from 'vs/editor/browser/editorDom'; -import { ViewController } from 'vs/editor/browser/view/viewController'; -import { EditorZoom } from 'vs/editor/common/config/editorZoom'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { HorizontalPosition } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { NavigationCommandRevealType } from 'vs/editor/browser/coreCommands'; -import { MouseWheelClassifier } from 'vs/base/browser/ui/scrollbar/scrollableElement'; +import * as dom from '../../../base/browser/dom.js'; +import { StandardWheelEvent, IMouseWheelEvent } from '../../../base/browser/mouseEvent.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import * as platform from '../../../base/common/platform.js'; +import { HitTestContext, MouseTarget, MouseTargetFactory, PointerHandlerLastRenderData } from './mouseTarget.js'; +import { IMouseTarget, IMouseTargetOutsideEditor, IMouseTargetViewZoneData, MouseTargetType } from '../editorBrowser.js'; +import { ClientCoordinates, EditorMouseEvent, EditorMouseEventFactory, GlobalEditorPointerMoveMonitor, createEditorPagePosition, createCoordinatesRelativeToEditor, PageCoordinates } from '../editorDom.js'; +import { ViewController } from '../view/viewController.js'; +import { EditorZoom } from '../../common/config/editorZoom.js'; +import { Position } from '../../common/core/position.js'; +import { Selection } from '../../common/core/selection.js'; +import { HorizontalPosition } from '../view/renderingContext.js'; +import { ViewContext } from '../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../common/viewEvents.js'; +import { ViewEventHandler } from '../../common/viewEventHandler.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; +import { NavigationCommandRevealType } from '../coreCommands.js'; +import { MouseWheelClassifier } from '../../../base/browser/ui/scrollbar/scrollableElement.js'; export interface IPointerHandlerHelper { viewDomNode: HTMLElement; diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index 4a1addb3f..737daf6d2 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler'; -import { IMouseTargetContentEmptyData, IMouseTargetMarginData, IMouseTarget, IMouseTargetContentEmpty, IMouseTargetContentText, IMouseTargetContentWidget, IMouseTargetMargin, IMouseTargetOutsideEditor, IMouseTargetOverlayWidget, IMouseTargetScrollbar, IMouseTargetTextarea, IMouseTargetUnknown, IMouseTargetViewZone, IMouseTargetContentTextData, IMouseTargetViewZoneData, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { ClientCoordinates, EditorMouseEvent, EditorPagePosition, PageCoordinates, CoordinatesRelativeToEditor } from 'vs/editor/browser/editorDom'; -import { PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart'; -import { ViewLine } from 'vs/editor/browser/viewParts/lines/viewLine'; -import { IViewCursorRenderData } from 'vs/editor/browser/viewParts/viewCursors/viewCursor'; -import { EditorLayoutInfo, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range as EditorRange } from 'vs/editor/common/core/range'; -import { HorizontalPosition } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import { IViewModel } from 'vs/editor/common/viewModel'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import * as dom from 'vs/base/browser/dom'; -import { AtomicTabMoveOperations, Direction } from 'vs/editor/common/cursor/cursorAtomicMoveOperations'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { InjectedText } from 'vs/editor/common/modelLineProjectionData'; -import { Mutable } from 'vs/base/common/types'; -import { Lazy } from 'vs/base/common/lazy'; +import { IPointerHandlerHelper } from './mouseHandler.js'; +import { IMouseTargetContentEmptyData, IMouseTargetMarginData, IMouseTarget, IMouseTargetContentEmpty, IMouseTargetContentText, IMouseTargetContentWidget, IMouseTargetMargin, IMouseTargetOutsideEditor, IMouseTargetOverlayWidget, IMouseTargetScrollbar, IMouseTargetTextarea, IMouseTargetUnknown, IMouseTargetViewZone, IMouseTargetContentTextData, IMouseTargetViewZoneData, MouseTargetType } from '../editorBrowser.js'; +import { ClientCoordinates, EditorMouseEvent, EditorPagePosition, PageCoordinates, CoordinatesRelativeToEditor } from '../editorDom.js'; +import { PartFingerprint, PartFingerprints } from '../view/viewPart.js'; +import { ViewLine } from '../viewParts/viewLines/viewLine.js'; +import { IViewCursorRenderData } from '../viewParts/viewCursors/viewCursor.js'; +import { EditorLayoutInfo, EditorOption } from '../../common/config/editorOptions.js'; +import { Position } from '../../common/core/position.js'; +import { Range as EditorRange } from '../../common/core/range.js'; +import { HorizontalPosition } from '../view/renderingContext.js'; +import { ViewContext } from '../../common/viewModel/viewContext.js'; +import { IViewModel } from '../../common/viewModel.js'; +import { CursorColumns } from '../../common/core/cursorColumns.js'; +import * as dom from '../../../base/browser/dom.js'; +import { AtomicTabMoveOperations, Direction } from '../../common/cursor/cursorAtomicMoveOperations.js'; +import { PositionAffinity } from '../../common/model.js'; +import { InjectedText } from '../../common/modelLineProjectionData.js'; +import { Mutable } from '../../../base/common/types.js'; +import { Lazy } from '../../../base/common/lazy.js'; const enum HitTestResultType { Unknown, diff --git a/src/vs/editor/browser/controller/pointerHandler.ts b/src/vs/editor/browser/controller/pointerHandler.ts index 2019016ac..80fc4825a 100644 --- a/src/vs/editor/browser/controller/pointerHandler.ts +++ b/src/vs/editor/browser/controller/pointerHandler.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BrowserFeatures } from 'vs/base/browser/canIUse'; -import * as dom from 'vs/base/browser/dom'; -import { EventType, Gesture, GestureEvent } from 'vs/base/browser/touch'; -import { mainWindow } from 'vs/base/browser/window'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import { IPointerHandlerHelper, MouseHandler } from 'vs/editor/browser/controller/mouseHandler'; -import { TextAreaSyntethicEvents } from 'vs/editor/browser/controller/textAreaInput'; -import { NavigationCommandRevealType } from 'vs/editor/browser/coreCommands'; -import { IMouseTarget, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorMouseEvent, EditorPointerEventFactory } from 'vs/editor/browser/editorDom'; -import { ViewController } from 'vs/editor/browser/view/viewController'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import { BrowserFeatures } from '../../../base/browser/canIUse.js'; +import * as dom from '../../../base/browser/dom.js'; +import { EventType, Gesture, GestureEvent } from '../../../base/browser/touch.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import * as platform from '../../../base/common/platform.js'; +import { IPointerHandlerHelper, MouseHandler } from './mouseHandler.js'; +import { NavigationCommandRevealType } from '../coreCommands.js'; +import { IMouseTarget, MouseTargetType } from '../editorBrowser.js'; +import { EditorMouseEvent, EditorPointerEventFactory } from '../editorDom.js'; +import { ViewController } from '../view/viewController.js'; +import { ViewContext } from '../../common/viewModel/viewContext.js'; +import { TextAreaSyntethicEvents } from './editContext/textArea/textAreaEditContextInput.js'; /** * Currently only tested on iOS 13/ iPadOS. diff --git a/src/vs/editor/browser/coreCommands.ts b/src/vs/editor/browser/coreCommands.ts index e7f0743af..8f1459c1f 100644 --- a/src/vs/editor/browser/coreCommands.ts +++ b/src/vs/editor/browser/coreCommands.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { isFirefox } from 'vs/base/browser/browser'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import * as types from 'vs/base/common/types'; -import { status } from 'vs/base/browser/ui/aria/aria'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Command, EditorCommand, ICommandOptions, registerEditorCommand, MultiCommand, UndoCommand, RedoCommand, SelectAllCommand } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { ColumnSelection, IColumnSelectResult } from 'vs/editor/common/cursor/cursorColumnSelection'; -import { CursorState, EditOperationType, IColumnSelectData, PartialCursorState } from 'vs/editor/common/cursorCommon'; -import { DeleteOperations } from 'vs/editor/common/cursor/cursorDeleteOperations'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { CursorMove as CursorMove_, CursorMoveCommands } from 'vs/editor/common/cursor/cursorMoveCommands'; -import { TypeOperations } from 'vs/editor/common/cursor/cursorTypeOperations'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Handler, ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { VerticalRevealType } from 'vs/editor/common/viewEvents'; -import { ICommandMetadata } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IViewModel } from 'vs/editor/common/viewModel'; -import { ISelection } from 'vs/editor/common/core/selection'; -import { getActiveElement } from 'vs/base/browser/dom'; -import { EnterOperation } from 'vs/editor/common/cursor/cursorTypeEditOperations'; +import * as nls from '../../nls.js'; +import { isFirefox } from '../../base/browser/browser.js'; +import { KeyCode, KeyMod } from '../../base/common/keyCodes.js'; +import * as types from '../../base/common/types.js'; +import { status } from '../../base/browser/ui/aria/aria.js'; +import { ICodeEditor } from './editorBrowser.js'; +import { Command, EditorCommand, ICommandOptions, registerEditorCommand, MultiCommand, UndoCommand, RedoCommand, SelectAllCommand } from './editorExtensions.js'; +import { ICodeEditorService } from './services/codeEditorService.js'; +import { ColumnSelection, IColumnSelectResult } from '../common/cursor/cursorColumnSelection.js'; +import { CursorState, EditOperationType, IColumnSelectData, PartialCursorState } from '../common/cursorCommon.js'; +import { DeleteOperations } from '../common/cursor/cursorDeleteOperations.js'; +import { CursorChangeReason } from '../common/cursorEvents.js'; +import { CursorMove as CursorMove_, CursorMoveCommands } from '../common/cursor/cursorMoveCommands.js'; +import { TypeOperations } from '../common/cursor/cursorTypeOperations.js'; +import { IPosition, Position } from '../common/core/position.js'; +import { Range } from '../common/core/range.js'; +import { Handler, ScrollType } from '../common/editorCommon.js'; +import { EditorContextKeys } from '../common/editorContextKeys.js'; +import { VerticalRevealType } from '../common/viewEvents.js'; +import { ICommandMetadata } from '../../platform/commands/common/commands.js'; +import { ContextKeyExpr } from '../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight, KeybindingsRegistry } from '../../platform/keybinding/common/keybindingsRegistry.js'; +import { EditorOption } from '../common/config/editorOptions.js'; +import { IViewModel } from '../common/viewModel.js'; +import { ISelection } from '../common/core/selection.js'; +import { getActiveElement, isEditableElement } from '../../base/browser/dom.js'; +import { EnterOperation } from '../common/cursor/cursorTypeEditOperations.js'; const CORE_WEIGHT = KeybindingWeight.EditorCore; @@ -318,7 +318,7 @@ abstract class EditorOrNativeTextInputCommand { target.addImplementation(1000, 'generic-dom-input-textarea', (accessor: ServicesAccessor, args: unknown) => { // Only if focused on an element that allows for entering text const activeElement = getActiveElement(); - if (activeElement && ['input', 'textarea'].indexOf(activeElement.tagName.toLowerCase()) >= 0) { + if (activeElement && isEditableElement(activeElement)) { this.runDOMCommand(activeElement); return true; } diff --git a/src/vs/editor/browser/dnd.ts b/src/vs/editor/browser/dnd.ts index 3003a4f65..9f74733b7 100644 --- a/src/vs/editor/browser/dnd.ts +++ b/src/vs/editor/browser/dnd.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DataTransfers } from 'vs/base/browser/dnd'; -import { createFileDataTransferItem, createStringDataTransferItem, IDataTransferItem, UriList, VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { Mimes } from 'vs/base/common/mime'; -import { URI } from 'vs/base/common/uri'; -import { CodeDataTransfers, FileAdditionalNativeProperties } from 'vs/platform/dnd/browser/dnd'; +import { DataTransfers } from '../../base/browser/dnd.js'; +import { createFileDataTransferItem, createStringDataTransferItem, IDataTransferItem, UriList, VSDataTransfer } from '../../base/common/dataTransfer.js'; +import { Mimes } from '../../base/common/mime.js'; +import { URI } from '../../base/common/uri.js'; +import { CodeDataTransfers, FileAdditionalNativeProperties } from '../../platform/dnd/browser/dnd.js'; export function toVSDataTransfer(dataTransfer: DataTransfer) { diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index 2985f9593..7401ec5de 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IMouseEvent, IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { Event } from 'vs/base/common/event'; -import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { ConfigurationChangedEvent, EditorLayoutInfo, EditorOption, FindComputedEditorOptionValueById, IComputedEditorOptions, IDiffEditorOptions, IEditorOptions, OverviewRulerPosition } from 'vs/editor/common/config/editorOptions'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IDiffComputationResult, ILineChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import * as editorCommon from 'vs/editor/common/editorCommon'; -import { GlyphMarginLane, ICursorStateComputer, IIdentifiedSingleEditOperation, IModelDecoration, IModelDeltaDecoration, ITextModel, PositionAffinity } from 'vs/editor/common/model'; -import { InjectedText } from 'vs/editor/common/modelLineProjectionData'; -import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { IEditorWhitespace, IViewModel } from 'vs/editor/common/viewModel'; -import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { IKeyboardEvent } from '../../base/browser/keyboardEvent.js'; +import { IMouseEvent, IMouseWheelEvent } from '../../base/browser/mouseEvent.js'; +import { IBoundarySashes } from '../../base/browser/ui/sash/sash.js'; +import { Event } from '../../base/common/event.js'; +import { IEditorConstructionOptions } from './config/editorConfiguration.js'; +import { ConfigurationChangedEvent, EditorLayoutInfo, EditorOption, FindComputedEditorOptionValueById, IComputedEditorOptions, IDiffEditorOptions, IEditorOptions, OverviewRulerPosition } from '../common/config/editorOptions.js'; +import { IDimension } from '../common/core/dimension.js'; +import { IPosition, Position } from '../common/core/position.js'; +import { IRange, Range } from '../common/core/range.js'; +import { Selection } from '../common/core/selection.js'; +import { IWordAtPosition } from '../common/core/wordHelper.js'; +import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from '../common/cursorEvents.js'; +import { IDiffComputationResult, ILineChange } from '../common/diff/legacyLinesDiffComputer.js'; +import * as editorCommon from '../common/editorCommon.js'; +import { GlyphMarginLane, ICursorStateComputer, IIdentifiedSingleEditOperation, IModelDecoration, IModelDeltaDecoration, ITextModel, PositionAffinity } from '../common/model.js'; +import { InjectedText } from '../common/modelLineProjectionData.js'; +import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from '../common/textModelEvents.js'; +import { IEditorWhitespace, IViewModel } from '../common/viewModel.js'; +import { OverviewRulerZone } from '../common/viewModel/overviewZoneManager.js'; +import { MenuId } from '../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; /** * A view zone is a full horizontal rectangle that 'pushes' text down. @@ -784,6 +784,12 @@ export interface ICodeEditor extends editorCommon.IEditor { */ readonly onDidChangeHiddenAreas: Event; + /** + * An event emitted before an editor + * @internal + */ + readonly onWillTriggerEditorOperationEvent: Event; + /** * Some editor operations fire multiple events at once. * To allow users to react to multiple events fired by a single operation, diff --git a/src/vs/editor/browser/editorDom.ts b/src/vs/editor/browser/editorDom.ts index a894d0034..75bd4acfa 100644 --- a/src/vs/editor/browser/editorDom.ts +++ b/src/vs/editor/browser/editorDom.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { GlobalPointerMoveMonitor } from 'vs/base/browser/globalPointerMoveMonitor'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { asCssVariable } from 'vs/platform/theme/common/colorRegistry'; -import { ThemeColor } from 'vs/base/common/themables'; +import * as dom from '../../base/browser/dom.js'; +import { GlobalPointerMoveMonitor } from '../../base/browser/globalPointerMoveMonitor.js'; +import { StandardMouseEvent } from '../../base/browser/mouseEvent.js'; +import { RunOnceScheduler } from '../../base/common/async.js'; +import { Disposable, DisposableStore, IDisposable } from '../../base/common/lifecycle.js'; +import { ICodeEditor } from './editorBrowser.js'; +import { asCssVariable } from '../../platform/theme/common/colorRegistry.js'; +import { ThemeColor } from '../../base/common/themables.js'; /** * Coordinates relative to the whole document (e.g. mouse event's pageX and pageY) diff --git a/src/vs/editor/browser/editorExtensions.ts b/src/vs/editor/browser/editorExtensions.ts index 072be21a4..b9c67238f 100644 --- a/src/vs/editor/browser/editorExtensions.ts +++ b/src/vs/editor/browser/editorExtensions.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { Position } from 'vs/editor/common/core/position'; -import { IEditorContribution, IDiffEditorContribution } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { MenuId, MenuRegistry, Action2 } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry, ICommandMetadata } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr, IContextKeyService, ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor as InstantiationServicesAccessor, BrandedService, IInstantiationService, IConstructorSignature } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindings, KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { assertType } from 'vs/base/common/types'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { ILogService } from 'vs/platform/log/common/log'; -import { getActiveElement } from 'vs/base/browser/dom'; +import * as nls from '../../nls.js'; +import { URI } from '../../base/common/uri.js'; +import { ICodeEditor, IDiffEditor } from './editorBrowser.js'; +import { ICodeEditorService } from './services/codeEditorService.js'; +import { Position } from '../common/core/position.js'; +import { IEditorContribution, IDiffEditorContribution } from '../common/editorCommon.js'; +import { ITextModel } from '../common/model.js'; +import { IModelService } from '../common/services/model.js'; +import { ITextModelService } from '../common/services/resolverService.js'; +import { MenuId, MenuRegistry, Action2 } from '../../platform/actions/common/actions.js'; +import { CommandsRegistry, ICommandMetadata } from '../../platform/commands/common/commands.js'; +import { ContextKeyExpr, IContextKeyService, ContextKeyExpression } from '../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor as InstantiationServicesAccessor, BrandedService, IInstantiationService, IConstructorSignature } from '../../platform/instantiation/common/instantiation.js'; +import { IKeybindings, KeybindingsRegistry, KeybindingWeight } from '../../platform/keybinding/common/keybindingsRegistry.js'; +import { Registry } from '../../platform/registry/common/platform.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { assertType } from '../../base/common/types.js'; +import { ThemeIcon } from '../../base/common/themables.js'; +import { IDisposable } from '../../base/common/lifecycle.js'; +import { KeyMod, KeyCode } from '../../base/common/keyCodes.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { getActiveElement } from '../../base/browser/dom.js'; export type ServicesAccessor = InstantiationServicesAccessor; export type EditorContributionCtor = IConstructorSignature; diff --git a/src/vs/editor/browser/gpu/atlas/atlas.ts b/src/vs/editor/browser/gpu/atlas/atlas.ts new file mode 100644 index 000000000..e97190427 --- /dev/null +++ b/src/vs/editor/browser/gpu/atlas/atlas.ts @@ -0,0 +1,95 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type { ThreeKeyMap } from '../../../../base/common/map.js'; +import type { IBoundingBox, IRasterizedGlyph } from '../raster/raster.js'; + +/** + * Information about a {@link IRasterizedGlyph rasterized glyph} that has been drawn to a texture + * atlas page. + */ +export interface ITextureAtlasPageGlyph { + /** + * The page index of the texture atlas page that the glyph was drawn to. + */ + pageIndex: number; + /** + * The index of the glyph in the texture atlas page. + */ + glyphIndex: number; + /** The x coordinate of the glyph on the texture atlas page. */ + x: number; + /** The y coordinate of the glyph on the texture atlas page. */ + y: number; + /** The width of the glyph in pixels. */ + w: number; + /** The height of the glyph in pixels. */ + h: number; + /** The x offset from {@link x} of the glyph's origin. */ + originOffsetX: number; + /** The y offset from {@link y} of the glyph's origin. */ + originOffsetY: number; +} + +/** + * A texture atlas allocator is responsible for taking rasterized glyphs, drawing them to a texture + * atlas page canvas and return information on the texture atlas glyph. + */ +export interface ITextureAtlasAllocator { + /** + * Allocates a rasterized glyph to the canvas, drawing it and returning information on its + * position in the canvas. This will return undefined if the glyph does not fit on the canvas. + */ + allocate(rasterizedGlyph: Readonly): Readonly | undefined; + /** + * Gets a usage preview of the atlas for debugging purposes. + */ + getUsagePreview(): Promise; + /** + * Gets statistics about the allocator's current state for debugging purposes. + */ + getStats(): string; +} + +/** + * A texture atlas page that can be read from but not modified. + */ +export interface IReadableTextureAtlasPage { + /** + * A unique identifier for the current state of the texture atlas page. This is a number that + * increments whenever a glyph is drawn to the page. + */ + readonly version: number; + /** + * A bounding box representing the area of the texture atlas page that is currently in use. + */ + readonly usedArea: Readonly; + /** + * An iterator over all glyphs that have been drawn to the page. This will iterate through + * glyphs in the order they have been drawn. + */ + readonly glyphs: IterableIterator>; + /** + * The source canvas for the texture atlas page. + */ + readonly source: OffscreenCanvas; + /** + * Gets a usage preview of the atlas for debugging purposes. + */ + getUsagePreview(): Promise; + /** + * Gets statistics about the allocator's current state for debugging purposes. + */ + getStats(): string; +} + +export const enum UsagePreviewColors { + Unused = '#808080', + Used = '#4040FF', + Wasted = '#FF0000', + Restricted = '#FF000088', +} + +export type GlyphMap = ThreeKeyMap; diff --git a/src/vs/editor/browser/gpu/atlas/textureAtlas.ts b/src/vs/editor/browser/gpu/atlas/textureAtlas.ts new file mode 100644 index 000000000..e8b8ad73c --- /dev/null +++ b/src/vs/editor/browser/gpu/atlas/textureAtlas.ts @@ -0,0 +1,179 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../../base/browser/dom.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, dispose, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { ThreeKeyMap } from '../../../../base/common/map.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { GlyphRasterizer } from '../raster/glyphRasterizer.js'; +import type { IGlyphRasterizer } from '../raster/raster.js'; +import { IdleTaskQueue } from '../taskQueue.js'; +import type { IReadableTextureAtlasPage, ITextureAtlasPageGlyph, GlyphMap } from './atlas.js'; +import { AllocatorType, TextureAtlasPage } from './textureAtlasPage.js'; + +export interface ITextureAtlasOptions { + allocatorType?: AllocatorType; +} + +export class TextureAtlas extends Disposable { + private _colorMap!: string[]; + private readonly _warmUpTask: MutableDisposable = this._register(new MutableDisposable()); + private readonly _warmedUpRasterizers = new Set(); + private readonly _allocatorType: AllocatorType; + + /** + * The main texture atlas pages which are both larger textures and more efficiently packed + * relative to the scratch page. The idea is the main pages are drawn to and uploaded to the GPU + * much less frequently so as to not drop frames. + */ + private readonly _pages: TextureAtlasPage[] = []; + get pages(): IReadableTextureAtlasPage[] { return this._pages; } + + readonly pageSize: number; + + /** + * A maps of glyph keys to the page to start searching for the glyph. This is set before + * searching to have as little runtime overhead (branching, intermediate variables) as possible, + * so it is not guaranteed to be the actual page the glyph is on. But it is guaranteed that all + * pages with a lower index do not contain the glyph. + */ + private readonly _glyphPageIndex: GlyphMap = new ThreeKeyMap(); + + private readonly _onDidDeleteGlyphs = this._register(new Emitter()); + readonly onDidDeleteGlyphs = this._onDidDeleteGlyphs.event; + + constructor( + /** The maximum texture size supported by the GPU. */ + private readonly _maxTextureSize: number, + options: ITextureAtlasOptions | undefined, + @IThemeService private readonly _themeService: IThemeService, + @IInstantiationService private readonly _instantiationService: IInstantiationService + ) { + super(); + + this._allocatorType = options?.allocatorType ?? 'slab'; + + this._register(Event.runAndSubscribe(this._themeService.onDidColorThemeChange, () => { + // TODO: Clear entire atlas on theme change + this._colorMap = this._themeService.getColorTheme().tokenColorMap; + })); + + const dprFactor = Math.max(1, Math.floor(getActiveWindow().devicePixelRatio)); + + this.pageSize = Math.min(1024 * dprFactor, this._maxTextureSize); + this._initFirstPage(); + + this._register(toDisposable(() => dispose(this._pages))); + } + + private _initFirstPage() { + const firstPage = this._instantiationService.createInstance(TextureAtlasPage, 0, this.pageSize, this._allocatorType); + this._pages.push(firstPage); + + // IMPORTANT: The first glyph on the first page must be an empty glyph such that zeroed out + // cells end up rendering nothing + // TODO: This currently means the first slab is for 0x0 glyphs and is wasted + const nullRasterizer = new GlyphRasterizer(1, ''); + firstPage.getGlyph(nullRasterizer, '', 0); + nullRasterizer.dispose(); + } + + clear() { + // Clear all pages + for (const page of this._pages) { + page.dispose(); + } + this._pages.length = 0; + this._glyphPageIndex.clear(); + this._warmedUpRasterizers.clear(); + this._warmUpTask.clear(); + + // Recreate first + this._initFirstPage(); + + // Tell listeners + this._onDidDeleteGlyphs.fire(); + } + + getGlyph(rasterizer: IGlyphRasterizer, chars: string, metadata: number): Readonly { + // TODO: Encode font size and family into key + // Ignore metadata that doesn't affect the glyph + metadata &= ~(MetadataConsts.LANGUAGEID_MASK | MetadataConsts.TOKEN_TYPE_MASK | MetadataConsts.BALANCED_BRACKETS_MASK); + + // Warm up common glyphs + if (!this._warmedUpRasterizers.has(rasterizer.id)) { + this._warmUpAtlas(rasterizer); + this._warmedUpRasterizers.add(rasterizer.id); + } + + // Try get the glyph, overflowing to a new page if necessary + return this._tryGetGlyph(this._glyphPageIndex.get(chars, metadata, rasterizer.cacheKey) ?? 0, rasterizer, chars, metadata); + } + + private _tryGetGlyph(pageIndex: number, rasterizer: IGlyphRasterizer, chars: string, metadata: number): Readonly { + this._glyphPageIndex.set(chars, metadata, rasterizer.cacheKey, pageIndex); + return ( + this._pages[pageIndex].getGlyph(rasterizer, chars, metadata) + ?? (pageIndex + 1 < this._pages.length + ? this._tryGetGlyph(pageIndex + 1, rasterizer, chars, metadata) + : undefined) + ?? this._getGlyphFromNewPage(rasterizer, chars, metadata) + ); + } + + private _getGlyphFromNewPage(rasterizer: IGlyphRasterizer, chars: string, metadata: number): Readonly { + // TODO: Support more than 2 pages and the GPU texture layer limit + this._pages.push(this._instantiationService.createInstance(TextureAtlasPage, this._pages.length, this.pageSize, this._allocatorType)); + this._glyphPageIndex.set(chars, metadata, rasterizer.cacheKey, this._pages.length - 1); + return this._pages[this._pages.length - 1].getGlyph(rasterizer, chars, metadata)!; + } + + public getUsagePreview(): Promise { + return Promise.all(this._pages.map(e => e.getUsagePreview())); + } + + public getStats(): string[] { + return this._pages.map(e => e.getStats()); + } + + /** + * Warms up the atlas by rasterizing all printable ASCII characters for each token color. This + * is distrubuted over multiple idle callbacks to avoid blocking the main thread. + */ + private _warmUpAtlas(rasterizer: IGlyphRasterizer): void { + this._warmUpTask.value?.clear(); + const taskQueue = this._warmUpTask.value = new IdleTaskQueue(); + // Warm up using roughly the larger glyphs first to help optimize atlas allocation + // A-Z + for (let code = CharCode.A; code <= CharCode.Z; code++) { + taskQueue.enqueue(() => { + for (const fgColor of this._colorMap.keys()) { + this.getGlyph(rasterizer, String.fromCharCode(code), (fgColor << MetadataConsts.FOREGROUND_OFFSET) & MetadataConsts.FOREGROUND_MASK); + } + }); + } + // a-z + for (let code = CharCode.a; code <= CharCode.z; code++) { + taskQueue.enqueue(() => { + for (const fgColor of this._colorMap.keys()) { + this.getGlyph(rasterizer, String.fromCharCode(code), (fgColor << MetadataConsts.FOREGROUND_OFFSET) & MetadataConsts.FOREGROUND_MASK); + } + }); + } + // Remaining ascii + for (let code = CharCode.ExclamationMark; code <= CharCode.Tilde; code++) { + taskQueue.enqueue(() => { + for (const fgColor of this._colorMap.keys()) { + this.getGlyph(rasterizer, String.fromCharCode(code), (fgColor << MetadataConsts.FOREGROUND_OFFSET) & MetadataConsts.FOREGROUND_MASK); + } + }); + } + } +} + diff --git a/src/vs/editor/browser/gpu/atlas/textureAtlasPage.ts b/src/vs/editor/browser/gpu/atlas/textureAtlasPage.ts new file mode 100644 index 000000000..a661ef64b --- /dev/null +++ b/src/vs/editor/browser/gpu/atlas/textureAtlasPage.ts @@ -0,0 +1,122 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Event } from '../../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { ThreeKeyMap } from '../../../../base/common/map.js'; +import { ILogService, LogLevel } from '../../../../platform/log/common/log.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import type { IBoundingBox, IGlyphRasterizer } from '../raster/raster.js'; +import type { IReadableTextureAtlasPage, ITextureAtlasAllocator, ITextureAtlasPageGlyph, GlyphMap } from './atlas.js'; +import { TextureAtlasShelfAllocator } from './textureAtlasShelfAllocator.js'; +import { TextureAtlasSlabAllocator } from './textureAtlasSlabAllocator.js'; + +export type AllocatorType = 'shelf' | 'slab' | ((canvas: OffscreenCanvas, textureIndex: number) => ITextureAtlasAllocator); + +export class TextureAtlasPage extends Disposable implements IReadableTextureAtlasPage { + + private _version: number = 0; + get version(): number { return this._version; } + + /** + * The maximum number of glyphs that can be drawn to the page. This is currently a hard static + * cap that must not be reached as it will cause the GPU buffer to overflow. + */ + static readonly maximumGlyphCount = 5_000; + + private _usedArea: IBoundingBox = { left: 0, top: 0, right: 0, bottom: 0 }; + public get usedArea(): Readonly { return this._usedArea; } + + private readonly _canvas: OffscreenCanvas; + get source(): OffscreenCanvas { return this._canvas; } + + private readonly _glyphMap: GlyphMap = new ThreeKeyMap(); + private readonly _glyphInOrderSet: Set = new Set(); + get glyphs(): IterableIterator { + return this._glyphInOrderSet.values(); + } + + private readonly _allocator: ITextureAtlasAllocator; + private _colorMap!: string[]; + + constructor( + textureIndex: number, + pageSize: number, + allocatorType: AllocatorType, + @ILogService private readonly _logService: ILogService, + @IThemeService private readonly _themeService: IThemeService, + ) { + super(); + + this._canvas = new OffscreenCanvas(pageSize, pageSize); + + switch (allocatorType) { + case 'shelf': this._allocator = new TextureAtlasShelfAllocator(this._canvas, textureIndex); break; + case 'slab': this._allocator = new TextureAtlasSlabAllocator(this._canvas, textureIndex); break; + default: this._allocator = allocatorType(this._canvas, textureIndex); break; + } + + this._register(Event.runAndSubscribe(this._themeService.onDidColorThemeChange, () => { + // TODO: Clear entire atlas on theme change + this._colorMap = this._themeService.getColorTheme().tokenColorMap; + })); + + // Reduce impact of a memory leak if this object is not released + this._register(toDisposable(() => { + this._canvas.width = 1; + this._canvas.height = 1; + })); + } + + public getGlyph(rasterizer: IGlyphRasterizer, chars: string, metadata: number): Readonly | undefined { + // IMPORTANT: There are intentionally no intermediate variables here to aid in runtime + // optimization as it's a very hot function + return this._glyphMap.get(chars, metadata, rasterizer.cacheKey) ?? this._createGlyph(rasterizer, chars, metadata); + } + + private _createGlyph(rasterizer: IGlyphRasterizer, chars: string, metadata: number): Readonly | undefined { + // Ensure the glyph can fit on the page + if (this._glyphInOrderSet.size >= TextureAtlasPage.maximumGlyphCount) { + return undefined; + } + + // Rasterize and allocate the glyph + const rasterizedGlyph = rasterizer.rasterizeGlyph(chars, metadata, this._colorMap); + const glyph = this._allocator.allocate(rasterizedGlyph); + + // Ensure the glyph was allocated + if (glyph === undefined) { + return undefined; + } + + // Save the glyph + this._glyphMap.set(chars, metadata, rasterizer.cacheKey, glyph); + this._glyphInOrderSet.add(glyph); + + // Update page version and it's tracked used area + this._version++; + this._usedArea.right = Math.max(this._usedArea.right, glyph.x + glyph.w - 1); + this._usedArea.bottom = Math.max(this._usedArea.bottom, glyph.y + glyph.h - 1); + + if (this._logService.getLevel() === LogLevel.Trace) { + this._logService.trace('New glyph', { + chars, + metadata, + rasterizedGlyph, + glyph + }); + } + + return glyph; + } + + getUsagePreview(): Promise { + return this._allocator.getUsagePreview(); + } + + getStats(): string { + return this._allocator.getStats(); + } +} diff --git a/src/vs/editor/browser/gpu/atlas/textureAtlasShelfAllocator.ts b/src/vs/editor/browser/gpu/atlas/textureAtlasShelfAllocator.ts new file mode 100644 index 000000000..1bbf92099 --- /dev/null +++ b/src/vs/editor/browser/gpu/atlas/textureAtlasShelfAllocator.ts @@ -0,0 +1,162 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { ensureNonNullable } from '../gpuUtils.js'; +import type { IRasterizedGlyph } from '../raster/raster.js'; +import { UsagePreviewColors, type ITextureAtlasAllocator, type ITextureAtlasPageGlyph } from './atlas.js'; + +/** + * The shelf allocator is a simple allocator that places glyphs in rows, starting a new row when the + * current row is full. Due to its simplicity, it can waste space but it is very fast. + */ +export class TextureAtlasShelfAllocator implements ITextureAtlasAllocator { + + private readonly _ctx: OffscreenCanvasRenderingContext2D; + + private _currentRow: ITextureAtlasShelf = { + x: 0, + y: 0, + h: 0 + }; + + /** A set of all glyphs allocated, this is only tracked to enable debug related functionality */ + private readonly _allocatedGlyphs: Set> = new Set(); + + private _nextIndex = 0; + + constructor( + private readonly _canvas: OffscreenCanvas, + private readonly _textureIndex: number, + ) { + this._ctx = ensureNonNullable(this._canvas.getContext('2d', { + willReadFrequently: true + })); + } + + public allocate(rasterizedGlyph: IRasterizedGlyph): ITextureAtlasPageGlyph | undefined { + // The glyph does not fit into the atlas page + const glyphWidth = rasterizedGlyph.boundingBox.right - rasterizedGlyph.boundingBox.left + 1; + const glyphHeight = rasterizedGlyph.boundingBox.bottom - rasterizedGlyph.boundingBox.top + 1; + if (glyphWidth > this._canvas.width || glyphHeight > this._canvas.height) { + throw new BugIndicatingError('Glyph is too large for the atlas page'); + } + + // Finalize and increment row if it doesn't fix horizontally + if (rasterizedGlyph.boundingBox.right - rasterizedGlyph.boundingBox.left + 1 > this._canvas.width - this._currentRow.x) { + this._currentRow.x = 0; + this._currentRow.y += this._currentRow.h; + this._currentRow.h = 1; + } + + // Return undefined if there isn't any room left + if (this._currentRow.y + rasterizedGlyph.boundingBox.bottom - rasterizedGlyph.boundingBox.top + 1 > this._canvas.height) { + return undefined; + } + + // Draw glyph + this._ctx.drawImage( + rasterizedGlyph.source, + // source + rasterizedGlyph.boundingBox.left, + rasterizedGlyph.boundingBox.top, + glyphWidth, + glyphHeight, + // destination + this._currentRow.x, + this._currentRow.y, + glyphWidth, + glyphHeight + ); + + // Create glyph object + const glyph: ITextureAtlasPageGlyph = { + pageIndex: this._textureIndex, + glyphIndex: this._nextIndex++, + x: this._currentRow.x, + y: this._currentRow.y, + w: glyphWidth, + h: glyphHeight, + originOffsetX: rasterizedGlyph.originOffset.x, + originOffsetY: rasterizedGlyph.originOffset.y + }; + + // Shift current row + this._currentRow.x += glyphWidth; + this._currentRow.h = Math.max(this._currentRow.h, glyphHeight); + + // Set the glyph + this._allocatedGlyphs.add(glyph); + + return glyph; + } + + public getUsagePreview(): Promise { + const w = this._canvas.width; + const h = this._canvas.height; + const canvas = new OffscreenCanvas(w, h); + const ctx = ensureNonNullable(canvas.getContext('2d')); + ctx.fillStyle = UsagePreviewColors.Unused; + ctx.fillRect(0, 0, w, h); + + const rowHeight: Map = new Map(); // y -> h + const rowWidth: Map = new Map(); // y -> w + for (const g of this._allocatedGlyphs) { + rowHeight.set(g.y, Math.max(rowHeight.get(g.y) ?? 0, g.h)); + rowWidth.set(g.y, Math.max(rowWidth.get(g.y) ?? 0, g.x + g.w)); + } + for (const g of this._allocatedGlyphs) { + ctx.fillStyle = UsagePreviewColors.Used; + ctx.fillRect(g.x, g.y, g.w, g.h); + ctx.fillStyle = UsagePreviewColors.Wasted; + ctx.fillRect(g.x, g.y + g.h, g.w, rowHeight.get(g.y)! - g.h); + } + for (const [rowY, rowW] of rowWidth.entries()) { + if (rowY !== this._currentRow.y) { + ctx.fillStyle = UsagePreviewColors.Wasted; + ctx.fillRect(rowW, rowY, w - rowW, rowHeight.get(rowY)!); + } + } + return canvas.convertToBlob(); + } + + getStats(): string { + const w = this._canvas.width; + const h = this._canvas.height; + + let usedPixels = 0; + let wastedPixels = 0; + const totalPixels = w * h; + + const rowHeight: Map = new Map(); // y -> h + const rowWidth: Map = new Map(); // y -> w + for (const g of this._allocatedGlyphs) { + rowHeight.set(g.y, Math.max(rowHeight.get(g.y) ?? 0, g.h)); + rowWidth.set(g.y, Math.max(rowWidth.get(g.y) ?? 0, g.x + g.w)); + } + for (const g of this._allocatedGlyphs) { + usedPixels += g.w * g.h; + wastedPixels += g.w * (rowHeight.get(g.y)! - g.h); + } + for (const [rowY, rowW] of rowWidth.entries()) { + if (rowY !== this._currentRow.y) { + wastedPixels += (w - rowW) * rowHeight.get(rowY)!; + } + } + return [ + `page${this._textureIndex}:`, + ` Total: ${totalPixels} (${w}x${h})`, + ` Used: ${usedPixels} (${((usedPixels / totalPixels) * 100).toPrecision(2)}%)`, + ` Wasted: ${wastedPixels} (${((wastedPixels / totalPixels) * 100).toPrecision(2)}%)`, + `Efficiency: ${((usedPixels / (usedPixels + wastedPixels)) * 100).toPrecision(2)}%`, + ].join('\n'); + } +} + +interface ITextureAtlasShelf { + x: number; + y: number; + h: number; +} diff --git a/src/vs/editor/browser/gpu/atlas/textureAtlasSlabAllocator.ts b/src/vs/editor/browser/gpu/atlas/textureAtlasSlabAllocator.ts new file mode 100644 index 000000000..b41fed697 --- /dev/null +++ b/src/vs/editor/browser/gpu/atlas/textureAtlasSlabAllocator.ts @@ -0,0 +1,433 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../../base/browser/dom.js'; +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { TwoKeyMap } from '../../../../base/common/map.js'; +import { ensureNonNullable } from '../gpuUtils.js'; +import type { IRasterizedGlyph } from '../raster/raster.js'; +import { UsagePreviewColors, type ITextureAtlasAllocator, type ITextureAtlasPageGlyph } from './atlas.js'; + +export interface TextureAtlasSlabAllocatorOptions { + slabW?: number; + slabH?: number; +} + +/** + * The slab allocator is a more complex allocator that places glyphs in square slabs of a fixed + * size. Slabs are defined by a small range of glyphs sizes they can house, this places like-sized + * glyphs in the same slab which reduces wasted space. + * + * Slabs also may contain "unused" regions on the left and bottom depending on the size of the + * glyphs they include. This space is used to place very thin or short glyphs, which would otherwise + * waste a lot of space in their own slab. + */ +export class TextureAtlasSlabAllocator implements ITextureAtlasAllocator { + + private readonly _ctx: OffscreenCanvasRenderingContext2D; + + private readonly _slabs: ITextureAtlasSlab[] = []; + private readonly _activeSlabsByDims: TwoKeyMap = new TwoKeyMap(); + + private readonly _unusedRects: ITextureAtlasSlabUnusedRect[] = []; + + private readonly _openRegionsByHeight: Map = new Map(); + private readonly _openRegionsByWidth: Map = new Map(); + + /** A set of all glyphs allocated, this is only tracked to enable debug related functionality */ + private readonly _allocatedGlyphs: Set> = new Set(); + + private _slabW: number; + private _slabH: number; + private _slabsPerRow: number; + private _slabsPerColumn: number; + private _nextIndex = 0; + + constructor( + private readonly _canvas: OffscreenCanvas, + private readonly _textureIndex: number, + options?: TextureAtlasSlabAllocatorOptions + ) { + this._ctx = ensureNonNullable(this._canvas.getContext('2d', { + willReadFrequently: true + })); + + this._slabW = Math.min( + options?.slabW ?? (64 << (Math.floor(getActiveWindow().devicePixelRatio) - 1)), + this._canvas.width + ); + this._slabH = Math.min( + options?.slabH ?? this._slabW, + this._canvas.height + ); + this._slabsPerRow = Math.floor(this._canvas.width / this._slabW); + this._slabsPerColumn = Math.floor(this._canvas.height / this._slabH); + } + + public allocate(rasterizedGlyph: IRasterizedGlyph): ITextureAtlasPageGlyph | undefined { + // Find ideal slab, creating it if there is none suitable + const glyphWidth = rasterizedGlyph.boundingBox.right - rasterizedGlyph.boundingBox.left + 1; + const glyphHeight = rasterizedGlyph.boundingBox.bottom - rasterizedGlyph.boundingBox.top + 1; + + // The glyph does not fit into the atlas page, glyphs should never be this large in practice + if (glyphWidth > this._canvas.width || glyphHeight > this._canvas.height) { + throw new BugIndicatingError('Glyph is too large for the atlas page'); + } + + // The glyph does not fit into a slab + if (glyphWidth > this._slabW || glyphHeight > this._slabH) { + // Only if this is the allocator's first glyph, resize the slab size to fit the glyph. + if (this._allocatedGlyphs.size > 0) { + return undefined; + } + // Find the largest power of 2 devisor that the glyph fits into, this ensure there is no + // wasted space outside the allocated slabs. + let sizeCandidate = this._canvas.width; + while (glyphWidth < sizeCandidate / 2 && glyphHeight < sizeCandidate / 2) { + sizeCandidate /= 2; + } + this._slabW = sizeCandidate; + this._slabH = sizeCandidate; + this._slabsPerRow = Math.floor(this._canvas.width / this._slabW); + this._slabsPerColumn = Math.floor(this._canvas.height / this._slabH); + } + + // const dpr = getActiveWindow().devicePixelRatio; + + // TODO: Include font size as well as DPR in nearestXPixels calculation + + // Round slab glyph dimensions to the nearest x pixels, where x scaled with device pixel ratio + // const nearestXPixels = Math.max(1, Math.floor(dpr / 0.5)); + // const nearestXPixels = Math.max(1, Math.floor(dpr)); + const desiredSlabSize = { + // Nearest square number + // TODO: This can probably be optimized + // w: 1 << Math.ceil(Math.sqrt(glyphWidth)), + // h: 1 << Math.ceil(Math.sqrt(glyphHeight)), + + // Nearest x px + // w: Math.ceil(glyphWidth / nearestXPixels) * nearestXPixels, + // h: Math.ceil(glyphHeight / nearestXPixels) * nearestXPixels, + + // Round odd numbers up + // w: glyphWidth % 0 === 1 ? glyphWidth + 1 : glyphWidth, + // h: glyphHeight % 0 === 1 ? glyphHeight + 1 : glyphHeight, + + // Exact number only + w: glyphWidth, + h: glyphHeight, + }; + + // Get any existing slab + let slab = this._activeSlabsByDims.get(desiredSlabSize.w, desiredSlabSize.h); + + // Check if the slab is full + if (slab) { + const glyphsPerSlab = Math.floor(this._slabW / slab.entryW) * Math.floor(this._slabH / slab.entryH); + if (slab.count >= glyphsPerSlab) { + slab = undefined; + } + } + + let dx: number | undefined; + let dy: number | undefined; + + // Search for suitable space in unused rectangles + if (!slab) { + // Only check availability for the smallest side + if (glyphWidth < glyphHeight) { + const openRegions = this._openRegionsByWidth.get(glyphWidth); + if (openRegions?.length) { + // TODO: Don't search everything? + // Search from the end so we can typically pop it off the stack + for (let i = openRegions.length - 1; i >= 0; i--) { + const r = openRegions[i]; + if (r.w >= glyphWidth && r.h >= glyphHeight) { + dx = r.x; + dy = r.y; + if (glyphWidth < r.w) { + this._unusedRects.push({ + x: r.x + glyphWidth, + y: r.y, + w: r.w - glyphWidth, + h: glyphHeight + }); + } + r.y += glyphHeight; + r.h -= glyphHeight; + if (r.h === 0) { + if (i === openRegions.length - 1) { + openRegions.pop(); + } else { + this._unusedRects.splice(i, 1); + } + } + break; + } + } + } + } else { + const openRegions = this._openRegionsByHeight.get(glyphHeight); + if (openRegions?.length) { + // TODO: Don't search everything? + // Search from the end so we can typically pop it off the stack + for (let i = openRegions.length - 1; i >= 0; i--) { + const r = openRegions[i]; + if (r.w >= glyphWidth && r.h >= glyphHeight) { + dx = r.x; + dy = r.y; + if (glyphHeight < r.h) { + this._unusedRects.push({ + x: r.x, + y: r.y + glyphHeight, + w: glyphWidth, + h: r.h - glyphHeight + }); + } + r.x += glyphWidth; + r.w -= glyphWidth; + if (r.h === 0) { + if (i === openRegions.length - 1) { + openRegions.pop(); + } else { + this._unusedRects.splice(i, 1); + } + } + break; + } + } + } + } + } + + // Create a new slab + if (dx === undefined || dy === undefined) { + if (!slab) { + if (this._slabs.length >= this._slabsPerRow * this._slabsPerColumn) { + return undefined; + } + + slab = { + x: Math.floor(this._slabs.length % this._slabsPerRow) * this._slabW, + y: Math.floor(this._slabs.length / this._slabsPerRow) * this._slabH, + entryW: desiredSlabSize.w, + entryH: desiredSlabSize.h, + count: 0 + }; + // Track unused regions to use for small glyphs + // +-------------+----+ + // | | | + // | | | <- Unused W region + // | | | + // |-------------+----+ + // | | <- Unused H region + // +------------------+ + const unusedW = this._slabW % slab.entryW; + const unusedH = this._slabH % slab.entryH; + if (unusedW) { + addEntryToMapArray(this._openRegionsByWidth, unusedW, { + x: slab.x + this._slabW - unusedW, + w: unusedW, + y: slab.y, + h: this._slabH - (unusedH ?? 0) + }); + } + if (unusedH) { + addEntryToMapArray(this._openRegionsByHeight, unusedH, { + x: slab.x, + w: this._slabW, + y: slab.y + this._slabH - unusedH, + h: unusedH + }); + } + this._slabs.push(slab); + this._activeSlabsByDims.set(desiredSlabSize.w, desiredSlabSize.h, slab); + } + + const glyphsPerRow = Math.floor(this._slabW / slab.entryW); + dx = slab.x + Math.floor(slab.count % glyphsPerRow) * slab.entryW; + dy = slab.y + Math.floor(slab.count / glyphsPerRow) * slab.entryH; + + // Shift current row + slab.count++; + } + + // Draw glyph + this._ctx.drawImage( + rasterizedGlyph.source, + // source + rasterizedGlyph.boundingBox.left, + rasterizedGlyph.boundingBox.top, + glyphWidth, + glyphHeight, + // destination + dx, + dy, + glyphWidth, + glyphHeight + ); + + // Create glyph object + const glyph: ITextureAtlasPageGlyph = { + pageIndex: this._textureIndex, + glyphIndex: this._nextIndex++, + x: dx, + y: dy, + w: glyphWidth, + h: glyphHeight, + originOffsetX: rasterizedGlyph.originOffset.x, + originOffsetY: rasterizedGlyph.originOffset.y + }; + + // Set the glyph + this._allocatedGlyphs.add(glyph); + + return glyph; + } + + public getUsagePreview(): Promise { + const w = this._canvas.width; + const h = this._canvas.height; + const canvas = new OffscreenCanvas(w, h); + const ctx = ensureNonNullable(canvas.getContext('2d')); + + ctx.fillStyle = UsagePreviewColors.Unused; + ctx.fillRect(0, 0, w, h); + + let slabEntryPixels = 0; + let usedPixels = 0; + let slabEdgePixels = 0; + let restrictedPixels = 0; + const slabW = 64 << (Math.floor(getActiveWindow().devicePixelRatio) - 1); + const slabH = slabW; + + // Draw wasted underneath glyphs first + for (const slab of this._slabs) { + let x = 0; + let y = 0; + for (let i = 0; i < slab.count; i++) { + if (x + slab.entryW > slabW) { + x = 0; + y += slab.entryH; + } + ctx.fillStyle = UsagePreviewColors.Wasted; + ctx.fillRect(slab.x + x, slab.y + y, slab.entryW, slab.entryH); + + slabEntryPixels += slab.entryW * slab.entryH; + x += slab.entryW; + } + const entriesPerRow = Math.floor(slabW / slab.entryW); + const entriesPerCol = Math.floor(slabH / slab.entryH); + const thisSlabPixels = slab.entryW * entriesPerRow * slab.entryH * entriesPerCol; + slabEdgePixels += (slabW * slabH) - thisSlabPixels; + } + + // Draw glyphs + for (const g of this._allocatedGlyphs) { + usedPixels += g.w * g.h; + ctx.fillStyle = UsagePreviewColors.Used; + ctx.fillRect(g.x, g.y, g.w, g.h); + } + + // Draw unused space on side + const unusedRegions = Array.from(this._openRegionsByWidth.values()).flat().concat(Array.from(this._openRegionsByHeight.values()).flat()); + for (const r of unusedRegions) { + ctx.fillStyle = UsagePreviewColors.Restricted; + ctx.fillRect(r.x, r.y, r.w, r.h); + restrictedPixels += r.w * r.h; + } + + + // Overlay actual glyphs on top + ctx.globalAlpha = 0.5; + ctx.drawImage(this._canvas, 0, 0); + ctx.globalAlpha = 1; + + return canvas.convertToBlob(); + } + + public getStats(): string { + const w = this._canvas.width; + const h = this._canvas.height; + + let slabEntryPixels = 0; + let usedPixels = 0; + let slabEdgePixels = 0; + let wastedPixels = 0; + let restrictedPixels = 0; + const totalPixels = w * h; + const slabW = 64 << (Math.floor(getActiveWindow().devicePixelRatio) - 1); + const slabH = slabW; + + // Draw wasted underneath glyphs first + for (const slab of this._slabs) { + let x = 0; + let y = 0; + for (let i = 0; i < slab.count; i++) { + if (x + slab.entryW > slabW) { + x = 0; + y += slab.entryH; + } + slabEntryPixels += slab.entryW * slab.entryH; + x += slab.entryW; + } + const entriesPerRow = Math.floor(slabW / slab.entryW); + const entriesPerCol = Math.floor(slabH / slab.entryH); + const thisSlabPixels = slab.entryW * entriesPerRow * slab.entryH * entriesPerCol; + slabEdgePixels += (slabW * slabH) - thisSlabPixels; + } + + // Draw glyphs + for (const g of this._allocatedGlyphs) { + usedPixels += g.w * g.h; + } + + // Draw unused space on side + const unusedRegions = Array.from(this._openRegionsByWidth.values()).flat().concat(Array.from(this._openRegionsByHeight.values()).flat()); + for (const r of unusedRegions) { + restrictedPixels += r.w * r.h; + } + + const edgeUsedPixels = slabEdgePixels - restrictedPixels; + wastedPixels = slabEntryPixels - (usedPixels - edgeUsedPixels); + + // usedPixels += slabEdgePixels - restrictedPixels; + const efficiency = usedPixels / (usedPixels + wastedPixels + restrictedPixels); + + return [ + `page[${this._textureIndex}]:`, + ` Total: ${totalPixels}px (${w}x${h})`, + ` Used: ${usedPixels}px (${((usedPixels / totalPixels) * 100).toFixed(2)}%)`, + ` Wasted: ${wastedPixels}px (${((wastedPixels / totalPixels) * 100).toFixed(2)}%)`, + `Restricted: ${restrictedPixels}px (${((restrictedPixels / totalPixels) * 100).toFixed(2)}%) (hard to allocate)`, + `Efficiency: ${efficiency === 1 ? '100' : (efficiency * 100).toFixed(2)}%`, + ` Slabs: ${this._slabs.length} of ${Math.floor(this._canvas.width / slabW) * Math.floor(this._canvas.height / slabH)}` + ].join('\n'); + } +} + +interface ITextureAtlasSlab { + x: number; + y: number; + entryH: number; + entryW: number; + count: number; +} + +interface ITextureAtlasSlabUnusedRect { + x: number; + y: number; + w: number; + h: number; +} + +function addEntryToMapArray(map: Map, key: K, entry: V) { + let list = map.get(key); + if (!list) { + list = []; + map.set(key, list); + } + list.push(entry); +} diff --git a/src/vs/editor/browser/gpu/bufferDirtyTracker.ts b/src/vs/editor/browser/gpu/bufferDirtyTracker.ts new file mode 100644 index 000000000..58c9f8c39 --- /dev/null +++ b/src/vs/editor/browser/gpu/bufferDirtyTracker.ts @@ -0,0 +1,72 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export interface IBufferDirtyTrackerReader { + /** + * The index of the first dirty index. + */ + readonly dataOffset: number | undefined; + /** + * The index of the last dirty index (inclusive). + */ + readonly dirtySize: number | undefined; + /** + * Whether the buffer is dirty. + */ + readonly isDirty: boolean; + /** + * Clear the dirty state. + */ + clear(): void; +} + +/** + * A simple tracker for dirty regions in a buffer. + */ +export class BufferDirtyTracker implements IBufferDirtyTrackerReader { + + private _startIndex: number | undefined; + private _endIndex: number | undefined; + + get dataOffset(): number | undefined { + return this._startIndex; + } + + get dirtySize(): number | undefined { + if (this._startIndex === undefined || this._endIndex === undefined) { + return undefined; + } + return this._endIndex - this._startIndex + 1; + } + + get isDirty(): boolean { return this._startIndex !== undefined; } + + /** + * Flag the index(es) as modified. Returns the index flagged. + * @param index An index to flag. + * @param length An optional length to flag. Defaults to 1. + */ + flag(index: number, length: number = 1): number { + this._flag(index); + if (length > 1) { + this._flag(index + length - 1); + } + return index; + } + + private _flag(index: number) { + if (this._startIndex === undefined || index < this._startIndex) { + this._startIndex = index; + } + if (this._endIndex === undefined || index > this._endIndex) { + this._endIndex = index; + } + } + + clear() { + this._startIndex = undefined; + this._endIndex = undefined; + } +} diff --git a/src/vs/editor/browser/gpu/fullFileRenderStrategy.ts b/src/vs/editor/browser/gpu/fullFileRenderStrategy.ts new file mode 100644 index 000000000..561185b79 --- /dev/null +++ b/src/vs/editor/browser/gpu/fullFileRenderStrategy.ts @@ -0,0 +1,301 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../base/browser/dom.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; +import { CursorColumns } from '../../common/core/cursorColumns.js'; +import type { IViewLineTokens } from '../../common/tokens/lineTokens.js'; +import type { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; +import type { ViewLineRenderingData } from '../../common/viewModel.js'; +import type { ViewContext } from '../../common/viewModel/viewContext.js'; +import type { ViewLineOptions } from '../viewParts/viewLines/viewLineOptions.js'; +import type { ITextureAtlasPageGlyph } from './atlas/atlas.js'; +import type { TextureAtlas } from './atlas/textureAtlas.js'; +import { fullFileRenderStrategyWgsl } from './fullFileRenderStrategy.wgsl.js'; +import { BindingId, type IGpuRenderStrategy } from './gpu.js'; +import { GPULifecycle } from './gpuDisposable.js'; +import { quadVertices } from './gpuUtils.js'; +import { GlyphRasterizer } from './raster/glyphRasterizer.js'; +import { ViewGpuContext } from './viewGpuContext.js'; + + +const enum Constants { + IndicesPerCell = 6, +} + +const enum CellBufferInfo { + FloatsPerEntry = 6, + BytesPerEntry = CellBufferInfo.FloatsPerEntry * 4, + Offset_X = 0, + Offset_Y = 1, + Offset_Unused1 = 2, + Offset_Unused2 = 3, + GlyphIndex = 4, + TextureIndex = 5, +} + +export class FullFileRenderStrategy extends Disposable implements IGpuRenderStrategy { + + private static _lineCount = 3000; + private static _columnCount = 200; + + readonly wgsl: string = fullFileRenderStrategyWgsl; + + private readonly _glyphRasterizer: GlyphRasterizer; + + private _cellBindBuffer!: GPUBuffer; + + /** + * The cell value buffers, these hold the cells and their glyphs. It's double buffers such that + * the thread doesn't block when one is being uploaded to the GPU. + */ + private _cellValueBuffers!: [ArrayBuffer, ArrayBuffer]; + private _activeDoubleBufferIndex: 0 | 1 = 0; + + private readonly _upToDateLines: [Set, Set] = [new Set(), new Set()]; + private _visibleObjectCount: number = 0; + + private _scrollOffsetBindBuffer!: GPUBuffer; + private _scrollOffsetValueBuffers!: [Float32Array, Float32Array]; + + get bindGroupEntries(): GPUBindGroupEntry[] { + return [ + { binding: BindingId.Cells, resource: { buffer: this._cellBindBuffer } }, + { binding: BindingId.ScrollOffset, resource: { buffer: this._scrollOffsetBindBuffer } } + ]; + } + + constructor( + private readonly _context: ViewContext, + private readonly _device: GPUDevice, + private readonly _canvas: HTMLCanvasElement, + private readonly _atlas: TextureAtlas, + ) { + super(); + + // TODO: Detect when lines have been tokenized and clear _upToDateLines + const fontFamily = this._context.configuration.options.get(EditorOption.fontFamily); + const fontSize = this._context.configuration.options.get(EditorOption.fontSize); + + this._glyphRasterizer = this._register(new GlyphRasterizer(fontSize, fontFamily)); + + const bufferSize = FullFileRenderStrategy._lineCount * FullFileRenderStrategy._columnCount * Constants.IndicesPerCell * Float32Array.BYTES_PER_ELEMENT; + this._cellBindBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco full file cell buffer', + size: bufferSize, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, + })).object; + this._cellValueBuffers = [ + new ArrayBuffer(bufferSize), + new ArrayBuffer(bufferSize), + ]; + + const scrollOffsetBufferSize = 2; + this._scrollOffsetBindBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco scroll offset buffer', + size: scrollOffsetBufferSize * Float32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + })).object; + this._scrollOffsetValueBuffers = [ + new Float32Array(scrollOffsetBufferSize), + new Float32Array(scrollOffsetBufferSize), + ]; + } + + reset() { + for (const bufferIndex of [0, 1]) { + // Zero out buffer and upload to GPU to prevent stale rows from rendering + const buffer = new Float32Array(this._cellValueBuffers[bufferIndex]); + buffer.fill(0, 0, buffer.length); + this._device.queue.writeBuffer(this._cellBindBuffer, 0, buffer.buffer, 0, buffer.byteLength); + this._upToDateLines[bufferIndex].clear(); + } + this._visibleObjectCount = 0; + } + + update(viewportData: ViewportData, viewLineOptions: ViewLineOptions): number { + // Pre-allocate variables to be shared within the loop - don't trust the JIT compiler to do + // this optimization to avoid additional blocking time in garbage collector + let chars = ''; + let y = 0; + let x = 0; + let screenAbsoluteX = 0; + let screenAbsoluteY = 0; + let zeroToOneX = 0; + let zeroToOneY = 0; + let wgslX = 0; + let wgslY = 0; + let xOffset = 0; + let glyph: Readonly; + let cellIndex = 0; + + let tokenStartIndex = 0; + let tokenEndIndex = 0; + let tokenMetadata = 0; + + let lineData: ViewLineRenderingData; + let content: string = ''; + let fillStartIndex = 0; + let fillEndIndex = 0; + + let tokens: IViewLineTokens; + + const dpr = getActiveWindow().devicePixelRatio; + + // Update scroll offset + const scrollOffsetBuffer = this._scrollOffsetValueBuffers[this._activeDoubleBufferIndex]; + scrollOffsetBuffer[0] = this._context.viewLayout.getCurrentScrollLeft() * dpr; + scrollOffsetBuffer[1] = this._context.viewLayout.getCurrentScrollTop() * dpr; + this._device.queue.writeBuffer(this._scrollOffsetBindBuffer, 0, scrollOffsetBuffer); + + // Update cell data + const cellBuffer = new Float32Array(this._cellValueBuffers[this._activeDoubleBufferIndex]); + const lineIndexCount = FullFileRenderStrategy._columnCount * Constants.IndicesPerCell; + + const upToDateLines = this._upToDateLines[this._activeDoubleBufferIndex]; + let dirtyLineStart = Number.MAX_SAFE_INTEGER; + let dirtyLineEnd = 0; + + for (y = viewportData.startLineNumber; y <= viewportData.endLineNumber; y++) { + + // Only attempt to render lines that the GPU renderer can handle + if (!ViewGpuContext.canRender(viewLineOptions, viewportData, y)) { + continue; + } + + // TODO: Update on dirty lines; is this known by line before rendering? + // if (upToDateLines.has(y)) { + // continue; + // } + dirtyLineStart = Math.min(dirtyLineStart, y); + dirtyLineEnd = Math.max(dirtyLineEnd, y); + + lineData = viewportData.getViewLineRenderingData(y); + content = lineData.content; + xOffset = 0; + + // See ViewLine#renderLine + // const renderLineInput = new RenderLineInput( + // options.useMonospaceOptimizations, + // options.canUseHalfwidthRightwardsArrow, + // lineData.content, + // lineData.continuesWithWrappedLine, + // lineData.isBasicASCII, + // lineData.containsRTL, + // lineData.minColumn - 1, + // lineData.tokens, + // actualInlineDecorations, + // lineData.tabSize, + // lineData.startVisibleColumn, + // options.spaceWidth, + // options.middotWidth, + // options.wsmiddotWidth, + // options.stopRenderingLineAfter, + // options.renderWhitespace, + // options.renderControlCharacters, + // options.fontLigatures !== EditorFontLigatures.OFF, + // selectionsOnLine + // ); + + tokens = lineData.tokens; + tokenStartIndex = lineData.minColumn - 1; + tokenEndIndex = 0; + for (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) { + tokenEndIndex = tokens.getEndOffset(tokenIndex); + if (tokenEndIndex <= tokenStartIndex) { + // The faux indent part of the line should have no token type + continue; + } + + + tokenMetadata = tokens.getMetadata(tokenIndex); + + // console.log(`token: start=${tokenStartIndex}, end=${tokenEndIndex}, fg=${colorMap[tokenFg]}`); + + + for (x = tokenStartIndex; x < tokenEndIndex; x++) { + // HACK: Prevent rendering past the end of the render buffer + // TODO: This needs to move to a dynamic long line rendering strategy + if (x > FullFileRenderStrategy._columnCount) { + break; + } + chars = content.charAt(x); + if (chars === ' ') { + continue; + } + if (chars === '\t') { + xOffset = CursorColumns.nextRenderTabStop(x + xOffset, lineData.tabSize) - x - 1; + continue; + } + + glyph = this._atlas.getGlyph(this._glyphRasterizer, chars, tokenMetadata); + + // TODO: Support non-standard character widths + screenAbsoluteX = Math.round((x + xOffset) * viewLineOptions.spaceWidth * dpr); + screenAbsoluteY = ( + Math.ceil(( + // Top of line including line height + viewportData.relativeVerticalOffset[y - viewportData.startLineNumber] + + // Delta to top of line after line height + Math.floor((viewportData.lineHeight - this._context.configuration.options.get(EditorOption.fontSize)) / 2) + ) * dpr) + ); + zeroToOneX = screenAbsoluteX / this._canvas.width; + zeroToOneY = screenAbsoluteY / this._canvas.height; + wgslX = zeroToOneX * 2 - 1; + wgslY = zeroToOneY * 2 - 1; + + cellIndex = ((y - 1) * FullFileRenderStrategy._columnCount + (x + xOffset)) * Constants.IndicesPerCell; + cellBuffer[cellIndex + CellBufferInfo.Offset_X] = wgslX; + cellBuffer[cellIndex + CellBufferInfo.Offset_Y] = -wgslY; + cellBuffer[cellIndex + CellBufferInfo.GlyphIndex] = glyph.glyphIndex; + cellBuffer[cellIndex + CellBufferInfo.TextureIndex] = glyph.pageIndex; + } + + tokenStartIndex = tokenEndIndex; + } + + // Clear to end of line + fillStartIndex = ((y - 1) * FullFileRenderStrategy._columnCount + (tokenEndIndex + xOffset)) * Constants.IndicesPerCell; + fillEndIndex = (y * FullFileRenderStrategy._columnCount) * Constants.IndicesPerCell; + cellBuffer.fill(0, fillStartIndex, fillEndIndex); + + upToDateLines.add(y); + } + + const visibleObjectCount = (viewportData.endLineNumber - viewportData.startLineNumber + 1) * lineIndexCount; + + // Only write when there is changed data + if (dirtyLineStart <= dirtyLineEnd) { + // Write buffer and swap it out to unblock writes + this._device.queue.writeBuffer( + this._cellBindBuffer, + (dirtyLineStart - 1) * lineIndexCount * Float32Array.BYTES_PER_ELEMENT, + cellBuffer.buffer, + (dirtyLineStart - 1) * lineIndexCount * Float32Array.BYTES_PER_ELEMENT, + (dirtyLineEnd - dirtyLineStart + 1) * lineIndexCount * Float32Array.BYTES_PER_ELEMENT + ); + } + + this._activeDoubleBufferIndex = this._activeDoubleBufferIndex ? 0 : 1; + + this._visibleObjectCount = visibleObjectCount; + return visibleObjectCount; + } + + draw(pass: GPURenderPassEncoder, viewportData: ViewportData): void { + if (this._visibleObjectCount <= 0) { + throw new BugIndicatingError('Attempt to draw 0 objects'); + } + pass.draw( + quadVertices.length / 2, + this._visibleObjectCount, + undefined, + (viewportData.startLineNumber - 1) * FullFileRenderStrategy._columnCount + ); + } +} diff --git a/src/vs/editor/browser/gpu/fullFileRenderStrategy.wgsl.ts b/src/vs/editor/browser/gpu/fullFileRenderStrategy.wgsl.ts new file mode 100644 index 000000000..c5072ffb6 --- /dev/null +++ b/src/vs/editor/browser/gpu/fullFileRenderStrategy.wgsl.ts @@ -0,0 +1,94 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BindingId } from './gpu.js'; + +export const fullFileRenderStrategyWgsl = /*wgsl*/ ` +struct GlyphInfo { + position: vec2f, + size: vec2f, + origin: vec2f, +}; + +struct Vertex { + @location(0) position: vec2f, +}; + +struct Cell { + position: vec2f, + unused1: vec2f, + glyphIndex: f32, + textureIndex: f32 +}; + +struct LayoutInfo { + canvasDims: vec2f, + viewportOffset: vec2f, + viewportDims: vec2f, +} + +struct ScrollOffset { + offset: vec2f +} + +struct VSOutput { + @builtin(position) position: vec4f, + @location(1) layerIndex: f32, + @location(0) texcoord: vec2f, +}; + +// Uniforms +@group(0) @binding(${BindingId.LayoutInfoUniform}) var layoutInfo: LayoutInfo; +@group(0) @binding(${BindingId.AtlasDimensionsUniform}) var atlasDims: vec2f; +@group(0) @binding(${BindingId.ScrollOffset}) var scrollOffset: ScrollOffset; + +// Storage buffers +@group(0) @binding(${BindingId.GlyphInfo0}) var glyphInfo0: array; +@group(0) @binding(${BindingId.GlyphInfo1}) var glyphInfo1: array; +@group(0) @binding(${BindingId.Cells}) var cells: array; + +@vertex fn vs( + vert: Vertex, + @builtin(instance_index) instanceIndex: u32, + @builtin(vertex_index) vertexIndex : u32 +) -> VSOutput { + let cell = cells[instanceIndex]; + // TODO: Is there a nicer way to init this? + var glyph = glyphInfo0[0]; + let glyphIndex = u32(cell.glyphIndex); + if (u32(cell.textureIndex) == 0) { + glyph = glyphInfo0[glyphIndex]; + } else { + glyph = glyphInfo1[glyphIndex]; + } + + var vsOut: VSOutput; + // Multiple vert.position by 2,-2 to get it into clipspace which ranged from -1 to 1 + vsOut.position = vec4f( + (((vert.position * vec2f(2, -2)) / layoutInfo.canvasDims)) * glyph.size + cell.position + ((glyph.origin * vec2f(2, -2)) / layoutInfo.canvasDims) + (((layoutInfo.viewportOffset - scrollOffset.offset * vec2(1, -1)) * 2) / layoutInfo.canvasDims), + 0.0, + 1.0 + ); + + vsOut.layerIndex = cell.textureIndex; + // Textures are flipped from natural direction on the y-axis, so flip it back + vsOut.texcoord = vert.position; + vsOut.texcoord = ( + // Glyph offset (0-1) + (glyph.position / atlasDims) + + // Glyph coordinate (0-1) + (vsOut.texcoord * (glyph.size / atlasDims)) + ); + + return vsOut; +} + +@group(0) @binding(${BindingId.TextureSampler}) var ourSampler: sampler; +@group(0) @binding(${BindingId.Texture}) var ourTexture: texture_2d_array; + +@fragment fn fs(vsOut: VSOutput) -> @location(0) vec4f { + return textureSample(ourTexture, ourSampler, vsOut.texcoord, u32(vsOut.layerIndex)); +} +`; diff --git a/src/vs/editor/browser/gpu/gpu.ts b/src/vs/editor/browser/gpu/gpu.ts new file mode 100644 index 000000000..3d4f2a284 --- /dev/null +++ b/src/vs/editor/browser/gpu/gpu.ts @@ -0,0 +1,30 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; +import type { ViewLineOptions } from '../viewParts/viewLines/viewLineOptions.js'; + +export const enum BindingId { + GlyphInfo0, + GlyphInfo1, + Cells, + TextureSampler, + Texture, + LayoutInfoUniform, + AtlasDimensionsUniform, + ScrollOffset, +} + +export interface IGpuRenderStrategy { + readonly wgsl: string; + readonly bindGroupEntries: GPUBindGroupEntry[]; + + /** + * Resets the render strategy, clearing all data and setting up for a new frame. + */ + reset(): void; + update(viewportData: ViewportData, viewLineOptions: ViewLineOptions): number; + draw?(pass: GPURenderPassEncoder, viewportData: ViewportData): void; +} diff --git a/src/vs/editor/browser/gpu/gpuDisposable.ts b/src/vs/editor/browser/gpu/gpuDisposable.ts new file mode 100644 index 000000000..1405eb898 --- /dev/null +++ b/src/vs/editor/browser/gpu/gpuDisposable.ts @@ -0,0 +1,46 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type { IReference } from '../../../base/common/lifecycle.js'; +import { isFunction } from '../../../base/common/types.js'; + +export namespace GPULifecycle { + export async function requestDevice(fallback?: (message: string) => void): Promise> { + try { + if (!navigator.gpu) { + throw new Error('This browser does not support WebGPU'); + } + const adapter = (await navigator.gpu.requestAdapter())!; + if (!adapter) { + throw new Error('This browser supports WebGPU but it appears to be disabled'); + } + return wrapDestroyableInDisposable(await adapter.requestDevice()); + } catch (e) { + if (fallback) { + fallback(e.message); + } + throw e; + } + } + + export function createBuffer(device: GPUDevice, descriptor: GPUBufferDescriptor, initialValues?: Float32Array | (() => Float32Array)): IReference { + const buffer = device.createBuffer(descriptor); + if (initialValues) { + device.queue.writeBuffer(buffer, 0, isFunction(initialValues) ? initialValues() : initialValues); + } + return wrapDestroyableInDisposable(buffer); + } + + export function createTexture(device: GPUDevice, descriptor: GPUTextureDescriptor): IReference { + return wrapDestroyableInDisposable(device.createTexture(descriptor)); + } +} + +function wrapDestroyableInDisposable(value: T): IReference { + return { + object: value, + dispose: () => value.destroy() + }; +} diff --git a/src/vs/editor/browser/gpu/gpuUtils.ts b/src/vs/editor/browser/gpu/gpuUtils.ts new file mode 100644 index 000000000..6ced420ac --- /dev/null +++ b/src/vs/editor/browser/gpu/gpuUtils.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { toDisposable, type IDisposable } from '../../../base/common/lifecycle.js'; + +export const quadVertices = new Float32Array([ + 1, 0, + 1, 1, + 0, 1, + 0, 0, + 0, 1, + 1, 0, +]); + +export function ensureNonNullable(value: T | null): T { + if (!value) { + throw new Error(`Value "${value}" cannot be null`); + } + return value; +} + +// TODO: Move capabilities into ElementSizeObserver? +export function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable { + // Observe any resizes to the element and extract the actual pixel size of the element if the + // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when + // converting between CSS pixels and device pixels which causes blurry rendering when device + // pixel ratio is not a round number. + let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => { + const entry = entries.find((entry) => entry.target === element); + if (!entry) { + return; + } + + // Disconnect if devicePixelContentBoxSize isn't supported by the browser + if (!('devicePixelContentBoxSize' in entry)) { + observer?.disconnect(); + observer = undefined; + return; + } + + // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden + const width = entry.devicePixelContentBoxSize[0].inlineSize; + const height = entry.devicePixelContentBoxSize[0].blockSize; + if (width > 0 && height > 0) { + callback(width, height); + } + }); + try { + observer.observe(element, { box: ['device-pixel-content-box'] } as any); + } catch { + observer.disconnect(); + observer = undefined; + throw new BugIndicatingError('Could not observe device pixel dimensions'); + } + return toDisposable(() => observer?.disconnect()); +} diff --git a/src/vs/editor/browser/gpu/objectCollectionBuffer.ts b/src/vs/editor/browser/gpu/objectCollectionBuffer.ts new file mode 100644 index 000000000..a61fe8c09 --- /dev/null +++ b/src/vs/editor/browser/gpu/objectCollectionBuffer.ts @@ -0,0 +1,207 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, dispose, toDisposable, type IDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; +import { BufferDirtyTracker, type IBufferDirtyTrackerReader } from './bufferDirtyTracker.js'; + +export interface ObjectCollectionBufferPropertySpec { + name: string; +} + +export type ObjectCollectionPropertyValues = { + [K in T[number]['name']]: number; +}; + +export interface IObjectCollectionBuffer extends IDisposable { + /** + * The underlying buffer. This **should not** be modified externally. + */ + readonly buffer: ArrayBuffer; + /** + * A view of the underlying buffer. This **should not** be modified externally. + */ + readonly view: Float32Array; + /** + * The size of the used portion of the buffer (in bytes). + */ + readonly bufferUsedSize: number; + /** + * The size of the used portion of the view (in float32s). + */ + readonly viewUsedSize: number; + /** + * The number of entries in the buffer. + */ + readonly entryCount: number; + + /** + * A tracker for dirty regions in the buffer. + */ + readonly dirtyTracker: IBufferDirtyTrackerReader; + + /** + * Fires when the buffer is modified. + */ + readonly onDidChange: Event; + + /** + * Fires when the buffer is recreated. + */ + readonly onDidChangeBuffer: Event; + + /** + * Creates an entry in the collection. This will return a managed object that can be modified + * which will update the underlying buffer. + * @param data The data of the entry. + */ + createEntry(data: ObjectCollectionPropertyValues): IObjectCollectionBufferEntry; +} + +/** + * An entry in an {@link ObjectCollectionBuffer}. Property values on the entry can be changed and + * their values will be updated automatically in the buffer. + */ +export interface IObjectCollectionBufferEntry extends IDisposable { + set(propertyName: T[number]['name'], value: number): void; + get(propertyName: T[number]['name']): number; + setRaw(data: ArrayLike): void; +} + +export function createObjectCollectionBuffer( + propertySpecs: T, + capacity: number +): IObjectCollectionBuffer { + return new ObjectCollectionBuffer(propertySpecs, capacity); +} + +class ObjectCollectionBuffer extends Disposable implements IObjectCollectionBuffer { + buffer: ArrayBuffer; + view: Float32Array; + + get bufferUsedSize() { + return this.viewUsedSize * Float32Array.BYTES_PER_ELEMENT; + } + get viewUsedSize() { + return this._entries.size * this._entrySize; + } + get entryCount() { + return this._entries.size; + } + + private _dirtyTracker = new BufferDirtyTracker(); + get dirtyTracker(): IBufferDirtyTrackerReader { return this._dirtyTracker; } + + private readonly _propertySpecsMap: Map = new Map(); + private readonly _entrySize: number; + private readonly _entries: LinkedList> = new LinkedList(); + + private readonly _onDidChange = this._register(new Emitter()); + readonly onDidChange = this._onDidChange.event; + private readonly _onDidChangeBuffer = this._register(new Emitter()); + readonly onDidChangeBuffer = this._onDidChangeBuffer.event; + + constructor( + public propertySpecs: T, + public capacity: number + ) { + super(); + + this.view = new Float32Array(capacity * propertySpecs.length); + this.buffer = this.view.buffer; + this._entrySize = propertySpecs.length; + for (let i = 0; i < propertySpecs.length; i++) { + const spec = { + offset: i, + ...propertySpecs[i] + }; + this._propertySpecsMap.set(spec.name, spec); + } + this._register(toDisposable(() => dispose(this._entries))); + } + + createEntry(data: ObjectCollectionPropertyValues): IObjectCollectionBufferEntry { + if (this._entries.size === this.capacity) { + this._expandBuffer(); + this._onDidChangeBuffer.fire(); + } + + const value = new ObjectCollectionBufferEntry(this.view, this._propertySpecsMap, this._dirtyTracker, this._entries.size, data); + const removeFromEntries = this._entries.push(value); + const listeners: IDisposable[] = []; + listeners.push(Event.forward(value.onDidChange, this._onDidChange)); + listeners.push(value.onWillDispose(() => { + const deletedEntryIndex = value.i; + removeFromEntries(); + + // Shift all entries after the deleted entry to the left + this.view.set(this.view.subarray(deletedEntryIndex * this._entrySize + 2, this._entries.size * this._entrySize + 2), deletedEntryIndex * this._entrySize); + + // Update entries to reflect the new i + for (const entry of this._entries) { + if (entry.i > deletedEntryIndex) { + entry.i--; + } + } + this._dirtyTracker.flag(deletedEntryIndex, (this._entries.size - deletedEntryIndex) * this._entrySize); + dispose(listeners); + })); + return value; + } + + private _expandBuffer() { + this.capacity *= 2; + const newView = new Float32Array(this.capacity * this._entrySize); + newView.set(this.view); + this.view = newView; + this.buffer = this.view.buffer; + } +} + +class ObjectCollectionBufferEntry extends Disposable implements IObjectCollectionBufferEntry { + + private readonly _onDidChange = this._register(new Emitter()); + readonly onDidChange = this._onDidChange.event; + private readonly _onWillDispose = this._register(new Emitter()); + readonly onWillDispose = this._onWillDispose.event; + + constructor( + private _view: Float32Array, + private _propertySpecsMap: Map, + private _dirtyTracker: BufferDirtyTracker, + public i: number, + data: ObjectCollectionPropertyValues, + ) { + super(); + for (const propertySpec of this._propertySpecsMap.values()) { + this._view[this.i * this._propertySpecsMap.size + propertySpec.offset] = data[propertySpec.name as keyof typeof data]; + } + this._dirtyTracker.flag(this.i * this._propertySpecsMap.size, this._propertySpecsMap.size); + } + + override dispose() { + this._onWillDispose.fire(); + super.dispose(); + } + + set(propertyName: T[number]['name'], value: number): void { + const i = this.i * this._propertySpecsMap.size + this._propertySpecsMap.get(propertyName)!.offset; + this._view[this._dirtyTracker.flag(i)] = value; + this._onDidChange.fire(); + } + + get(propertyName: T[number]['name']): number { + return this._view[this.i * this._propertySpecsMap.size + this._propertySpecsMap.get(propertyName)!.offset]; + } + + setRaw(data: ArrayLike): void { + if (data.length !== this._propertySpecsMap.size) { + throw new Error(`Data length ${data.length} does not match the number of properties in the collection (${this._propertySpecsMap.size})`); + } + this._view.set(data, this.i * this._propertySpecsMap.size); + this._dirtyTracker.flag(this.i * this._propertySpecsMap.size, this._propertySpecsMap.size); + } +} diff --git a/src/vs/editor/browser/gpu/raster/glyphRasterizer.ts b/src/vs/editor/browser/gpu/raster/glyphRasterizer.ts new file mode 100644 index 000000000..26010b7e3 --- /dev/null +++ b/src/vs/editor/browser/gpu/raster/glyphRasterizer.ts @@ -0,0 +1,240 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../../base/browser/dom.js'; +import { memoize } from '../../../../base/common/decorators.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { StringBuilder } from '../../../common/core/stringBuilder.js'; +import { FontStyle, TokenMetadata } from '../../../common/encodedTokenAttributes.js'; +import { ensureNonNullable } from '../gpuUtils.js'; +import type { IBoundingBox, IGlyphRasterizer, IRasterizedGlyph } from './raster.js'; + +let nextId = 0; + +export class GlyphRasterizer extends Disposable implements IGlyphRasterizer { + public readonly id = nextId++; + + @memoize + public get cacheKey(): string { + return `${this._fontFamily}_${this._fontSize}px`; + } + + private _canvas: OffscreenCanvas; + private _ctx: OffscreenCanvasRenderingContext2D; + + private _workGlyph: IRasterizedGlyph = { + source: null!, + boundingBox: { + left: 0, + bottom: 0, + right: 0, + top: 0, + }, + originOffset: { + x: 0, + y: 0, + } + }; + private _workGlyphConfig: { chars: string | undefined; metadata: number } = { chars: undefined, metadata: 0 }; + + constructor( + private readonly _fontSize: number, + private readonly _fontFamily: string, + ) { + super(); + + const devicePixelFontSize = Math.ceil(this._fontSize * getActiveWindow().devicePixelRatio); + this._canvas = new OffscreenCanvas(devicePixelFontSize * 3, devicePixelFontSize * 3); + this._ctx = ensureNonNullable(this._canvas.getContext('2d', { + willReadFrequently: true + })); + this._ctx.textBaseline = 'top'; + this._ctx.fillStyle = '#FFFFFF'; + } + + // TODO: Support drawing multiple fonts and sizes + /** + * Rasterizes a glyph. Note that the returned object is reused across different glyphs and + * therefore is only safe for synchronous access. + */ + public rasterizeGlyph( + chars: string, + metadata: number, + colorMap: string[], + ): Readonly { + if (chars === '') { + return { + source: this._canvas, + boundingBox: { top: 0, left: 0, bottom: -1, right: -1 }, + originOffset: { x: 0, y: 0 } + }; + } + // Check if the last glyph matches the config, reuse if so. This helps avoid unnecessary + // work when the rasterizer is called multiple times like when the glyph doesn't fit into a + // page. + if (this._workGlyphConfig.chars === chars && this._workGlyphConfig.metadata === metadata) { + return this._workGlyph; + } + this._workGlyphConfig.chars = chars; + this._workGlyphConfig.metadata = metadata; + return this._rasterizeGlyph(chars, metadata, colorMap); + } + + public _rasterizeGlyph( + chars: string, + metadata: number, + colorMap: string[], + ): Readonly { + const devicePixelFontSize = Math.ceil(this._fontSize * getActiveWindow().devicePixelRatio); + const canvasDim = devicePixelFontSize * 3; + if (this._canvas.width !== canvasDim) { + this._canvas.width = canvasDim; + this._canvas.height = canvasDim; + } + + // TODO: Support workbench.fontAliasing + this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); + + const fontSb = new StringBuilder(200); + const fontStyle = TokenMetadata.getFontStyle(metadata); + if (fontStyle & FontStyle.Italic) { + fontSb.appendString('italic '); + } + if (fontStyle & FontStyle.Bold) { + fontSb.appendString('bold '); + } + fontSb.appendString(`${devicePixelFontSize}px ${this._fontFamily}`); + this._ctx.font = fontSb.build(); + + // TODO: Support FontStyle.Strikethrough and FontStyle.Underline text decorations, these + // need to be drawn manually to the canvas. See xterm.js for "dodging" the text for + // underlines. + + const originX = devicePixelFontSize; + const originY = devicePixelFontSize; + this._ctx.fillStyle = colorMap[TokenMetadata.getForeground(metadata)]; + // TODO: This might actually be slower + // const textMetrics = this._ctx.measureText(chars); + this._ctx.textBaseline = 'top'; + this._ctx.fillText(chars, originX, originY); + + const imageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height); + this._findGlyphBoundingBox(imageData, this._workGlyph.boundingBox); + // const offset = { + // x: textMetrics.actualBoundingBoxLeft, + // y: textMetrics.actualBoundingBoxAscent + // }; + // const size = { + // w: textMetrics.actualBoundingBoxRight + textMetrics.actualBoundingBoxLeft, + // y: textMetrics.actualBoundingBoxDescent + textMetrics.actualBoundingBoxAscent, + // wInt: Math.ceil(textMetrics.actualBoundingBoxRight + textMetrics.actualBoundingBoxLeft), + // yInt: Math.ceil(textMetrics.actualBoundingBoxDescent + textMetrics.actualBoundingBoxAscent), + // }; + // console.log(`${chars}_${fg}`, textMetrics, boundingBox, originX, originY, { width: boundingBox.right - boundingBox.left, height: boundingBox.bottom - boundingBox.top }); + this._workGlyph.source = this._canvas; + this._workGlyph.originOffset.x = this._workGlyph.boundingBox.left - originX; + this._workGlyph.originOffset.y = this._workGlyph.boundingBox.top - originY; + // const result2: IRasterizedGlyph = { + // source: this._canvas, + // boundingBox: { + // left: Math.floor(originX - textMetrics.actualBoundingBoxLeft), + // right: Math.ceil(originX + textMetrics.actualBoundingBoxRight), + // top: Math.floor(originY - textMetrics.actualBoundingBoxAscent), + // bottom: Math.ceil(originY + textMetrics.actualBoundingBoxDescent), + // }, + // originOffset: { + // x: Math.floor(boundingBox.left - originX), + // y: Math.floor(boundingBox.top - originY) + // } + // }; + + // TODO: Verify result 1 and 2 are the same + + // if (result2.boundingBox.left > result.boundingBox.left) { + // debugger; + // } + // if (result2.boundingBox.top > result.boundingBox.top) { + // debugger; + // } + // if (result2.boundingBox.right < result.boundingBox.right) { + // debugger; + // } + // if (result2.boundingBox.bottom < result.boundingBox.bottom) { + // debugger; + // } + // if (JSON.stringify(result2.originOffset) !== JSON.stringify(result.originOffset)) { + // debugger; + // } + + + + return this._workGlyph; + } + + // TODO: Does this even need to happen when measure text is used? + private _findGlyphBoundingBox(imageData: ImageData, outBoundingBox: IBoundingBox) { + const height = this._canvas.height; + const width = this._canvas.width; + let found = false; + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x++) { + const alphaOffset = y * width * 4 + x * 4 + 3; + if (imageData.data[alphaOffset] !== 0) { + outBoundingBox.top = y; + found = true; + break; + } + } + if (found) { + break; + } + } + outBoundingBox.left = 0; + found = false; + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + const alphaOffset = y * width * 4 + x * 4 + 3; + if (imageData.data[alphaOffset] !== 0) { + outBoundingBox.left = x; + found = true; + break; + } + } + if (found) { + break; + } + } + outBoundingBox.right = width; + found = false; + for (let x = width - 1; x >= outBoundingBox.left; x--) { + for (let y = 0; y < height; y++) { + const alphaOffset = y * width * 4 + x * 4 + 3; + if (imageData.data[alphaOffset] !== 0) { + outBoundingBox.right = x; + found = true; + break; + } + } + if (found) { + break; + } + } + outBoundingBox.bottom = outBoundingBox.top; + found = false; + for (let y = height - 1; y >= 0; y--) { + for (let x = 0; x < width; x++) { + const alphaOffset = y * width * 4 + x * 4 + 3; + if (imageData.data[alphaOffset] !== 0) { + outBoundingBox.bottom = y; + found = true; + break; + } + } + if (found) { + break; + } + } + } +} diff --git a/src/vs/editor/browser/gpu/raster/raster.ts b/src/vs/editor/browser/gpu/raster/raster.ts new file mode 100644 index 000000000..6eb41e680 --- /dev/null +++ b/src/vs/editor/browser/gpu/raster/raster.ts @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; + +export interface IGlyphRasterizer { + /** + * A unique identifier for the rasterizer. + */ + readonly id: number; + + /** + * An identifier for properties inherent to rendering with this rasterizer. This will be the + * same as other rasterizer cache keys provided they share the same property values in question. + */ + readonly cacheKey: string; + + /** + * Rasterizes a glyph. + * @param chars The character(s) to rasterize. This can be a single character, a ligature, an + * emoji, etc. + * @param metadata The metadata of the glyph to rasterize. See {@link MetadataConsts} for how + * this works. + * @param colorMap A theme's color map. + */ + rasterizeGlyph( + chars: string, + metadata: number, + colorMap: string[], + ): Readonly; +} + +/** + * A simple bounding box in a 2D plane. + */ +export interface IBoundingBox { + /** The left x coordinate (inclusive). */ + left: number; + /** The top y coordinate (inclusive). */ + top: number; + /** The right x coordinate (inclusive). */ + right: number; + /** The bottom y coordinate (inclusive). */ + bottom: number; +} + +/** + * A glyph that has been rasterized to a canvas. + */ +export interface IRasterizedGlyph { + /** + * The source canvas the glyph was rasterized to. + */ + source: OffscreenCanvas; + /** + * The bounding box of the glyph within {@link source}. + */ + boundingBox: IBoundingBox; + /** + * The offset to the glyph's origin (where it should be drawn to). + */ + originOffset: { x: number; y: number }; +} diff --git a/src/vs/editor/browser/gpu/rectangleRenderer.ts b/src/vs/editor/browser/gpu/rectangleRenderer.ts new file mode 100644 index 000000000..0859281f4 --- /dev/null +++ b/src/vs/editor/browser/gpu/rectangleRenderer.ts @@ -0,0 +1,291 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../base/browser/dom.js'; +import { Event } from '../../../base/common/event.js'; +import { IReference, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; +import { ViewEventHandler } from '../../common/viewEventHandler.js'; +import type { ViewScrollChangedEvent } from '../../common/viewEvents.js'; +import type { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; +import type { ViewContext } from '../../common/viewModel/viewContext.js'; +import { GPULifecycle } from './gpuDisposable.js'; +import { observeDevicePixelDimensions, quadVertices } from './gpuUtils.js'; +import { createObjectCollectionBuffer, type IObjectCollectionBuffer, type IObjectCollectionBufferEntry } from './objectCollectionBuffer.js'; +import { RectangleRendererBindingId, rectangleRendererWgsl } from './rectangleRenderer.wgsl.js'; + +export type RectangleRendererEntrySpec = [ + { name: 'x' }, + { name: 'y' }, + { name: 'width' }, + { name: 'height' }, + { name: 'red' }, + { name: 'green' }, + { name: 'blue' }, + { name: 'alpha' }, +]; + +export class RectangleRenderer extends ViewEventHandler { + + private _device!: GPUDevice; + private _renderPassDescriptor!: GPURenderPassDescriptor; + private _renderPassColorAttachment!: GPURenderPassColorAttachment; + private _bindGroup!: GPUBindGroup; + private _pipeline!: GPURenderPipeline; + + private _vertexBuffer!: GPUBuffer; + private readonly _shapeBindBuffer: MutableDisposable> = this._register(new MutableDisposable()); + + private _scrollOffsetBindBuffer!: GPUBuffer; + private _scrollOffsetValueBuffer!: Float32Array; + + private _initialized: boolean = false; + private _scrollChanged: boolean = true; + + private readonly _shapeCollection: IObjectCollectionBuffer = this._register(createObjectCollectionBuffer([ + { name: 'x' }, + { name: 'y' }, + { name: 'width' }, + { name: 'height' }, + { name: 'red' }, + { name: 'green' }, + { name: 'blue' }, + { name: 'alpha' }, + ], 32)); + + constructor( + private readonly _context: ViewContext, + private readonly _canvas: HTMLCanvasElement, + private readonly _ctx: GPUCanvasContext, + device: Promise, + ) { + super(); + + this._context.addEventHandler(this); + + this._initWebgpu(device); + } + + private async _initWebgpu(device: Promise) { + + // #region General + + this._device = await device; + + if (this._store.isDisposed) { + return; + } + + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + this._ctx.configure({ + device: this._device, + format: presentationFormat, + alphaMode: 'premultiplied', + }); + + this._renderPassColorAttachment = { + view: null!, // Will be filled at render time + loadOp: 'load', + storeOp: 'store', + }; + this._renderPassDescriptor = { + label: 'Monaco rectangle renderer render pass', + colorAttachments: [this._renderPassColorAttachment], + }; + + // #endregion General + + // #region Uniforms + + let layoutInfoUniformBuffer: GPUBuffer; + { + const enum Info { + FloatsPerEntry = 6, + BytesPerEntry = Info.FloatsPerEntry * 4, + Offset_CanvasWidth____ = 0, + Offset_CanvasHeight___ = 1, + Offset_ViewportOffsetX = 2, + Offset_ViewportOffsetY = 3, + Offset_ViewportWidth__ = 4, + Offset_ViewportHeight_ = 5, + } + const bufferValues = new Float32Array(Info.FloatsPerEntry); + const updateBufferValues = (canvasDevicePixelWidth: number = this._canvas.width, canvasDevicePixelHeight: number = this._canvas.height) => { + bufferValues[Info.Offset_CanvasWidth____] = canvasDevicePixelWidth; + bufferValues[Info.Offset_CanvasHeight___] = canvasDevicePixelHeight; + bufferValues[Info.Offset_ViewportOffsetX] = Math.ceil(this._context.configuration.options.get(EditorOption.layoutInfo).contentLeft * getActiveWindow().devicePixelRatio); + bufferValues[Info.Offset_ViewportOffsetY] = 0; + bufferValues[Info.Offset_ViewportWidth__] = bufferValues[Info.Offset_CanvasWidth____] - bufferValues[Info.Offset_ViewportOffsetX]; + bufferValues[Info.Offset_ViewportHeight_] = bufferValues[Info.Offset_CanvasHeight___] - bufferValues[Info.Offset_ViewportOffsetY]; + return bufferValues; + }; + layoutInfoUniformBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco rectangle renderer uniform buffer', + size: Info.BytesPerEntry, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }, () => updateBufferValues())).object; + this._register(observeDevicePixelDimensions(this._canvas, getActiveWindow(), (w, h) => { + this._device.queue.writeBuffer(layoutInfoUniformBuffer, 0, updateBufferValues(w, h)); + })); + } + + const scrollOffsetBufferSize = 2; + this._scrollOffsetBindBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco rectangle renderer scroll offset buffer', + size: scrollOffsetBufferSize * Float32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + })).object; + this._scrollOffsetValueBuffer = new Float32Array(scrollOffsetBufferSize); + + // #endregion Uniforms + + // #region Storage buffers + + const createShapeBindBuffer = () => { + return GPULifecycle.createBuffer(this._device, { + label: 'Monaco rectangle renderer shape buffer', + size: this._shapeCollection.buffer.byteLength, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, + }); + }; + this._shapeBindBuffer.value = createShapeBindBuffer(); + this._register(Event.runAndSubscribe(this._shapeCollection.onDidChangeBuffer, () => { + this._shapeBindBuffer.value = createShapeBindBuffer(); + if (this._pipeline) { + this._updateBindGroup(this._pipeline, layoutInfoUniformBuffer); + } + })); + + // #endregion Storage buffers + + // #region Vertex buffer + + this._vertexBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco rectangle renderer vertex buffer', + size: quadVertices.byteLength, + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST, + }, quadVertices)).object; + + // #endregion Vertex buffer + + // #region Shader module + + const module = this._device.createShaderModule({ + label: 'Monaco rectangle renderer shader module', + code: rectangleRendererWgsl, + }); + + // #endregion Shader module + + // #region Pipeline + + this._pipeline = this._device.createRenderPipeline({ + label: 'Monaco rectangle renderer render pipeline', + layout: 'auto', + vertex: { + module, + buffers: [ + { + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, // 2 floats, 4 bytes each + attributes: [ + { shaderLocation: 0, offset: 0, format: 'float32x2' }, // position + ], + } + ] + }, + fragment: { + module, + targets: [ + { + format: presentationFormat, + blend: { + color: { + srcFactor: 'src-alpha', + dstFactor: 'one-minus-src-alpha' + }, + alpha: { + srcFactor: 'src-alpha', + dstFactor: 'one-minus-src-alpha' + }, + }, + } + ], + }, + }); + + // #endregion Pipeline + + // #region Bind group + + this._updateBindGroup(this._pipeline, layoutInfoUniformBuffer); + + // endregion Bind group + + this._initialized = true; + } + + private _updateBindGroup(pipeline: GPURenderPipeline, layoutInfoUniformBuffer: GPUBuffer) { + this._bindGroup = this._device.createBindGroup({ + label: 'Monaco rectangle renderer bind group', + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: RectangleRendererBindingId.Shapes, resource: { buffer: this._shapeBindBuffer.value!.object } }, + { binding: RectangleRendererBindingId.LayoutInfoUniform, resource: { buffer: layoutInfoUniformBuffer } }, + { binding: RectangleRendererBindingId.ScrollOffset, resource: { buffer: this._scrollOffsetBindBuffer } }, + ], + }); + } + + register(x: number, y: number, width: number, height: number, red: number, green: number, blue: number, alpha: number): IObjectCollectionBufferEntry { + return this._shapeCollection.createEntry({ x, y, width, height, red, green, blue, alpha }); + } + + // --- begin event handlers + + public override onScrollChanged(e: ViewScrollChangedEvent): boolean { + this._scrollChanged = true; + return super.onScrollChanged(e); + } + + // --- end event handlers + + private _update() { + const shapes = this._shapeCollection; + if (shapes.dirtyTracker.isDirty) { + this._device.queue.writeBuffer(this._shapeBindBuffer.value!.object, 0, shapes.buffer, shapes.dirtyTracker.dataOffset, shapes.dirtyTracker.dirtySize! * shapes.view.BYTES_PER_ELEMENT); + shapes.dirtyTracker.clear(); + } + + // Update scroll offset + if (this._scrollChanged) { + const dpr = getActiveWindow().devicePixelRatio; + this._scrollOffsetValueBuffer[0] = this._context.viewLayout.getCurrentScrollLeft() * dpr; + this._scrollOffsetValueBuffer[1] = this._context.viewLayout.getCurrentScrollTop() * dpr; + this._device.queue.writeBuffer(this._scrollOffsetBindBuffer, 0, this._scrollOffsetValueBuffer); + } + } + + draw(viewportData: ViewportData) { + if (!this._initialized) { + return; + } + + this._update(); + + const encoder = this._device.createCommandEncoder({ label: 'Monaco rectangle renderer command encoder' }); + + this._renderPassColorAttachment.view = this._ctx.getCurrentTexture().createView(); + const pass = encoder.beginRenderPass(this._renderPassDescriptor); + pass.setPipeline(this._pipeline); + pass.setVertexBuffer(0, this._vertexBuffer); + pass.setBindGroup(0, this._bindGroup); + + pass.draw(quadVertices.length / 2, this._shapeCollection.entryCount); + pass.end(); + + const commandBuffer = encoder.finish(); + this._device.queue.submit([commandBuffer]); + } +} diff --git a/src/vs/editor/browser/gpu/rectangleRenderer.wgsl.ts b/src/vs/editor/browser/gpu/rectangleRenderer.wgsl.ts new file mode 100644 index 000000000..44865c932 --- /dev/null +++ b/src/vs/editor/browser/gpu/rectangleRenderer.wgsl.ts @@ -0,0 +1,73 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export const enum RectangleRendererBindingId { + Shapes, + LayoutInfoUniform, + ScrollOffset, +} + +export const rectangleRendererWgsl = /*wgsl*/ ` + +struct Vertex { + @location(0) position: vec2f, +}; + +struct LayoutInfo { + canvasDims: vec2f, + viewportOffset: vec2f, + viewportDims: vec2f, +} + +struct ScrollOffset { + offset: vec2f, +} + +struct Shape { + position: vec2f, + size: vec2f, + color: vec4f, +}; + +struct VSOutput { + @builtin(position) position: vec4f, + @location(1) color: vec4f, +}; + +// Uniforms +@group(0) @binding(${RectangleRendererBindingId.LayoutInfoUniform}) var layoutInfo: LayoutInfo; + +// Storage buffers +@group(0) @binding(${RectangleRendererBindingId.Shapes}) var shapes: array; +@group(0) @binding(${RectangleRendererBindingId.ScrollOffset}) var scrollOffset: ScrollOffset; + +@vertex fn vs( + vert: Vertex, + @builtin(instance_index) instanceIndex: u32, + @builtin(vertex_index) vertexIndex : u32 +) -> VSOutput { + let shape = shapes[instanceIndex]; + + var vsOut: VSOutput; + vsOut.position = vec4f( + ( + // Top left corner + vec2f(-1, 1) + + // Convert pixel position to clipspace + vec2f( 2, -2) / layoutInfo.canvasDims * + // Shape position and size + (layoutInfo.viewportOffset - scrollOffset.offset + shape.position + vert.position * shape.size) + ), + 0.0, + 1.0 + ); + vsOut.color = shape.color; + return vsOut; +} + +@fragment fn fs(vsOut: VSOutput) -> @location(0) vec4f { + return vsOut.color; +} +`; diff --git a/src/vs/editor/browser/gpu/taskQueue.ts b/src/vs/editor/browser/gpu/taskQueue.ts new file mode 100644 index 000000000..27d64d01f --- /dev/null +++ b/src/vs/editor/browser/gpu/taskQueue.ts @@ -0,0 +1,172 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../base/browser/dom.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; + +/** + * Copyright (c) 2022 The xterm.js authors. All rights reserved. + * @license MIT + */ + +interface ITaskQueue { + /** + * Adds a task to the queue which will run in a future idle callback. + * To avoid perceivable stalls on the mainthread, tasks with heavy workload + * should split their work into smaller pieces and return `true` to get + * called again until the work is done (on falsy return value). + */ + enqueue(task: () => boolean | void): void; + + /** + * Flushes the queue, running all remaining tasks synchronously. + */ + flush(): void; + + /** + * Clears any remaining tasks from the queue, these will not be run. + */ + clear(): void; +} + +interface ITaskDeadline { + timeRemaining(): number; +} +type CallbackWithDeadline = (deadline: ITaskDeadline) => void; + +abstract class TaskQueue extends Disposable implements ITaskQueue { + private _tasks: (() => boolean | void)[] = []; + private _idleCallback?: number; + private _i = 0; + + constructor() { + super(); + this._register(toDisposable(() => this.clear())); + } + + protected abstract _requestCallback(callback: CallbackWithDeadline): number; + protected abstract _cancelCallback(identifier: number): void; + + public enqueue(task: () => boolean | void): void { + this._tasks.push(task); + this._start(); + } + + public flush(): void { + while (this._i < this._tasks.length) { + if (!this._tasks[this._i]()) { + this._i++; + } + } + this.clear(); + } + + public clear(): void { + if (this._idleCallback) { + this._cancelCallback(this._idleCallback); + this._idleCallback = undefined; + } + this._i = 0; + this._tasks.length = 0; + } + + private _start(): void { + if (!this._idleCallback) { + this._idleCallback = this._requestCallback(this._process.bind(this)); + } + } + + private _process(deadline: ITaskDeadline): void { + this._idleCallback = undefined; + let taskDuration = 0; + let longestTask = 0; + let lastDeadlineRemaining = deadline.timeRemaining(); + let deadlineRemaining = 0; + while (this._i < this._tasks.length) { + taskDuration = Date.now(); + if (!this._tasks[this._i]()) { + this._i++; + } + // other than performance.now, Date.now might not be stable (changes on wall clock changes), + // this is not an issue here as a clock change during a short running task is very unlikely + // in case it still happened and leads to negative duration, simply assume 1 msec + taskDuration = Math.max(1, Date.now() - taskDuration); + longestTask = Math.max(taskDuration, longestTask); + // Guess the following task will take a similar time to the longest task in this batch, allow + // additional room to try avoid exceeding the deadline + deadlineRemaining = deadline.timeRemaining(); + if (longestTask * 1.5 > deadlineRemaining) { + // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the + // task should be split into sub-tasks to ensure the UI remains responsive. + if (lastDeadlineRemaining - taskDuration < -20) { + console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`); + } + this._start(); + return; + } + lastDeadlineRemaining = deadlineRemaining; + } + this.clear(); + } +} + +/** + * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames + * per second. The tasks will run in the order they are enqueued, but they will run some time later, + * and care should be taken to ensure they're non-urgent and will not introduce race conditions. + */ +export class PriorityTaskQueue extends TaskQueue { + protected _requestCallback(callback: CallbackWithDeadline): number { + return getActiveWindow().setTimeout(() => callback(this._createDeadline(16))); + } + + protected _cancelCallback(identifier: number): void { + getActiveWindow().clearTimeout(identifier); + } + + private _createDeadline(duration: number): ITaskDeadline { + const end = Date.now() + duration; + return { + timeRemaining: () => Math.max(0, end - Date.now()) + }; + } +} + +/** + * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's + * deadline given by the environment. The tasks will run in the order they are enqueued, but they + * will run some time later, and care should be taken to ensure they're non-urgent and will not + * introduce race conditions. + */ +export class IdleTaskQueue extends TaskQueue { + protected _requestCallback(callback: IdleRequestCallback): number { + return getActiveWindow().requestIdleCallback(callback); + } + + protected _cancelCallback(identifier: number): void { + getActiveWindow().cancelIdleCallback(identifier); + } +} + +/** + * An object that tracks a single debounced task that will run on the next idle frame. When called + * multiple times, only the last set task will run. + */ +export class DebouncedIdleTask { + private _queue: ITaskQueue; + + constructor() { + this._queue = new IdleTaskQueue(); + } + + public set(task: () => boolean | void): void { + this._queue.clear(); + this._queue.enqueue(task); + } + + public flush(): void { + this._queue.flush(); + } +} diff --git a/src/vs/editor/browser/gpu/viewGpuContext.ts b/src/vs/editor/browser/gpu/viewGpuContext.ts new file mode 100644 index 000000000..877c1b3a8 --- /dev/null +++ b/src/vs/editor/browser/gpu/viewGpuContext.ts @@ -0,0 +1,123 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as nls from '../../../nls.js'; +import { addDisposableListener, getActiveWindow } from '../../../base/browser/dom.js'; +import { createFastDomNode, type FastDomNode } from '../../../base/browser/fastDomNode.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import type { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; +import type { ViewLineOptions } from '../viewParts/viewLines/viewLineOptions.js'; +import { observableValue, runOnChange, type IObservable } from '../../../base/common/observable.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { TextureAtlas } from './atlas/textureAtlas.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { INotificationService, IPromptChoice, Severity } from '../../../platform/notification/common/notification.js'; +import { GPULifecycle } from './gpuDisposable.js'; +import { ensureNonNullable, observeDevicePixelDimensions } from './gpuUtils.js'; +import { RectangleRenderer } from './rectangleRenderer.js'; +import type { ViewContext } from '../../common/viewModel/viewContext.js'; + +export class ViewGpuContext extends Disposable { + readonly canvas: FastDomNode; + readonly ctx: GPUCanvasContext; + + readonly device: Promise; + + readonly rectangleRenderer: RectangleRenderer; + + private static _atlas: TextureAtlas | undefined; + + + /** + * The shared texture atlas to use across all views. + * + * @throws if called before the GPU device is resolved + */ + static get atlas(): TextureAtlas { + if (!ViewGpuContext._atlas) { + throw new BugIndicatingError('Cannot call ViewGpuContext.textureAtlas before device is resolved'); + } + return ViewGpuContext._atlas; + } + /** + * The shared texture atlas to use across all views. This is a convenience alias for + * {@link ViewGpuContext.atlas}. + * + * @throws if called before the GPU device is resolved + */ + get atlas(): TextureAtlas { + return ViewGpuContext.atlas; + } + + readonly canvasDevicePixelDimensions: IObservable<{ width: number; height: number }>; + readonly devicePixelRatio: IObservable; + + constructor( + context: ViewContext, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @INotificationService private readonly _notificationService: INotificationService, + @IConfigurationService private readonly configurationService: IConfigurationService, + ) { + super(); + + this.canvas = createFastDomNode(document.createElement('canvas')); + this.canvas.setClassName('editorCanvas'); + + this.ctx = ensureNonNullable(this.canvas.domNode.getContext('webgpu')); + + this.device = GPULifecycle.requestDevice((message) => { + const choices: IPromptChoice[] = [{ + label: nls.localize('editor.dom.render', "Use DOM-based rendering"), + run: () => this.configurationService.updateValue('editor.experimentalGpuAcceleration', 'off'), + }]; + this._notificationService.prompt(Severity.Warning, message, choices); + }).then(ref => this._register(ref).object); + this.device.then(device => { + if (!ViewGpuContext._atlas) { + ViewGpuContext._atlas = this._instantiationService.createInstance(TextureAtlas, device.limits.maxTextureDimension2D, undefined); + runOnChange(this.devicePixelRatio, () => ViewGpuContext.atlas.clear()); + } + }); + + this.rectangleRenderer = this._instantiationService.createInstance(RectangleRenderer, context, this.canvas.domNode, this.ctx, this.device); + + const dprObs = observableValue(this, getActiveWindow().devicePixelRatio); + this._register(addDisposableListener(getActiveWindow(), 'resize', () => { + dprObs.set(getActiveWindow().devicePixelRatio, undefined); + })); + this.devicePixelRatio = dprObs; + + const canvasDevicePixelDimensions = observableValue(this, { width: this.canvas.domNode.width, height: this.canvas.domNode.height }); + this._register(observeDevicePixelDimensions( + this.canvas.domNode, + getActiveWindow(), + (width, height) => { + this.canvas.domNode.width = width; + this.canvas.domNode.height = height; + canvasDevicePixelDimensions.set({ width, height }, undefined); + } + )); + this.canvasDevicePixelDimensions = canvasDevicePixelDimensions; + } + + /** + * This method determines which lines can be and are allowed to be rendered using the GPU + * renderer. Eventually this should trend all lines, except maybe exceptional cases like + * decorations that use class names. + */ + public static canRender(options: ViewLineOptions, viewportData: ViewportData, lineNumber: number): boolean { + const data = viewportData.getViewLineRenderingData(lineNumber); + if ( + data.containsRTL || + data.maxColumn > 200 || + data.continuesWithWrappedLine || + data.inlineDecorations.length > 0 + ) { + return false; + } + return true; + } +} diff --git a/src/vs/editor/browser/observableCodeEditor.ts b/src/vs/editor/browser/observableCodeEditor.ts index 4bca7d678..5747a39c4 100644 --- a/src/vs/editor/browser/observableCodeEditor.ts +++ b/src/vs/editor/browser/observableCodeEditor.ts @@ -3,18 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equalsIfDefined, itemsEquals } from 'vs/base/common/equals'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ITransaction, autorun, autorunOpts, autorunWithStoreHandleChanges, derived, derivedOpts, observableFromEvent, observableSignal, observableValue, observableValueOpts } from 'vs/base/common/observable'; -import { TransactionImpl } from 'vs/base/common/observableInternal/base'; -import { derivedWithSetter } from 'vs/base/common/observableInternal/derived'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption, FindComputedEditorOptionValueById } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; +import { equalsIfDefined, itemsEquals } from '../../base/common/equals.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js'; +import { IObservable, ITransaction, TransactionImpl, autorun, autorunOpts, derived, derivedOpts, derivedWithSetter, observableFromEvent, observableSignal, observableValue, observableValueOpts } from '../../base/common/observable.js'; +import { EditorOption, FindComputedEditorOptionValueById } from '../common/config/editorOptions.js'; +import { Position } from '../common/core/position.js'; +import { Selection } from '../common/core/selection.js'; +import { ICursorSelectionChangedEvent } from '../common/cursorEvents.js'; +import { IModelDeltaDecoration, ITextModel } from '../common/model.js'; +import { IModelContentChangedEvent } from '../common/textModelEvents.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from './editorBrowser.js'; /** * Returns a facade for the code editor that provides observables for various states/events. @@ -183,6 +181,7 @@ export class ObservableCodeEditor extends Disposable { public readonly valueIsEmpty = derived(this, reader => { this.versionId.read(reader); return this.editor.getModel()?.getValueLength() === 0; }); public readonly cursorSelection = derivedOpts({ owner: this, equalsFn: equalsIfDefined(Selection.selectionsEqual) }, reader => this.selections.read(reader)?.[0] ?? null); public readonly cursorPosition = derivedOpts({ owner: this, equalsFn: Position.equals }, reader => this.selections.read(reader)?.[0]?.getPosition() ?? null); + public readonly cursorLineNumber = derived(this, reader => this.cursorPosition.read(reader)?.lineNumber ?? null); public readonly onDidType = observableSignal(this); @@ -246,39 +245,3 @@ interface IObservableOverlayWidget { readonly minContentWidthInPx: IObservable; get allowEditorOverflow(): boolean; } - -type RemoveUndefined = T extends undefined ? never : T; -export function reactToChange(observable: IObservable, cb: (value: T, deltas: RemoveUndefined[]) => void): IDisposable { - return autorunWithStoreHandleChanges({ - createEmptyChangeSummary: () => ({ deltas: [] as RemoveUndefined[], didChange: false }), - handleChange: (context, changeSummary) => { - if (context.didChange(observable)) { - const e = context.change; - if (e !== undefined) { - changeSummary.deltas.push(e as RemoveUndefined); - } - changeSummary.didChange = true; - } - return true; - }, - }, (reader, changeSummary) => { - const value = observable.read(reader); - if (changeSummary.didChange) { - cb(value, changeSummary.deltas); - } - }); -} - -export function reactToChangeWithStore(observable: IObservable, cb: (value: T, deltas: RemoveUndefined[], store: DisposableStore) => void): IDisposable { - const store = new DisposableStore(); - const disposable = reactToChange(observable, (value, deltas) => { - store.clear(); - cb(value, deltas, store); - }); - return { - dispose() { - disposable.dispose(); - store.dispose(); - } - }; -} diff --git a/src/vs/editor/browser/services/abstractCodeEditorService.ts b/src/vs/editor/browser/services/abstractCodeEditorService.ts index 1fedb4d17..d92fc24c9 100644 --- a/src/vs/editor/browser/services/abstractCodeEditorService.ts +++ b/src/vs/editor/browser/services/abstractCodeEditorService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IDisposable, DisposableStore, Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; -import * as strings from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorOpenHandler, ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IContentDecorationRenderOptions, IDecorationRenderOptions, IThemeDecorationRenderOptions, isThemeColor } from 'vs/editor/common/editorCommon'; -import { IModelDecorationOptions, IModelDecorationOverviewRulerOptions, InjectedTextOptions, ITextModel, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { IResourceEditorInput } from 'vs/platform/editor/common/editor'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; -import { ThemeColor } from 'vs/base/common/themables'; +import * as dom from '../../../base/browser/dom.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IDisposable, DisposableStore, Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; +import * as strings from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { ICodeEditor, IDiffEditor } from '../editorBrowser.js'; +import { ICodeEditorOpenHandler, ICodeEditorService } from './codeEditorService.js'; +import { IContentDecorationRenderOptions, IDecorationRenderOptions, IThemeDecorationRenderOptions, isThemeColor } from '../../common/editorCommon.js'; +import { IModelDecorationOptions, IModelDecorationOverviewRulerOptions, InjectedTextOptions, ITextModel, OverviewRulerLane, TrackedRangeStickiness } from '../../common/model.js'; +import { IResourceEditorInput } from '../../../platform/editor/common/editor.js'; +import { IColorTheme, IThemeService } from '../../../platform/theme/common/themeService.js'; +import { ThemeColor } from '../../../base/common/themables.js'; export abstract class AbstractCodeEditorService extends Disposable implements ICodeEditorService { diff --git a/src/vs/editor/browser/services/bulkEditService.ts b/src/vs/editor/browser/services/bulkEditService.ts index 4f06c9ca6..cbc88fafc 100644 --- a/src/vs/editor/browser/services/bulkEditService.ts +++ b/src/vs/editor/browser/services/bulkEditService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { TextEdit, WorkspaceEdit, WorkspaceEditMetadata, IWorkspaceFileEdit, WorkspaceFileEditOptions, IWorkspaceTextEdit } from 'vs/editor/common/languages'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IProgress, IProgressStep } from 'vs/platform/progress/common/progress'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { isObject } from 'vs/base/common/types'; -import { UndoRedoSource } from 'vs/platform/undoRedo/common/undoRedo'; -import { CancellationToken } from 'vs/base/common/cancellation'; +import { ICodeEditor } from '../editorBrowser.js'; +import { TextEdit, WorkspaceEdit, WorkspaceEditMetadata, IWorkspaceFileEdit, WorkspaceFileEditOptions, IWorkspaceTextEdit } from '../../common/languages.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IProgress, IProgressStep } from '../../../platform/progress/common/progress.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { isObject } from '../../../base/common/types.js'; +import { UndoRedoSource } from '../../../platform/undoRedo/common/undoRedo.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; export const IBulkEditService = createDecorator('IWorkspaceEditService'); diff --git a/src/vs/editor/browser/services/codeEditorService.ts b/src/vs/editor/browser/services/codeEditorService.ts index d7119b250..733018fae 100644 --- a/src/vs/editor/browser/services/codeEditorService.ts +++ b/src/vs/editor/browser/services/codeEditorService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon'; -import { IModelDecorationOptions, ITextModel } from 'vs/editor/common/model'; -import { ITextResourceEditorInput } from 'vs/platform/editor/common/editor'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { URI } from 'vs/base/common/uri'; -import { IDisposable } from 'vs/base/common/lifecycle'; +import { Event } from '../../../base/common/event.js'; +import { ICodeEditor, IDiffEditor } from '../editorBrowser.js'; +import { IDecorationRenderOptions } from '../../common/editorCommon.js'; +import { IModelDecorationOptions, ITextModel } from '../../common/model.js'; +import { ITextResourceEditorInput } from '../../../platform/editor/common/editor.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { URI } from '../../../base/common/uri.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; export const ICodeEditorService = createDecorator('codeEditorService'); diff --git a/src/vs/editor/browser/services/editorWorkerService.ts b/src/vs/editor/browser/services/editorWorkerService.ts index 562041077..6e01c738a 100644 --- a/src/vs/editor/browser/services/editorWorkerService.ts +++ b/src/vs/editor/browser/services/editorWorkerService.ts @@ -3,36 +3,36 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { logOnceWebWorkerWarning, IWorkerClient, Proxied, IWorkerDescriptor } from 'vs/base/common/worker/simpleWorker'; -import { createWebWorker } from 'vs/base/browser/defaultWorkerFactory'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker'; -import { DiffAlgorithmName, IEditorWorkerService, ILineChange, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { ILogService } from 'vs/platform/log/common/log'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { canceled, onUnexpectedError } from 'vs/base/common/errors'; -import { UnicodeHighlighterOptions } from 'vs/editor/common/services/unicodeTextModelHighlighter'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { IDocumentDiff, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { ILinesDiffComputerOptions, MovedText } from 'vs/editor/common/diff/linesDiffComputer'; -import { DetailedLineRangeMapping, RangeMapping, LineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { SectionHeader, FindSectionHeaderOptions } from 'vs/editor/common/services/findSectionHeaders'; -import { mainWindow } from 'vs/base/browser/window'; -import { WindowIntervalTimer } from 'vs/base/browser/dom'; -import { WorkerTextModelSyncClient } from 'vs/editor/common/services/textModelSync/textModelSync.impl'; -import { EditorWorkerHost } from 'vs/editor/common/services/editorWorkerHost'; +import { timeout } from '../../../base/common/async.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { logOnceWebWorkerWarning, IWorkerClient, Proxied, IWorkerDescriptor } from '../../../base/common/worker/simpleWorker.js'; +import { createWebWorker } from '../../../base/browser/defaultWorkerFactory.js'; +import { Position } from '../../common/core/position.js'; +import { IRange, Range } from '../../common/core/range.js'; +import { ITextModel } from '../../common/model.js'; +import * as languages from '../../common/languages.js'; +import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js'; +import { EditorSimpleWorker } from '../../common/services/editorSimpleWorker.js'; +import { DiffAlgorithmName, IEditorWorkerService, ILineChange, IUnicodeHighlightsResult } from '../../common/services/editorWorker.js'; +import { IModelService } from '../../common/services/model.js'; +import { ITextResourceConfigurationService } from '../../common/services/textResourceConfiguration.js'; +import { isNonEmptyArray } from '../../../base/common/arrays.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { canceled, onUnexpectedError } from '../../../base/common/errors.js'; +import { UnicodeHighlighterOptions } from '../../common/services/unicodeTextModelHighlighter.js'; +import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js'; +import { IChange } from '../../common/diff/legacyLinesDiffComputer.js'; +import { IDocumentDiff, IDocumentDiffProviderOptions } from '../../common/diff/documentDiffProvider.js'; +import { ILinesDiffComputerOptions, MovedText } from '../../common/diff/linesDiffComputer.js'; +import { DetailedLineRangeMapping, RangeMapping, LineRangeMapping } from '../../common/diff/rangeMapping.js'; +import { LineRange } from '../../common/core/lineRange.js'; +import { SectionHeader, FindSectionHeaderOptions } from '../../common/services/findSectionHeaders.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { WindowIntervalTimer } from '../../../base/browser/dom.js'; +import { WorkerTextModelSyncClient } from '../../common/services/textModelSync/textModelSync.impl.js'; +import { EditorWorkerHost } from '../../common/services/editorWorkerHost.js'; /** * Stop the worker if it was not needed for 5 min. diff --git a/src/vs/editor/browser/services/hoverService/hoverService.ts b/src/vs/editor/browser/services/hoverService/hoverService.ts index 20faf6cfa..249aed774 100644 --- a/src/vs/editor/browser/services/hoverService/hoverService.ts +++ b/src/vs/editor/browser/services/hoverService/hoverService.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { editorHoverBorder } from 'vs/platform/theme/common/colorRegistry'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { HoverWidget } from 'vs/editor/browser/services/hoverService/hoverWidget'; -import { IContextViewProvider, IDelegate } from 'vs/base/browser/ui/contextview/contextview'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { addDisposableListener, EventType, getActiveElement, isAncestorOfActiveElement, isAncestor, getWindow, isHTMLElement } from 'vs/base/browser/dom'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { mainWindow } from 'vs/base/browser/window'; -import { ContextViewHandler } from 'vs/platform/contextview/browser/contextViewService'; -import type { IHoverOptions, IHoverWidget, IManagedHover, IManagedHoverContentOrFactory, IManagedHoverOptions } from 'vs/base/browser/ui/hover/hover'; -import type { IHoverDelegate, IHoverDelegateTarget } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { ManagedHoverWidget } from 'vs/editor/browser/services/hoverService/updatableHoverWidget'; -import { TimeoutTimer } from 'vs/base/common/async'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { editorHoverBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { HoverWidget } from './hoverWidget.js'; +import { IContextViewProvider, IDelegate } from '../../../../base/browser/ui/contextview/contextview.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { addDisposableListener, EventType, getActiveElement, isAncestorOfActiveElement, isAncestor, getWindow, isHTMLElement, isEditableElement } from '../../../../base/browser/dom.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { ResultKind } from '../../../../platform/keybinding/common/keybindingResolver.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { ILayoutService } from '../../../../platform/layout/browser/layoutService.js'; +import { mainWindow } from '../../../../base/browser/window.js'; +import { ContextViewHandler } from '../../../../platform/contextview/browser/contextViewService.js'; +import type { IHoverOptions, IHoverWidget, IManagedHover, IManagedHoverContentOrFactory, IManagedHoverOptions } from '../../../../base/browser/ui/hover/hover.js'; +import type { IHoverDelegate, IHoverDelegateTarget } from '../../../../base/browser/ui/hover/hoverDelegate.js'; +import { ManagedHoverWidget } from './updatableHoverWidget.js'; +import { TimeoutTimer } from '../../../../base/common/async.js'; export class HoverService extends Disposable implements IHoverService { declare readonly _serviceBrand: undefined; @@ -293,8 +293,7 @@ export class HoverService extends Disposable implements IHoverService { // Do not show hover when focusing an input or textarea let focusDomEmitter: undefined | IDisposable; - const tagName = targetElement.tagName.toLowerCase(); - if (tagName !== 'input' && tagName !== 'textarea') { + if (!isEditableElement(targetElement)) { focusDomEmitter = addDisposableListener(targetElement, EventType.FOCUS, onFocus, true); } diff --git a/src/vs/editor/browser/services/hoverService/hoverWidget.ts b/src/vs/editor/browser/services/hoverService/hoverWidget.ts index ed929bc96..b46758c35 100644 --- a/src/vs/editor/browser/services/hoverService/hoverWidget.ts +++ b/src/vs/editor/browser/services/hoverService/hoverWidget.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./hover'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Event, Emitter } from 'vs/base/common/event'; -import * as dom from 'vs/base/browser/dom'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { EDITOR_FONT_DEFAULTS, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { HoverAction, HoverPosition, HoverWidget as BaseHoverWidget, getHoverAccessibleViewHint } from 'vs/base/browser/ui/hover/hoverWidget'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { AnchorPosition } from 'vs/base/browser/ui/contextview/contextview'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { MarkdownRenderer, openLinkFromMarkdown } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { isMarkdownString } from 'vs/base/common/htmlContent'; -import { localize } from 'vs/nls'; -import { isMacintosh } from 'vs/base/common/platform'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { status } from 'vs/base/browser/ui/aria/aria'; -import type { IHoverOptions, IHoverTarget, IHoverWidget } from 'vs/base/browser/ui/hover/hover'; +import './hover.css'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Event, Emitter } from '../../../../base/common/event.js'; +import * as dom from '../../../../base/browser/dom.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { EDITOR_FONT_DEFAULTS, IEditorOptions } from '../../../common/config/editorOptions.js'; +import { HoverAction, HoverPosition, HoverWidget as BaseHoverWidget, getHoverAccessibleViewHint } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { Widget } from '../../../../base/browser/ui/widget.js'; +import { AnchorPosition } from '../../../../base/browser/ui/contextview/contextview.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { MarkdownRenderer, openLinkFromMarkdown } from '../../widget/markdownRenderer/browser/markdownRenderer.js'; +import { isMarkdownString } from '../../../../base/common/htmlContent.js'; +import { localize } from '../../../../nls.js'; +import { isMacintosh } from '../../../../base/common/platform.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { status } from '../../../../base/browser/ui/aria/aria.js'; +import type { IHoverOptions, IHoverTarget, IHoverWidget } from '../../../../base/browser/ui/hover/hover.js'; const $ = dom.$; type TargetRect = { @@ -222,7 +222,7 @@ export class HoverWidget extends Widget implements IHoverWidget { } // Show the hover hint if needed - if (hideOnHover && options.appearance?.showHoverHint) { + if (options.appearance?.showHoverHint) { const statusBarElement = $('div.hover-row.status-bar'); const infoElement = $('div.info'); infoElement.textContent = localize('hoverhint', 'Hold {0} key to mouse over', isMacintosh ? 'Option' : 'Alt'); diff --git a/src/vs/editor/browser/services/hoverService/updatableHoverWidget.ts b/src/vs/editor/browser/services/hoverService/updatableHoverWidget.ts index 46f7423aa..c5b656b99 100644 --- a/src/vs/editor/browser/services/hoverService/updatableHoverWidget.ts +++ b/src/vs/editor/browser/services/hoverService/updatableHoverWidget.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isHTMLElement } from 'vs/base/browser/dom'; -import type { IHoverWidget, IManagedHoverContent, IManagedHoverOptions } from 'vs/base/browser/ui/hover/hover'; -import type { IHoverDelegate, IHoverDelegateOptions, IHoverDelegateTarget } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isMarkdownString, type IMarkdownString } from 'vs/base/common/htmlContent'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { isFunction, isString } from 'vs/base/common/types'; -import { localize } from 'vs/nls'; +import { isHTMLElement } from '../../../../base/browser/dom.js'; +import type { IHoverWidget, IManagedHoverContent, IManagedHoverOptions } from '../../../../base/browser/ui/hover/hover.js'; +import type { IHoverDelegate, IHoverDelegateOptions, IHoverDelegateTarget } from '../../../../base/browser/ui/hover/hoverDelegate.js'; +import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { isMarkdownString, type IMarkdownString } from '../../../../base/common/htmlContent.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { isFunction, isString } from '../../../../base/common/types.js'; +import { localize } from '../../../../nls.js'; type IManagedHoverResolvedContent = IMarkdownString | string | HTMLElement | undefined; diff --git a/src/vs/editor/browser/services/markerDecorations.ts b/src/vs/editor/browser/services/markerDecorations.ts index 55fe3c635..eb519c43f 100644 --- a/src/vs/editor/browser/services/markerDecorations.ts +++ b/src/vs/editor/browser/services/markerDecorations.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMarkerDecorationsService } from 'vs/editor/common/services/markerDecorations'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { IMarkerDecorationsService } from '../../common/services/markerDecorations.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../editorExtensions.js'; +import { ICodeEditor } from '../editorBrowser.js'; +import { IEditorContribution } from '../../common/editorCommon.js'; export class MarkerDecorationsContribution implements IEditorContribution { diff --git a/src/vs/editor/browser/services/openerService.ts b/src/vs/editor/browser/services/openerService.ts index 23f8d13ce..870f27bde 100644 --- a/src/vs/editor/browser/services/openerService.ts +++ b/src/vs/editor/browser/services/openerService.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { mainWindow } from 'vs/base/browser/window'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { ResourceMap } from 'vs/base/common/map'; -import { parse } from 'vs/base/common/marshalling'; -import { matchesScheme, matchesSomeScheme, Schemas } from 'vs/base/common/network'; -import { normalizePath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { EditorOpenSource } from 'vs/platform/editor/common/editor'; -import { extractSelection, IExternalOpener, IExternalUriResolver, IOpener, IOpenerService, IResolvedExternalUri, IValidator, OpenOptions, ResolveExternalUriOptions } from 'vs/platform/opener/common/opener'; +import * as dom from '../../../base/browser/dom.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { parse } from '../../../base/common/marshalling.js'; +import { matchesScheme, matchesSomeScheme, Schemas } from '../../../base/common/network.js'; +import { normalizePath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { ICodeEditorService } from './codeEditorService.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { EditorOpenSource } from '../../../platform/editor/common/editor.js'; +import { extractSelection, IExternalOpener, IExternalUriResolver, IOpener, IOpenerService, IResolvedExternalUri, IValidator, OpenOptions, ResolveExternalUriOptions } from '../../../platform/opener/common/opener.js'; class CommandOpener implements IOpener { diff --git a/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts b/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts index 32e4962f2..a83446f2d 100644 --- a/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts +++ b/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts @@ -4,24 +4,25 @@ *--------------------------------------------------------------------------------------------*/ import type { Parser } from '@vscode/tree-sitter-wasm'; -import { AppResourcePath, FileAccess, nodeModulesAsarUnpackedPath, nodeModulesPath } from 'vs/base/common/network'; -import { EDITOR_EXPERIMENTAL_PREFER_TREESITTER, ITreeSitterParserService, ITreeSitterParseResult } from 'vs/editor/common/services/treeSitterParserService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { Disposable, DisposableMap, DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { ITextModel } from 'vs/editor/common/model'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IModelContentChange } from 'vs/editor/common/textModelEvents'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { setTimeout0 } from 'vs/base/common/platform'; -import { importAMDNodeModule } from 'vs/amdX'; -import { Emitter, Event } from 'vs/base/common/event'; -import { CancellationToken, cancelOnDispose } from 'vs/base/common/cancellation'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { canASAR } from 'vs/base/common/amd'; -import { CancellationError, isCancellationError } from 'vs/base/common/errors'; -import { PromiseResult } from 'vs/base/common/observableInternal/promise'; +import { AppResourcePath, FileAccess, nodeModulesAsarUnpackedPath, nodeModulesPath } from '../../../../base/common/network.js'; +import { EDITOR_EXPERIMENTAL_PREFER_TREESITTER, ITreeSitterParserService, ITreeSitterParseResult } from '../../../common/services/treeSitterParserService.js'; +import { IModelService } from '../../../common/services/model.js'; +import { Disposable, DisposableMap, DisposableStore, dispose, IDisposable } from '../../../../base/common/lifecycle.js'; +import { ITextModel } from '../../../common/model.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; +import { IModelContentChange } from '../../../common/textModelEvents.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { setTimeout0 } from '../../../../base/common/platform.js'; +import { importAMDNodeModule } from '../../../../amdX.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { CancellationToken, cancelOnDispose } from '../../../../base/common/cancellation.js'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { canASAR } from '../../../../base/common/amd.js'; +import { CancellationError, isCancellationError } from '../../../../base/common/errors.js'; +import { PromiseResult } from '../../../../base/common/observable.js'; +import { Range } from '../../../common/core/range.js'; const EDITOR_TREESITTER_TELEMETRY = 'editor.experimental.treeSitterTelemetry'; const MODULE_LOCATION_SUBPATH = `@vscode/tree-sitter-wasm/wasm`; @@ -32,6 +33,8 @@ function getModuleLocation(environmentService: IEnvironmentService): AppResource } export class TextModelTreeSitter extends Disposable { + private _onDidChangeParseResult: Emitter = this._register(new Emitter()); + public readonly onDidChangeParseResult: Event = this._onDidChangeParseResult.event; private _parseResult: TreeSitterParseResult | undefined; get parseResult(): ITreeSitterParseResult | undefined { return this._parseResult; } @@ -102,7 +105,11 @@ export class TextModelTreeSitter extends Disposable { } private async _onDidChangeContent(treeSitterTree: TreeSitterParseResult, changes: IModelContentChange[]) { - return treeSitterTree.onDidChangeContent(this.model, changes); + const diff = await treeSitterTree.onDidChangeContent(this.model, changes); + if (diff && diff.length > 0) { + // Tree sitter is 0 based, text model is 1 based + this._onDidChangeParseResult.fire(diff.map(r => new Range(r.startPosition.row + 1, r.startPosition.column + 1, r.endPosition.row + 1, r.endPosition.column + 1))); + } } } @@ -134,18 +141,22 @@ export class TreeSitterParseResult implements IDisposable, ITreeSitterParseResul get isDisposed() { return this._isDisposed; } private _onDidChangeContentQueue: Promise = Promise.resolve(); - public async onDidChangeContent(model: ITextModel, changes: IModelContentChange[]) { + public async onDidChangeContent(model: ITextModel, changes: IModelContentChange[]): Promise { + const oldTree = this.tree?.copy(); this._applyEdits(model, changes); - this._onDidChangeContentQueue = this._onDidChangeContentQueue.then(() => { - if (this.isDisposed) { - // No need to continue the queue if we are disposed - return; - } - return this._parseAndUpdateTree(model); - }).catch((e) => { - this._logService.error('Error parsing tree-sitter tree', e); + return new Promise(resolve => { + this._onDidChangeContentQueue = this._onDidChangeContentQueue.then(async () => { + if (this.isDisposed) { + // No need to continue the queue if we are disposed + return; + } + await this._parseAndUpdateTree(model); + resolve(this.tree ? oldTree?.getChangedRanges(this.tree) : undefined); + + }).catch((e) => { + this._logService.error('Error parsing tree-sitter tree', e); + }); }); - return this._onDidChangeContentQueue; } private _newEdits = true; @@ -210,7 +221,12 @@ export class TreeSitterParseResult implements IDisposable, ITreeSitterParseResul } private _parseCallback(textModel: ITextModel, index: number): string | null { - return textModel.getTextBuffer().getNearestChunk(index); + try { + return textModel.getTextBuffer().getNearestChunk(index); + } catch (e) { + this._logService.debug('Error getting chunk for tree-sitter parsing', e); + } + return null; } private sendParseTimeTelemetry(parseType: TelemetryParseType, languageId: string, time: number, passes: number): void { @@ -307,15 +323,23 @@ export class TreeSitterImporter { } } +interface TextModelTreeSitterItem { + dispose(): void; + textModelTreeSitter: TextModelTreeSitter; + disposables: DisposableStore; +} + export class TreeSitterTextModelService extends Disposable implements ITreeSitterParserService { readonly _serviceBrand: undefined; private _init!: Promise; - private _textModelTreeSitters: DisposableMap = this._register(new DisposableMap()); + private _textModelTreeSitters: DisposableMap = this._register(new DisposableMap()); private readonly _registeredLanguages: Map = new Map(); private readonly _treeSitterImporter: TreeSitterImporter = new TreeSitterImporter(); private readonly _treeSitterLanguages: TreeSitterLanguages; public readonly onDidAddLanguage: Event<{ id: string; language: Parser.Language }>; + private _onDidUpdateTree: Emitter<{ textModel: ITextModel; ranges: Range[] }> = this._register(new Emitter()); + public readonly onDidUpdateTree: Event<{ textModel: ITextModel; ranges: Range[] }> = this._onDidUpdateTree.event; constructor(@IModelService private readonly _modelService: IModelService, @IFileService fileService: IFileService, @@ -341,7 +365,7 @@ export class TreeSitterTextModelService extends Disposable implements ITreeSitte getParseResult(textModel: ITextModel): ITreeSitterParseResult | undefined { const textModelTreeSitter = this._textModelTreeSitters.get(textModel); - return textModelTreeSitter?.parseResult; + return textModelTreeSitter?.textModelTreeSitter.parseResult; } private async _doInitParser() { @@ -416,7 +440,14 @@ export class TreeSitterTextModelService extends Disposable implements ITreeSitte private _createTextModelTreeSitter(model: ITextModel) { const textModelTreeSitter = new TextModelTreeSitter(model, this._treeSitterLanguages, this._treeSitterImporter, this._logService, this._telemetryService); - this._textModelTreeSitters.set(model, textModelTreeSitter); + const disposables = new DisposableStore(); + disposables.add(textModelTreeSitter); + disposables.add(textModelTreeSitter.onDidChangeParseResult((ranges) => this._onDidUpdateTree.fire({ textModel: model, ranges }))); + this._textModelTreeSitters.set(model, { + textModelTreeSitter, + disposables, + dispose: disposables.dispose + }); } private _addGrammar(languageId: string, grammarName: string) { diff --git a/src/vs/editor/browser/stableEditorScroll.ts b/src/vs/editor/browser/stableEditorScroll.ts index 986e18ac6..66d4d450e 100644 --- a/src/vs/editor/browser/stableEditorScroll.ts +++ b/src/vs/editor/browser/stableEditorScroll.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { ScrollType } from 'vs/editor/common/editorCommon'; +import { ICodeEditor } from './editorBrowser.js'; +import { Position } from '../common/core/position.js'; +import { ScrollType } from '../common/editorCommon.js'; export class StableEditorScrollState { diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index 6ff5ac82b..b55cfa1e0 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -3,59 +3,64 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { inputLatency } from 'vs/base/browser/performance'; -import { CodeWindow } from 'vs/base/browser/window'; -import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler'; -import { PointerHandlerLastRenderData } from 'vs/editor/browser/controller/mouseTarget'; -import { PointerHandler } from 'vs/editor/browser/controller/pointerHandler'; -import { IVisibleRangeProvider, TextAreaHandler } from 'vs/editor/browser/controller/textAreaHandler'; -import { IContentWidget, IContentWidgetPosition, IEditorAriaOptions, IGlyphMarginWidget, IGlyphMarginWidgetPosition, IMouseTarget, IOverlayWidget, IOverlayWidgetPosition, IViewZoneChangeAccessor } from 'vs/editor/browser/editorBrowser'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ICommandDelegate, ViewController } from 'vs/editor/browser/view/viewController'; -import { ContentViewOverlays, MarginViewOverlays } from 'vs/editor/browser/view/viewOverlays'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { ViewUserInputEvents } from 'vs/editor/browser/view/viewUserInputEvents'; -import { BlockDecorations } from 'vs/editor/browser/viewParts/blockDecorations/blockDecorations'; -import { ViewContentWidgets } from 'vs/editor/browser/viewParts/contentWidgets/contentWidgets'; -import { CurrentLineHighlightOverlay, CurrentLineMarginHighlightOverlay } from 'vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight'; -import { DecorationsOverlay } from 'vs/editor/browser/viewParts/decorations/decorations'; -import { EditorScrollbar } from 'vs/editor/browser/viewParts/editorScrollbar/editorScrollbar'; -import { GlyphMarginWidgets } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin'; -import { IndentGuidesOverlay } from 'vs/editor/browser/viewParts/indentGuides/indentGuides'; -import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; -import { ViewLines } from 'vs/editor/browser/viewParts/lines/viewLines'; -import { LinesDecorationsOverlay } from 'vs/editor/browser/viewParts/linesDecorations/linesDecorations'; -import { Margin } from 'vs/editor/browser/viewParts/margin/margin'; -import { MarginViewLineDecorationsOverlay } from 'vs/editor/browser/viewParts/marginDecorations/marginDecorations'; -import { Minimap } from 'vs/editor/browser/viewParts/minimap/minimap'; -import { ViewOverlayWidgets } from 'vs/editor/browser/viewParts/overlayWidgets/overlayWidgets'; -import { DecorationsOverviewRuler } from 'vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler'; -import { OverviewRuler } from 'vs/editor/browser/viewParts/overviewRuler/overviewRuler'; -import { Rulers } from 'vs/editor/browser/viewParts/rulers/rulers'; -import { ScrollDecorationViewPart } from 'vs/editor/browser/viewParts/scrollDecoration/scrollDecoration'; -import { SelectionsOverlay } from 'vs/editor/browser/viewParts/selections/selections'; -import { ViewCursors } from 'vs/editor/browser/viewParts/viewCursors/viewCursors'; -import { ViewZones } from 'vs/editor/browser/viewParts/viewZones/viewZones'; -import { WhitespaceOverlay } from 'vs/editor/browser/viewParts/whitespace/whitespace'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { GlyphMarginLane, IGlyphMarginLanesModel } from 'vs/editor/common/model'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { IViewModel } from 'vs/editor/common/viewModel'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IColorTheme, getThemeTypeSelector } from 'vs/platform/theme/common/themeService'; +import * as dom from '../../base/browser/dom.js'; +import { FastDomNode, createFastDomNode } from '../../base/browser/fastDomNode.js'; +import { IMouseWheelEvent } from '../../base/browser/mouseEvent.js'; +import { inputLatency } from '../../base/browser/performance.js'; +import { CodeWindow } from '../../base/browser/window.js'; +import { BugIndicatingError, onUnexpectedError } from '../../base/common/errors.js'; +import { IDisposable } from '../../base/common/lifecycle.js'; +import { IPointerHandlerHelper } from './controller/mouseHandler.js'; +import { PointerHandlerLastRenderData } from './controller/mouseTarget.js'; +import { PointerHandler } from './controller/pointerHandler.js'; +import { IContentWidget, IContentWidgetPosition, IEditorAriaOptions, IGlyphMarginWidget, IGlyphMarginWidgetPosition, IMouseTarget, IOverlayWidget, IOverlayWidgetPosition, IViewZoneChangeAccessor } from './editorBrowser.js'; +import { LineVisibleRanges, RenderingContext, RestrictedRenderingContext } from './view/renderingContext.js'; +import { ICommandDelegate, ViewController } from './view/viewController.js'; +import { ContentViewOverlays, MarginViewOverlays } from './view/viewOverlays.js'; +import { PartFingerprint, PartFingerprints, ViewPart } from './view/viewPart.js'; +import { ViewUserInputEvents } from './view/viewUserInputEvents.js'; +import { BlockDecorations } from './viewParts/blockDecorations/blockDecorations.js'; +import { ViewContentWidgets } from './viewParts/contentWidgets/contentWidgets.js'; +import { CurrentLineHighlightOverlay, CurrentLineMarginHighlightOverlay } from './viewParts/currentLineHighlight/currentLineHighlight.js'; +import { DecorationsOverlay } from './viewParts/decorations/decorations.js'; +import { EditorScrollbar } from './viewParts/editorScrollbar/editorScrollbar.js'; +import { GlyphMarginWidgets } from './viewParts/glyphMargin/glyphMargin.js'; +import { IndentGuidesOverlay } from './viewParts/indentGuides/indentGuides.js'; +import { LineNumbersOverlay } from './viewParts/lineNumbers/lineNumbers.js'; +import { ViewLines } from './viewParts/viewLines/viewLines.js'; +import { LinesDecorationsOverlay } from './viewParts/linesDecorations/linesDecorations.js'; +import { Margin } from './viewParts/margin/margin.js'; +import { MarginViewLineDecorationsOverlay } from './viewParts/marginDecorations/marginDecorations.js'; +import { Minimap } from './viewParts/minimap/minimap.js'; +import { ViewOverlayWidgets } from './viewParts/overlayWidgets/overlayWidgets.js'; +import { DecorationsOverviewRuler } from './viewParts/overviewRuler/decorationsOverviewRuler.js'; +import { OverviewRuler } from './viewParts/overviewRuler/overviewRuler.js'; +import { Rulers } from './viewParts/rulers/rulers.js'; +import { ScrollDecorationViewPart } from './viewParts/scrollDecoration/scrollDecoration.js'; +import { SelectionsOverlay } from './viewParts/selections/selections.js'; +import { ViewCursors } from './viewParts/viewCursors/viewCursors.js'; +import { ViewZones } from './viewParts/viewZones/viewZones.js'; +import { WhitespaceOverlay } from './viewParts/whitespace/whitespace.js'; +import { IEditorConfiguration } from '../common/config/editorConfiguration.js'; +import { EditorOption } from '../common/config/editorOptions.js'; +import { Position } from '../common/core/position.js'; +import { Range } from '../common/core/range.js'; +import { Selection } from '../common/core/selection.js'; +import { ScrollType } from '../common/editorCommon.js'; +import { GlyphMarginLane, IGlyphMarginLanesModel } from '../common/model.js'; +import { ViewEventHandler } from '../common/viewEventHandler.js'; +import * as viewEvents from '../common/viewEvents.js'; +import { ViewportData } from '../common/viewLayout/viewLinesViewportData.js'; +import { IViewModel } from '../common/viewModel.js'; +import { ViewContext } from '../common/viewModel/viewContext.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { IColorTheme, getThemeTypeSelector } from '../../platform/theme/common/themeService.js'; +import { ViewGpuContext } from './gpu/viewGpuContext.js'; +import { ViewLinesGpu } from './viewParts/viewLinesGpu/viewLinesGpu.js'; +import { AbstractEditContext } from './controller/editContext/editContextUtils.js'; +import { IVisibleRangeProvider, TextAreaEditContext } from './controller/editContext/textArea/textAreaEditContext.js'; +import { NativeEditContext } from './controller/editContext/native/nativeEditContext.js'; +import { RulersGpu } from './viewParts/rulersGpu/rulersGpu.js'; export interface IContentWidgetData { @@ -77,10 +82,12 @@ export class View extends ViewEventHandler { private readonly _scrollbar: EditorScrollbar; private readonly _context: ViewContext; + private readonly _viewGpuContext?: ViewGpuContext; private _selections: Selection[]; // The view lines private readonly _viewLines: ViewLines; + private readonly _viewLinesGpu?: ViewLinesGpu; // These are parts, but we must do some API related calls on them, so we keep a reference private readonly _viewZones: ViewZones; @@ -89,8 +96,10 @@ export class View extends ViewEventHandler { private readonly _glyphMarginWidgets: GlyphMarginWidgets; private readonly _viewCursors: ViewCursors; private readonly _viewParts: ViewPart[]; + private readonly _viewController: ViewController; - private readonly _textAreaHandler: TextAreaHandler; + private _experimentalEditContextEnabled: boolean; + private _editContext: AbstractEditContext; private readonly _pointerHandler: PointerHandler; // Dom nodes @@ -115,7 +124,7 @@ export class View extends ViewEventHandler { this._selections = [new Selection(1, 1, 1, 1)]; this._renderAnimationFrame = null; - const viewController = new ViewController(configuration, model, userInputEvents, commandDelegate); + this._viewController = new ViewController(configuration, model, userInputEvents, commandDelegate); // The view context is passed on to most classes (basically to reduce param. counts in ctors) this._context = new ViewContext(configuration, colorTheme, model); @@ -126,8 +135,10 @@ export class View extends ViewEventHandler { this._viewParts = []; // Keyboard handler - this._textAreaHandler = this._instantiationService.createInstance(TextAreaHandler, this._context, viewController, this._createTextAreaHandlerHelper()); - this._viewParts.push(this._textAreaHandler); + this._experimentalEditContextEnabled = this._context.configuration.options.get(EditorOption.experimentalEditContextEnabled); + this._editContext = this._instantiateEditContext(this._experimentalEditContextEnabled); + + this._viewParts.push(this._editContext); // These two dom nodes must be constructed up front, since references are needed in the layout provider (scrolling & co.) this._linesContent = createFastDomNode(document.createElement('div')); @@ -139,6 +150,10 @@ export class View extends ViewEventHandler { // Set role 'code' for better screen reader support https://github.com/microsoft/vscode/issues/93438 this.domNode.setAttribute('role', 'code'); + if (this._context.configuration.options.get(EditorOption.experimentalGpuAcceleration) === 'on') { + this._viewGpuContext = this._instantiationService.createInstance(ViewGpuContext, this._context); + } + this._overflowGuardContainer = createFastDomNode(document.createElement('div')); PartFingerprints.write(this._overflowGuardContainer, PartFingerprint.OverflowGuard); this._overflowGuardContainer.setClassName('overflow-guard'); @@ -148,6 +163,9 @@ export class View extends ViewEventHandler { // View Lines this._viewLines = new ViewLines(this._context, this._linesContent); + if (this._viewGpuContext) { + this._viewLinesGpu = this._instantiationService.createInstance(ViewLinesGpu, this._context, this._viewGpuContext); + } // View Zones this._viewZones = new ViewZones(this._context); @@ -197,7 +215,9 @@ export class View extends ViewEventHandler { this._overlayWidgets = new ViewOverlayWidgets(this._context, this.domNode); this._viewParts.push(this._overlayWidgets); - const rulers = new Rulers(this._context); + const rulers = this._viewGpuContext + ? new RulersGpu(this._context, this._viewGpuContext) + : new Rulers(this._context); this._viewParts.push(rulers); const blockOutline = new BlockDecorations(this._context); @@ -214,16 +234,20 @@ export class View extends ViewEventHandler { } this._linesContent.appendChild(contentViewOverlays.getDomNode()); - this._linesContent.appendChild(rulers.domNode); + if ('domNode' in rulers) { + this._linesContent.appendChild(rulers.domNode); + } this._linesContent.appendChild(this._viewZones.domNode); this._linesContent.appendChild(this._viewLines.getDomNode()); this._linesContent.appendChild(this._contentWidgets.domNode); this._linesContent.appendChild(this._viewCursors.getDomNode()); this._overflowGuardContainer.appendChild(margin.getDomNode()); this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode()); + if (this._viewGpuContext) { + this._overflowGuardContainer.appendChild(this._viewGpuContext.canvas); + } this._overflowGuardContainer.appendChild(scrollDecoration.getDomNode()); - this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea); - this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover); + this._editContext.appendTo(this._overflowGuardContainer); this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()); this._overflowGuardContainer.appendChild(minimap.getDomNode()); this._overflowGuardContainer.appendChild(blockOutline.domNode); @@ -240,7 +264,27 @@ export class View extends ViewEventHandler { this._applyLayout(); // Pointer handler - this._pointerHandler = this._register(new PointerHandler(this._context, viewController, this._createPointerHandlerHelper())); + this._pointerHandler = this._register(new PointerHandler(this._context, this._viewController, this._createPointerHandlerHelper())); + } + + private _instantiateEditContext(experimentalEditContextEnabled: boolean): AbstractEditContext { + return this._instantiationService.createInstance(experimentalEditContextEnabled ? NativeEditContext : TextAreaEditContext, this._context, this._viewController, this._createTextAreaHandlerHelper()); + } + + private _updateEditContext(): void { + const experimentalEditContextEnabled = this._context.configuration.options.get(EditorOption.experimentalEditContextEnabled); + if (this._experimentalEditContextEnabled === experimentalEditContextEnabled) { + return; + } + this._experimentalEditContextEnabled = experimentalEditContextEnabled; + this._editContext.dispose(); + this._editContext = this._instantiateEditContext(experimentalEditContextEnabled); + this._editContext.appendTo(this._overflowGuardContainer); + // Replace the view parts with the new edit context + const indexOfEditContextHandler = this._viewParts.indexOf(this._editContext); + if (indexOfEditContextHandler !== -1) { + this._viewParts.splice(indexOfEditContextHandler, 1, this._editContext); + } } private _computeGlyphMarginLanes(): IGlyphMarginLanesModel { @@ -286,12 +330,12 @@ export class View extends ViewEventHandler { }, dispatchTextAreaEvent: (event: CustomEvent) => { - this._textAreaHandler.textArea.domNode.dispatchEvent(event); + this._editContext.domNode.domNode.dispatchEvent(event); }, getLastRenderData: (): PointerHandlerLastRenderData => { const lastViewCursorsRenderData = this._viewCursors.getLastRenderData() || []; - const lastTextareaPosition = this._textAreaHandler.getLastRenderData(); + const lastTextareaPosition = this._editContext.getLastRenderData(); return new PointerHandlerLastRenderData(lastViewCursorsRenderData, lastTextareaPosition); }, renderNow: (): void => { @@ -325,6 +369,10 @@ export class View extends ViewEventHandler { visibleRangeForPosition: (position: Position) => { this._flushAccumulatedAndRenderNow(); return this._viewLines.visibleRangeForPosition(position); + }, + linesVisibleRangesForRange: (range: Range, includeNewLines: boolean): LineVisibleRanges[] | null => { + this._flushAccumulatedAndRenderNow(); + return this._viewLines.linesVisibleRangesForRange(range, includeNewLines); } }; } @@ -345,7 +393,7 @@ export class View extends ViewEventHandler { } private _getEditorClassName() { - const focused = this._textAreaHandler.isFocused() ? ' focused' : ''; + const focused = this._editContext.isFocused() ? ' focused' : ''; return this._context.configuration.options.get(EditorOption.editorClassName) + ' ' + getThemeTypeSelector(this._context.theme.type) + focused; } @@ -356,6 +404,7 @@ export class View extends ViewEventHandler { } public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { this.domNode.setClassName(this._getEditorClassName()); + this._updateEditContext(); this._applyLayout(); return false; } @@ -390,8 +439,10 @@ export class View extends ViewEventHandler { this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove(); this._context.removeEventHandler(this); + this._viewGpuContext?.dispose(); this._viewLines.dispose(); + this._viewLinesGpu?.dispose(); // Destroy view parts for (const viewPart of this._viewParts) { @@ -505,7 +556,12 @@ export class View extends ViewEventHandler { viewPartsToRender = this._getViewPartsToRender(); } - return [viewPartsToRender, new RenderingContext(this._context.viewLayout, viewportData, this._viewLines)]; + if (this._viewLinesGpu?.shouldRender()) { + this._viewLinesGpu.renderText(viewportData); + this._viewLinesGpu.onDidRender(); + } + + return [viewPartsToRender, new RenderingContext(this._context.viewLayout, viewportData, this._viewLines, this._viewLinesGpu)]; }, prepareRender: (viewPartsToRender: ViewPart[], ctx: RenderingContext) => { for (const viewPart of viewPartsToRender) { @@ -586,23 +642,23 @@ export class View extends ViewEventHandler { } public writeScreenReaderContent(reason: string): void { - this._textAreaHandler.writeScreenReaderContent(reason); + this._editContext.writeScreenReaderContent(reason); } public focus(): void { - this._textAreaHandler.focusTextArea(); + this._editContext.focus(); } public isFocused(): boolean { - return this._textAreaHandler.isFocused(); + return this._editContext.isFocused(); } public refreshFocusState() { - this._textAreaHandler.refreshFocusState(); + this._editContext.refreshFocusState(); } public setAriaOptions(options: IEditorAriaOptions): void { - this._textAreaHandler.setAriaOptions(options); + this._editContext.setAriaOptions(options); } public addContentWidget(widgetData: IContentWidgetData): void { diff --git a/src/vs/editor/browser/view/domLineBreaksComputer.ts b/src/vs/editor/browser/view/domLineBreaksComputer.ts index 2861fd8f8..583d7f9cf 100644 --- a/src/vs/editor/browser/view/domLineBreaksComputer.ts +++ b/src/vs/editor/browser/view/domLineBreaksComputer.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { assertIsDefined } from 'vs/base/common/types'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { WrappingIndent } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { InjectedTextOptions } from 'vs/editor/common/model'; -import { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; -import { LineInjectedText } from 'vs/editor/common/textModelEvents'; +import { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { applyFontInfo } from '../config/domFontInfo.js'; +import { WrappingIndent } from '../../common/config/editorOptions.js'; +import { FontInfo } from '../../common/config/fontInfo.js'; +import { StringBuilder } from '../../common/core/stringBuilder.js'; +import { InjectedTextOptions } from '../../common/model.js'; +import { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from '../../common/modelLineProjectionData.js'; +import { LineInjectedText } from '../../common/textModelEvents.js'; const ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value }); diff --git a/src/vs/editor/browser/view/dynamicViewOverlay.ts b/src/vs/editor/browser/view/dynamicViewOverlay.ts index c8de70988..048e76445 100644 --- a/src/vs/editor/browser/view/dynamicViewOverlay.ts +++ b/src/vs/editor/browser/view/dynamicViewOverlay.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; +import { RenderingContext } from './renderingContext.js'; +import { ViewEventHandler } from '../../common/viewEventHandler.js'; export abstract class DynamicViewOverlay extends ViewEventHandler { diff --git a/src/vs/editor/browser/view/renderingContext.ts b/src/vs/editor/browser/view/renderingContext.ts index 3396fb74b..178f54608 100644 --- a/src/vs/editor/browser/view/renderingContext.ts +++ b/src/vs/editor/browser/view/renderingContext.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { IViewLayout, ViewModelDecoration } from 'vs/editor/common/viewModel'; +import { Position } from '../../common/core/position.js'; +import { Range } from '../../common/core/range.js'; +import { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; +import { IViewLayout, ViewModelDecoration } from '../../common/viewModel.js'; export interface IViewLines { linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null; @@ -71,18 +71,20 @@ export class RenderingContext extends RestrictedRenderingContext { _renderingContextBrand: void = undefined; private readonly _viewLines: IViewLines; + private readonly _viewLinesGpu?: IViewLines; - constructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines) { + constructor(viewLayout: IViewLayout, viewportData: ViewportData, viewLines: IViewLines, viewLinesGpu?: IViewLines) { super(viewLayout, viewportData); this._viewLines = viewLines; + this._viewLinesGpu = viewLinesGpu; } public linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null { - return this._viewLines.linesVisibleRangesForRange(range, includeNewLines); + return this._viewLines.linesVisibleRangesForRange(range, includeNewLines) ?? this._viewLinesGpu?.linesVisibleRangesForRange(range, includeNewLines) ?? null; } public visibleRangeForPosition(position: Position): HorizontalPosition | null { - return this._viewLines.visibleRangeForPosition(position); + return this._viewLines.visibleRangeForPosition(position) ?? this._viewLinesGpu?.visibleRangeForPosition(position) ?? null; } } diff --git a/src/vs/editor/browser/view/viewController.ts b/src/vs/editor/browser/view/viewController.ts index b6b8ebdd6..5e53d12d2 100644 --- a/src/vs/editor/browser/view/viewController.ts +++ b/src/vs/editor/browser/view/viewController.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { CoreNavigationCommands, NavigationCommandRevealType } from 'vs/editor/browser/coreCommands'; -import { IEditorMouseEvent, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { ViewUserInputEvents } from 'vs/editor/browser/view/viewUserInputEvents'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { IViewModel } from 'vs/editor/common/viewModel'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import * as platform from 'vs/base/common/platform'; +import { IKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { CoreNavigationCommands, NavigationCommandRevealType } from '../coreCommands.js'; +import { IEditorMouseEvent, IPartialEditorMouseEvent } from '../editorBrowser.js'; +import { ViewUserInputEvents } from './viewUserInputEvents.js'; +import { Position } from '../../common/core/position.js'; +import { Selection } from '../../common/core/selection.js'; +import { IEditorConfiguration } from '../../common/config/editorConfiguration.js'; +import { IViewModel } from '../../common/viewModel.js'; +import { IMouseWheelEvent } from '../../../base/browser/mouseEvent.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; +import * as platform from '../../../base/common/platform.js'; export interface IMouseDispatchData { position: Position; diff --git a/src/vs/editor/browser/view/viewLayer.ts b/src/vs/editor/browser/view/viewLayer.ts index 308e0ff54..7162a1bb9 100644 --- a/src/vs/editor/browser/view/viewLayer.ts +++ b/src/vs/editor/browser/view/viewLayer.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; +import { FastDomNode, createFastDomNode } from '../../../base/browser/fastDomNode.js'; +import { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; +import { StringBuilder } from '../../common/core/stringBuilder.js'; +import * as viewEvents from '../../common/viewEvents.js'; +import { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; /** * Represents a visible line diff --git a/src/vs/editor/browser/view/viewOverlays.ts b/src/vs/editor/browser/view/viewOverlays.ts index 1fd1c011d..6b8e10f34 100644 --- a/src/vs/editor/browser/view/viewOverlays.ts +++ b/src/vs/editor/browser/view/viewOverlays.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { IVisibleLine, VisibleLinesCollection } from 'vs/editor/browser/view/viewLayer'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { FastDomNode, createFastDomNode } from '../../../base/browser/fastDomNode.js'; +import { applyFontInfo } from '../config/domFontInfo.js'; +import { DynamicViewOverlay } from './dynamicViewOverlay.js'; +import { IVisibleLine, VisibleLinesCollection } from './viewLayer.js'; +import { ViewPart } from './viewPart.js'; +import { StringBuilder } from '../../common/core/stringBuilder.js'; +import { RenderingContext, RestrictedRenderingContext } from './renderingContext.js'; +import { ViewContext } from '../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../common/viewEvents.js'; +import { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; export class ViewOverlays extends ViewPart { private readonly _visibleLines: VisibleLinesCollection; @@ -24,7 +24,7 @@ export class ViewOverlays extends ViewPart { constructor(context: ViewContext) { super(context); - this._visibleLines = new VisibleLinesCollection({ + this._visibleLines = new VisibleLinesCollection({ createLine: () => new ViewOverlayLine(this._dynamicOverlays) }); this.domNode = this._visibleLines.domNode; diff --git a/src/vs/editor/browser/view/viewPart.ts b/src/vs/editor/browser/view/viewPart.ts index 8ae1a965e..78467eb2e 100644 --- a/src/vs/editor/browser/view/viewPart.ts +++ b/src/vs/editor/browser/view/viewPart.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode } from 'vs/base/browser/fastDomNode'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; +import { FastDomNode } from '../../../base/browser/fastDomNode.js'; +import { RenderingContext, RestrictedRenderingContext } from './renderingContext.js'; +import { ViewContext } from '../../common/viewModel/viewContext.js'; +import { ViewEventHandler } from '../../common/viewEventHandler.js'; export abstract class ViewPart extends ViewEventHandler { diff --git a/src/vs/editor/browser/view/viewUserInputEvents.ts b/src/vs/editor/browser/view/viewUserInputEvents.ts index 3cd22d631..8a8bf0aa8 100644 --- a/src/vs/editor/browser/view/viewUserInputEvents.ts +++ b/src/vs/editor/browser/view/viewUserInputEvents.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IEditorMouseEvent, IMouseTarget, IMouseTargetViewZoneData, IPartialEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { ICoordinatesConverter } from 'vs/editor/common/viewModel'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { Position } from 'vs/editor/common/core/position'; +import { IKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { IEditorMouseEvent, IMouseTarget, IMouseTargetViewZoneData, IPartialEditorMouseEvent, MouseTargetType } from '../editorBrowser.js'; +import { ICoordinatesConverter } from '../../common/viewModel.js'; +import { IMouseWheelEvent } from '../../../base/browser/mouseEvent.js'; +import { Position } from '../../common/core/position.js'; export interface EventCallback { (event: T): void; diff --git a/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts b/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts index 49d18e748..70fe366c0 100644 --- a/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts +++ b/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createFastDomNode, FastDomNode } from 'vs/base/browser/fastDomNode'; -import 'vs/css!./blockDecorations'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import { createFastDomNode, FastDomNode } from '../../../../base/browser/fastDomNode.js'; +import './blockDecorations.css'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; export class BlockDecorations extends ViewPart { diff --git a/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts b/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts index bdf8eb77d..be7bd39b7 100644 --- a/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts +++ b/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts @@ -3,20 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { ContentWidgetPositionPreference, IContentWidget } from 'vs/editor/browser/editorBrowser'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IViewModel } from 'vs/editor/common/viewModel'; - +import * as dom from '../../../../base/browser/dom.js'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { ContentWidgetPositionPreference, IContentWidget } from '../../editorBrowser.js'; +import { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IDimension } from '../../../common/core/dimension.js'; +import { PositionAffinity } from '../../../common/model.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IViewModel } from '../../../common/viewModel.js'; + +/** + * This view part is responsible for rendering the content widgets, which are + * used for rendering elements that are associated to an editor position, + * such as suggestions or the parameter hints. + */ export class ViewContentWidgets extends ViewPart { private readonly _viewDomNode: FastDomNode; diff --git a/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts b/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts index b35970ee3..8d6270257 100644 --- a/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts +++ b/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./currentLineHighlight'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { editorLineHighlight, editorLineHighlightBorder } from 'vs/editor/common/core/editorColorRegistry'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import * as arrays from 'vs/base/common/arrays'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { Selection } from 'vs/editor/common/core/selection'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { isHighContrast } from 'vs/platform/theme/common/theme'; -import { Position } from 'vs/editor/common/core/position'; +import './currentLineHighlight.css'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { editorLineHighlight, editorLineHighlightBorder } from '../../../common/core/editorColorRegistry.js'; +import { RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import * as arrays from '../../../../base/common/arrays.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { Selection } from '../../../common/core/selection.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { Position } from '../../../common/core/position.js'; export abstract class AbstractLineHighlightOverlay extends DynamicViewOverlay { private readonly _context: ViewContext; @@ -201,6 +201,9 @@ export abstract class AbstractLineHighlightOverlay extends DynamicViewOverlay { protected abstract _renderOne(ctx: RenderingContext, exact: boolean): string; } +/** + * Emphasizes the current line by drawing a border around it. + */ export class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay { protected _renderOne(ctx: RenderingContext, exact: boolean): string { @@ -215,6 +218,9 @@ export class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay { } } +/** + * Emphasizes the current line margin/gutter by drawing a border around it. + */ export class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay { protected _renderOne(ctx: RenderingContext, exact: boolean): string { const className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '') + (this._shouldRenderInMargin() && exact ? ' current-line-exact-margin' : ''); diff --git a/src/vs/editor/browser/viewParts/decorations/decorations.ts b/src/vs/editor/browser/viewParts/decorations/decorations.ts index a3baa5104..6ae2287cc 100644 --- a/src/vs/editor/browser/viewParts/decorations/decorations.ts +++ b/src/vs/editor/browser/viewParts/decorations/decorations.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./decorations'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { HorizontalRange, RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewModelDecoration } from 'vs/editor/common/viewModel'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import './decorations.css'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { HorizontalRange, RenderingContext } from '../../view/renderingContext.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewModelDecoration } from '../../../common/viewModel.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; export class DecorationsOverlay extends DynamicViewOverlay { diff --git a/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts b/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts index 6bd21420b..0e0f9413a 100644 --- a/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts +++ b/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts @@ -3,19 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IOverviewRulerLayoutInfo, SmoothScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { ScrollableElementChangeOptions, ScrollableElementCreationOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { INewScrollPosition, ScrollType } from 'vs/editor/common/editorCommon'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { getThemeTypeSelector } from 'vs/platform/theme/common/themeService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; - +import * as dom from '../../../../base/browser/dom.js'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { IOverviewRulerLayoutInfo, SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { ScrollableElementChangeOptions, ScrollableElementCreationOptions } from '../../../../base/browser/ui/scrollbar/scrollableElementOptions.js'; +import { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js'; +import { INewScrollPosition, ScrollType } from '../../../common/editorCommon.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { getThemeTypeSelector } from '../../../../platform/theme/common/themeService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IMouseWheelEvent } from '../../../../base/browser/mouseEvent.js'; + +/** + * The editor scrollbar built on VS Code's scrollable element that sits beside + * the minimap. + */ export class EditorScrollbar extends ViewPart { private readonly scrollbar: SmoothScrollableElement; diff --git a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts index 164b2299b..c12341418 100644 --- a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts +++ b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { ArrayQueue } from 'vs/base/common/arrays'; -import 'vs/css!./glyphMargin'; -import { IGlyphMarginWidget, IGlyphMarginWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { GlyphMarginLane } from 'vs/editor/common/model'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { ArrayQueue } from '../../../../base/common/arrays.js'; +import './glyphMargin.css'; +import { IGlyphMarginWidget, IGlyphMarginWidgetPosition } from '../../editorBrowser.js'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { GlyphMarginLane } from '../../../common/model.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; /** * Represents a decoration that should be shown along the lines from `startLineNumber` to `endLineNumber`. diff --git a/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts b/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts index 50b0b2b86..a140386e6 100644 --- a/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts +++ b/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts @@ -3,21 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./indentGuides'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { editorBracketHighlightingForeground1, editorBracketHighlightingForeground2, editorBracketHighlightingForeground3, editorBracketHighlightingForeground4, editorBracketHighlightingForeground5, editorBracketHighlightingForeground6, editorBracketPairGuideActiveBackground1, editorBracketPairGuideActiveBackground2, editorBracketPairGuideActiveBackground3, editorBracketPairGuideActiveBackground4, editorBracketPairGuideActiveBackground5, editorBracketPairGuideActiveBackground6, editorBracketPairGuideBackground1, editorBracketPairGuideBackground2, editorBracketPairGuideBackground3, editorBracketPairGuideBackground4, editorBracketPairGuideBackground5, editorBracketPairGuideBackground6, editorIndentGuide1, editorIndentGuide2, editorIndentGuide3, editorIndentGuide4, editorIndentGuide5, editorIndentGuide6, editorActiveIndentGuide1, editorActiveIndentGuide2, editorActiveIndentGuide3, editorActiveIndentGuide4, editorActiveIndentGuide5, editorActiveIndentGuide6 } from 'vs/editor/common/core/editorColorRegistry'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { EditorOption, InternalGuidesOptions } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { ArrayQueue } from 'vs/base/common/arrays'; -import { Color } from 'vs/base/common/color'; -import { isDefined } from 'vs/base/common/types'; -import { BracketPairGuidesClassNames } from 'vs/editor/common/model/guidesTextModelPart'; -import { IndentGuide, HorizontalGuidesState } from 'vs/editor/common/textModelGuides'; - +import './indentGuides.css'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { editorBracketHighlightingForeground1, editorBracketHighlightingForeground2, editorBracketHighlightingForeground3, editorBracketHighlightingForeground4, editorBracketHighlightingForeground5, editorBracketHighlightingForeground6, editorBracketPairGuideActiveBackground1, editorBracketPairGuideActiveBackground2, editorBracketPairGuideActiveBackground3, editorBracketPairGuideActiveBackground4, editorBracketPairGuideActiveBackground5, editorBracketPairGuideActiveBackground6, editorBracketPairGuideBackground1, editorBracketPairGuideBackground2, editorBracketPairGuideBackground3, editorBracketPairGuideBackground4, editorBracketPairGuideBackground5, editorBracketPairGuideBackground6, editorIndentGuide1, editorIndentGuide2, editorIndentGuide3, editorIndentGuide4, editorIndentGuide5, editorIndentGuide6, editorActiveIndentGuide1, editorActiveIndentGuide2, editorActiveIndentGuide3, editorActiveIndentGuide4, editorActiveIndentGuide5, editorActiveIndentGuide6 } from '../../../common/core/editorColorRegistry.js'; +import { RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { EditorOption, InternalGuidesOptions } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { ArrayQueue } from '../../../../base/common/arrays.js'; +import { Color } from '../../../../base/common/color.js'; +import { isDefined } from '../../../../base/common/types.js'; +import { BracketPairGuidesClassNames } from '../../../common/model/guidesTextModelPart.js'; +import { IndentGuide, HorizontalGuidesState } from '../../../common/textModelGuides.js'; + +/** + * Indent guides are vertical lines that help identify the indentation level of + * the code. + */ export class IndentGuidesOverlay extends DynamicViewOverlay { private readonly _context: ViewContext; diff --git a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts index dcebb2799..ee6461fd7 100644 --- a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts +++ b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts @@ -3,18 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./lineNumbers'; -import * as platform from 'vs/base/common/platform'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { RenderLineNumbersType, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { editorDimmedLineNumber, editorLineNumbers } from 'vs/editor/common/core/editorColorRegistry'; - +import './lineNumbers.css'; +import * as platform from '../../../../base/common/platform.js'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { RenderLineNumbersType, EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { editorDimmedLineNumber, editorLineNumbers } from '../../../common/core/editorColorRegistry.js'; + +/** + * Renders line numbers to the left of the main view lines content. + */ export class LineNumbersOverlay extends DynamicViewOverlay { public static readonly CLASS_NAME = 'line-numbers'; diff --git a/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts b/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts index 9bbfeffae..2c1b1e495 100644 --- a/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts +++ b/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./linesDecorations'; -import { DecorationToRender, DedupOverlay } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import './linesDecorations.css'; +import { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js'; +import { RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; export class LinesDecorationsOverlay extends DedupOverlay { diff --git a/src/vs/editor/browser/viewParts/margin/margin.ts b/src/vs/editor/browser/viewParts/margin/margin.ts index 5748c0564..cd4660c83 100644 --- a/src/vs/editor/browser/viewParts/margin/margin.ts +++ b/src/vs/editor/browser/viewParts/margin/margin.ts @@ -3,15 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./margin'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; - - +import './margin.css'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; + +/** + * Margin is a vertical strip located on the left of the editor's content area. + * It is used for various features such as line numbers, folding markers, and + * decorations that provide additional information about the lines of code. + */ export class Margin extends ViewPart { public static readonly CLASS_NAME = 'glyph-margin'; diff --git a/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts b/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts index f8f879cb5..7b814dc89 100644 --- a/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts +++ b/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./marginDecorations'; -import { DecorationToRender, DedupOverlay } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; +import './marginDecorations.css'; +import { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js'; +import { RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; export class MarginViewLineDecorationsOverlay extends DedupOverlay { private readonly _context: ViewContext; diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index 19db0c6b4..a54d780d9 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -3,40 +3,40 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./minimap'; -import * as dom from 'vs/base/browser/dom'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { GlobalPointerMoveMonitor } from 'vs/base/browser/globalPointerMoveMonitor'; -import { CharCode } from 'vs/base/common/charCode'; -import { IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import { ILine, RenderedLinesCollection } from 'vs/editor/browser/view/viewLayer'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderMinimap, EditorOption, MINIMAP_GUTTER_WIDTH, EditorLayoutInfoComputer } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { RGBA8 } from 'vs/editor/common/core/rgba'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { ColorId } from 'vs/editor/common/encodedTokenAttributes'; -import { MinimapCharRenderer } from 'vs/editor/browser/viewParts/minimap/minimapCharRenderer'; -import { Constants } from 'vs/editor/browser/viewParts/minimap/minimapCharSheet'; -import { MinimapTokensColorTracker } from 'vs/editor/common/viewModel/minimapTokensColorTracker'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import { EditorTheme } from 'vs/editor/common/editorTheme'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewLineData, ViewModelDecoration } from 'vs/editor/common/viewModel'; -import { minimapSelection, minimapBackground, minimapForegroundOpacity, editorForeground } from 'vs/platform/theme/common/colorRegistry'; -import { ModelDecorationMinimapOptions } from 'vs/editor/common/model/textModel'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Color } from 'vs/base/common/color'; -import { GestureEvent, EventType, Gesture } from 'vs/base/browser/touch'; -import { MinimapCharRendererFactory } from 'vs/editor/browser/viewParts/minimap/minimapCharRendererFactory'; -import { MinimapPosition, MinimapSectionHeaderStyle, TextModelResolvedOptions } from 'vs/editor/common/model'; -import { createSingleCallFunction } from 'vs/base/common/functional'; -import { LRUCache } from 'vs/base/common/map'; -import { DEFAULT_FONT_FAMILY } from 'vs/base/browser/fonts'; +import './minimap.css'; +import * as dom from '../../../../base/browser/dom.js'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { GlobalPointerMoveMonitor } from '../../../../base/browser/globalPointerMoveMonitor.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { IDisposable, Disposable } from '../../../../base/common/lifecycle.js'; +import * as platform from '../../../../base/common/platform.js'; +import * as strings from '../../../../base/common/strings.js'; +import { ILine, RenderedLinesCollection } from '../../view/viewLayer.js'; +import { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js'; +import { RenderMinimap, EditorOption, MINIMAP_GUTTER_WIDTH, EditorLayoutInfoComputer } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { RGBA8 } from '../../../common/core/rgba.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { IEditorConfiguration } from '../../../common/config/editorConfiguration.js'; +import { ColorId } from '../../../common/encodedTokenAttributes.js'; +import { MinimapCharRenderer } from './minimapCharRenderer.js'; +import { Constants } from './minimapCharSheet.js'; +import { MinimapTokensColorTracker } from '../../../common/viewModel/minimapTokensColorTracker.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import { EditorTheme } from '../../../common/editorTheme.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewLineData, ViewModelDecoration } from '../../../common/viewModel.js'; +import { minimapSelection, minimapBackground, minimapForegroundOpacity, editorForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { ModelDecorationMinimapOptions } from '../../../common/model/textModel.js'; +import { Selection } from '../../../common/core/selection.js'; +import { Color } from '../../../../base/common/color.js'; +import { GestureEvent, EventType, Gesture } from '../../../../base/browser/touch.js'; +import { MinimapCharRendererFactory } from './minimapCharRendererFactory.js'; +import { MinimapPosition, MinimapSectionHeaderStyle, TextModelResolvedOptions } from '../../../common/model.js'; +import { createSingleCallFunction } from '../../../../base/common/functional.js'; +import { LRUCache } from '../../../../base/common/map.js'; +import { DEFAULT_FONT_FAMILY } from '../../../../base/browser/fonts.js'; /** * The orthogonal distance to the slider at which dragging "resets". This implements "snapping" @@ -803,6 +803,10 @@ class MinimapSamplingState { } } +/** + * The minimap appears beside the editor scroll bar and visualizes a zoomed out + * view of the file. + */ export class Minimap extends ViewPart implements IMinimapModel { public readonly tokensColorTracker: MinimapTokensColorTracker; diff --git a/src/vs/editor/browser/viewParts/minimap/minimapCharRenderer.ts b/src/vs/editor/browser/viewParts/minimap/minimapCharRenderer.ts index d9c20582f..687ab96b5 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimapCharRenderer.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimapCharRenderer.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RGBA8 } from 'vs/editor/common/core/rgba'; -import { Constants, getCharIndex } from './minimapCharSheet'; -import { toUint8 } from 'vs/base/common/uint'; +import { RGBA8 } from '../../../common/core/rgba.js'; +import { Constants, getCharIndex } from './minimapCharSheet.js'; +import { toUint8 } from '../../../../base/common/uint.js'; export class MinimapCharRenderer { _minimapCharRendererBrand: void = undefined; diff --git a/src/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.ts b/src/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.ts index 7b0b9bfcd..36846f120 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MinimapCharRenderer } from 'vs/editor/browser/viewParts/minimap/minimapCharRenderer'; -import { allCharCodes, Constants } from 'vs/editor/browser/viewParts/minimap/minimapCharSheet'; -import { prebakedMiniMaps } from 'vs/editor/browser/viewParts/minimap/minimapPreBaked'; -import { toUint8 } from 'vs/base/common/uint'; +import { MinimapCharRenderer } from './minimapCharRenderer.js'; +import { allCharCodes, Constants } from './minimapCharSheet.js'; +import { prebakedMiniMaps } from './minimapPreBaked.js'; +import { toUint8 } from '../../../../base/common/uint.js'; /** * Creates character renderers. It takes a 'scale' that determines how large diff --git a/src/vs/editor/browser/viewParts/minimap/minimapPreBaked.ts b/src/vs/editor/browser/viewParts/minimap/minimapPreBaked.ts index 3679e8afa..a9b5738be 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimapPreBaked.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimapPreBaked.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createSingleCallFunction } from 'vs/base/common/functional'; +import { createSingleCallFunction } from '../../../../base/common/functional.js'; const charTable: { [hex: string]: number } = { '0': 0, diff --git a/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts b/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts index 5b3e86a04..e34f35493 100644 --- a/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts +++ b/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./overlayWidgets'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IOverlayWidget, IOverlayWidgetPosition, IOverlayWidgetPositionCoordinates, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import * as dom from 'vs/base/browser/dom'; +import './overlayWidgets.css'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { IOverlayWidget, IOverlayWidgetPosition, IOverlayWidgetPositionCoordinates, OverlayWidgetPositionPreference } from '../../editorBrowser.js'; +import { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import * as dom from '../../../../base/browser/dom.js'; interface IWidgetData { @@ -25,6 +25,11 @@ interface IWidgetMap { [key: string]: IWidgetData; } +/* + * This view part for rendering the overlay widgets, which are + * floating widgets positioned based on the editor's viewport, + * such as the find widget. + */ export class ViewOverlayWidgets extends ViewPart { private readonly _viewDomNode: FastDomNode; diff --git a/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts b/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts index 8e3eb5666..c494f6e2d 100644 --- a/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts +++ b/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { Color } from 'vs/base/common/color'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { Position } from 'vs/editor/common/core/position'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { editorCursorForeground, editorOverviewRulerBorder, editorOverviewRulerBackground, editorMultiCursorSecondaryForeground, editorMultiCursorPrimaryForeground } from 'vs/editor/common/core/editorColorRegistry'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import { EditorTheme } from 'vs/editor/common/editorTheme'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { OverviewRulerDecorationsGroup } from 'vs/editor/common/viewModel'; -import { equals } from 'vs/base/common/arrays'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { Color } from '../../../../base/common/color.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { Position } from '../../../common/core/position.js'; +import { IEditorConfiguration } from '../../../common/config/editorConfiguration.js'; +import { TokenizationRegistry } from '../../../common/languages.js'; +import { editorCursorForeground, editorOverviewRulerBorder, editorOverviewRulerBackground, editorMultiCursorSecondaryForeground, editorMultiCursorPrimaryForeground } from '../../../common/core/editorColorRegistry.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import { EditorTheme } from '../../../common/editorTheme.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { OverviewRulerDecorationsGroup } from '../../../common/viewModel.js'; +import { equals } from '../../../../base/common/arrays.js'; class Settings { diff --git a/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts b/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts index 78f3c94ca..11292eb56 100644 --- a/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts +++ b/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts @@ -3,14 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IOverviewRuler } from 'vs/editor/browser/editorBrowser'; -import { OverviewRulerPosition, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ColorZone, OverviewRulerZone, OverviewZoneManager } from 'vs/editor/common/viewModel/overviewZoneManager'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; - +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { IOverviewRuler } from '../../editorBrowser.js'; +import { OverviewRulerPosition, EditorOption } from '../../../common/config/editorOptions.js'; +import { ColorZone, OverviewRulerZone, OverviewZoneManager } from '../../../common/viewModel/overviewZoneManager.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewEventHandler } from '../../../common/viewEventHandler.js'; + +/** + * The overview ruler appears underneath the editor scroll bar and shows things + * like the cursor, various decorations, etc. + */ export class OverviewRuler extends ViewEventHandler implements IOverviewRuler { private readonly _context: ViewContext; diff --git a/src/vs/editor/browser/viewParts/rulers/rulers.ts b/src/vs/editor/browser/viewParts/rulers/rulers.ts index e924ed67d..c0a46927d 100644 --- a/src/vs/editor/browser/viewParts/rulers/rulers.ts +++ b/src/vs/editor/browser/viewParts/rulers/rulers.ts @@ -3,14 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./rulers'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { EditorOption, IRulerOption } from 'vs/editor/common/config/editorOptions'; - +import './rulers.css'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption, IRulerOption } from '../../../common/config/editorOptions.js'; + +/** + * Rulers are vertical lines that appear at certain columns in the editor. There can be >= 0 rulers + * at a time. + */ export class Rulers extends ViewPart { public domNode: FastDomNode; diff --git a/src/vs/editor/browser/viewParts/rulersGpu/rulersGpu.ts b/src/vs/editor/browser/viewParts/rulersGpu/rulersGpu.ts new file mode 100644 index 000000000..8db2dc282 --- /dev/null +++ b/src/vs/editor/browser/viewParts/rulersGpu/rulersGpu.ts @@ -0,0 +1,80 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { ViewPart } from '../../view/viewPart.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import type { ViewGpuContext } from '../../gpu/viewGpuContext.js'; +import type { IObjectCollectionBufferEntry } from '../../gpu/objectCollectionBuffer.js'; +import type { RectangleRendererEntrySpec } from '../../gpu/rectangleRenderer.js'; +import { Color } from '../../../../base/common/color.js'; +import { editorRuler } from '../../../common/core/editorColorRegistry.js'; +import { autorun, type IReader } from '../../../../base/common/observable.js'; + +/** + * Rulers are vertical lines that appear at certain columns in the editor. There can be >= 0 rulers + * at a time. + */ +export class RulersGpu extends ViewPart { + + private readonly _gpuShapes: IObjectCollectionBufferEntry[] = []; + + constructor( + context: ViewContext, + private readonly _viewGpuContext: ViewGpuContext + ) { + super(context); + this._register(autorun(reader => this._updateEntries(reader))); + } + + // --- begin event handlers + + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + this._updateEntries(undefined); + return true; + } + + // --- end event handlers + + public prepareRender(ctx: RenderingContext): void { + // Nothing to read + } + + public render(ctx: RestrictedRenderingContext): void { + // Rendering is handled by RectangleRenderer + } + + private _updateEntries(reader: IReader | undefined) { + const options = this._context.configuration.options; + const rulers = options.get(EditorOption.rulers); + const typicalHalfwidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth; + const devicePixelRatio = this._viewGpuContext.devicePixelRatio.read(reader); + for (let i = 0, len = rulers.length; i < len; i++) { + const ruler = rulers[i]; + const shape = this._gpuShapes[i]; + const color = ruler.color ? Color.fromHex(ruler.color) : this._context.theme.getColor(editorRuler) ?? Color.white; + const rulerData = [ + ruler.column * typicalHalfwidthCharacterWidth * devicePixelRatio, + 0, + Math.max(1, Math.ceil(devicePixelRatio)), + Number.MAX_SAFE_INTEGER, + color.rgba.r / 255, + color.rgba.g / 255, + color.rgba.b / 255, + color.rgba.a, + ] as const; + if (!shape) { + this._gpuShapes[i] = this._viewGpuContext.rectangleRenderer.register(...rulerData); + } else { + shape.setRaw(rulerData); + } + } + while (this._gpuShapes.length > rulers.length) { + this._gpuShapes.splice(-1, 1)[0].dispose(); + } + } +} diff --git a/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts b/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts index 1fc334794..71a9a7605 100644 --- a/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts +++ b/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./scrollDecoration'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import './scrollDecoration.css'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; export class ScrollDecorationViewPart extends ViewPart { diff --git a/src/vs/editor/browser/viewParts/selections/selections.ts b/src/vs/editor/browser/viewParts/selections/selections.ts index d53a5126e..ce07d7984 100644 --- a/src/vs/editor/browser/viewParts/selections/selections.ts +++ b/src/vs/editor/browser/viewParts/selections/selections.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./selections'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { Range } from 'vs/editor/common/core/range'; -import { HorizontalRange, LineVisibleRanges, RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { editorSelectionForeground } from 'vs/platform/theme/common/colorRegistry'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import './selections.css'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { Range } from '../../../common/core/range.js'; +import { HorizontalRange, LineVisibleRanges, RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { editorSelectionForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; const enum CornerStyle { EXTERN, diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts index 4502698cf..b69180772 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import * as strings from 'vs/base/common/strings'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { TextEditorCursorStyle, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor'; +import * as dom from '../../../../base/browser/dom.js'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import * as strings from '../../../../base/common/strings.js'; +import { applyFontInfo } from '../../config/domFontInfo.js'; +import { TextEditorCursorStyle, EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js'; export interface IViewCursorRenderData { domNode: HTMLElement; diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts index ceb27ce5e..fc8695d3e 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts @@ -3,26 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./viewCursors'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IntervalTimer, TimeoutTimer } from 'vs/base/common/async'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { IViewCursorRenderData, ViewCursor, CursorPlurality } from 'vs/editor/browser/viewParts/viewCursors/viewCursor'; -import { TextEditorCursorBlinkingStyle, TextEditorCursorStyle, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; +import './viewCursors.css'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { IntervalTimer, TimeoutTimer } from '../../../../base/common/async.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { IViewCursorRenderData, ViewCursor, CursorPlurality } from './viewCursor.js'; +import { TextEditorCursorBlinkingStyle, TextEditorCursorStyle, EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; import { editorCursorBackground, editorCursorForeground, editorMultiCursorPrimaryForeground, editorMultiCursorPrimaryBackground, editorMultiCursorSecondaryForeground, editorMultiCursorSecondaryBackground -} from 'vs/editor/common/core/editorColorRegistry'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { isHighContrast } from 'vs/platform/theme/common/theme'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { WindowIntervalTimer, getWindow } from 'vs/base/browser/dom'; - +} from '../../../common/core/editorColorRegistry.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { CursorChangeReason } from '../../../common/cursorEvents.js'; +import { WindowIntervalTimer, getWindow } from '../../../../base/browser/dom.js'; + +/** + * View cursors is a view part responsible for rendering the primary cursor and + * any secondary cursors that are currently active. + */ export class ViewCursors extends ViewPart { static readonly BLINK_INTERVAL = 500; @@ -31,6 +35,7 @@ export class ViewCursors extends ViewPart { private _cursorBlinking: TextEditorCursorBlinkingStyle; private _cursorStyle: TextEditorCursorStyle; private _cursorSmoothCaretAnimation: 'off' | 'explicit' | 'on'; + private _experimentalEditContextEnabled: boolean; private _selectionIsEmpty: boolean; private _isComposingInput: boolean; @@ -56,6 +61,7 @@ export class ViewCursors extends ViewPart { this._cursorBlinking = options.get(EditorOption.cursorBlinking); this._cursorStyle = options.get(EditorOption.cursorStyle); this._cursorSmoothCaretAnimation = options.get(EditorOption.cursorSmoothCaretAnimation); + this._experimentalEditContextEnabled = options.get(EditorOption.experimentalEditContextEnabled); this._selectionIsEmpty = true; this._isComposingInput = false; @@ -110,6 +116,7 @@ export class ViewCursors extends ViewPart { this._cursorBlinking = options.get(EditorOption.cursorBlinking); this._cursorStyle = options.get(EditorOption.cursorStyle); this._cursorSmoothCaretAnimation = options.get(EditorOption.cursorSmoothCaretAnimation); + this._experimentalEditContextEnabled = options.get(EditorOption.experimentalEditContextEnabled); this._updateBlinking(); this._updateDomClassName(); @@ -218,7 +225,8 @@ export class ViewCursors extends ViewPart { // ---- blinking logic private _getCursorBlinking(): TextEditorCursorBlinkingStyle { - if (this._isComposingInput) { + // TODO: Remove the following if statement when experimental edit context is made default sole implementation + if (this._isComposingInput && !this._experimentalEditContextEnabled) { // avoid double cursors return TextEditorCursorBlinkingStyle.Hidden; } diff --git a/src/vs/editor/browser/viewParts/lines/domReadingContext.ts b/src/vs/editor/browser/viewParts/viewLines/domReadingContext.ts similarity index 100% rename from src/vs/editor/browser/viewParts/lines/domReadingContext.ts rename to src/vs/editor/browser/viewParts/viewLines/domReadingContext.ts diff --git a/src/vs/editor/browser/viewParts/lines/rangeUtil.ts b/src/vs/editor/browser/viewParts/viewLines/rangeUtil.ts similarity index 96% rename from src/vs/editor/browser/viewParts/lines/rangeUtil.ts rename to src/vs/editor/browser/viewParts/viewLines/rangeUtil.ts index fdb61a07f..3c0a4ba39 100644 --- a/src/vs/editor/browser/viewParts/lines/rangeUtil.ts +++ b/src/vs/editor/browser/viewParts/viewLines/rangeUtil.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Constants } from 'vs/base/common/uint'; -import { FloatHorizontalRange } from 'vs/editor/browser/view/renderingContext'; -import { DomReadingContext } from 'vs/editor/browser/viewParts/lines/domReadingContext'; +import { Constants } from '../../../../base/common/uint.js'; +import { FloatHorizontalRange } from '../../view/renderingContext.js'; +import { DomReadingContext } from './domReadingContext.js'; export class RangeUtil { diff --git a/src/vs/editor/browser/viewParts/lines/viewLine.ts b/src/vs/editor/browser/viewParts/viewLines/viewLine.ts similarity index 87% rename from src/vs/editor/browser/viewParts/lines/viewLine.ts rename to src/vs/editor/browser/viewParts/viewLines/viewLine.ts index 9a5d2f556..5e555246c 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLine.ts +++ b/src/vs/editor/browser/viewParts/viewLines/viewLine.ts @@ -3,21 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as browser from 'vs/base/browser/browser'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import * as platform from 'vs/base/common/platform'; -import { IVisibleLine } from 'vs/editor/browser/view/viewLayer'; -import { RangeUtil } from 'vs/editor/browser/viewParts/lines/rangeUtil'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { FloatHorizontalRange, VisibleRanges } from 'vs/editor/browser/view/renderingContext'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { CharacterMapping, ForeignElementType, RenderLineInput, renderViewLine, LineRange, DomPosition } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { InlineDecorationType } from 'vs/editor/common/viewModel'; -import { ColorScheme, isHighContrast } from 'vs/platform/theme/common/theme'; -import { EditorOption, EditorFontLigatures } from 'vs/editor/common/config/editorOptions'; -import { DomReadingContext } from 'vs/editor/browser/viewParts/lines/domReadingContext'; +import * as browser from '../../../../base/browser/browser.js'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import * as platform from '../../../../base/common/platform.js'; +import { IVisibleLine } from '../../view/viewLayer.js'; +import { RangeUtil } from './rangeUtil.js'; +import { StringBuilder } from '../../../common/core/stringBuilder.js'; +import { FloatHorizontalRange, VisibleRanges } from '../../view/renderingContext.js'; +import { LineDecoration } from '../../../common/viewLayout/lineDecorations.js'; +import { CharacterMapping, ForeignElementType, RenderLineInput, renderViewLine, LineRange, DomPosition } from '../../../common/viewLayout/viewLineRenderer.js'; +import { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js'; +import { InlineDecorationType } from '../../../common/viewModel.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { EditorFontLigatures } from '../../../common/config/editorOptions.js'; +import { DomReadingContext } from './domReadingContext.js'; +import type { ViewLineOptions } from './viewLineOptions.js'; +import { ViewGpuContext } from '../../gpu/viewGpuContext.js'; const canUseFastRenderedViewLine = (function () { if (platform.isNative) { @@ -45,61 +46,6 @@ const canUseFastRenderedViewLine = (function () { let monospaceAssumptionsAreValid = true; -export class ViewLineOptions { - public readonly themeType: ColorScheme; - public readonly renderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all'; - public readonly renderControlCharacters: boolean; - public readonly spaceWidth: number; - public readonly middotWidth: number; - public readonly wsmiddotWidth: number; - public readonly useMonospaceOptimizations: boolean; - public readonly canUseHalfwidthRightwardsArrow: boolean; - public readonly lineHeight: number; - public readonly stopRenderingLineAfter: number; - public readonly fontLigatures: string; - - constructor(config: IEditorConfiguration, themeType: ColorScheme) { - this.themeType = themeType; - const options = config.options; - const fontInfo = options.get(EditorOption.fontInfo); - const experimentalWhitespaceRendering = options.get(EditorOption.experimentalWhitespaceRendering); - if (experimentalWhitespaceRendering === 'off') { - this.renderWhitespace = options.get(EditorOption.renderWhitespace); - } else { - // whitespace is rendered in a different layer - this.renderWhitespace = 'none'; - } - this.renderControlCharacters = options.get(EditorOption.renderControlCharacters); - this.spaceWidth = fontInfo.spaceWidth; - this.middotWidth = fontInfo.middotWidth; - this.wsmiddotWidth = fontInfo.wsmiddotWidth; - this.useMonospaceOptimizations = ( - fontInfo.isMonospace - && !options.get(EditorOption.disableMonospaceOptimizations) - ); - this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow; - this.lineHeight = options.get(EditorOption.lineHeight); - this.stopRenderingLineAfter = options.get(EditorOption.stopRenderingLineAfter); - this.fontLigatures = options.get(EditorOption.fontLigatures); - } - - public equals(other: ViewLineOptions): boolean { - return ( - this.themeType === other.themeType - && this.renderWhitespace === other.renderWhitespace - && this.renderControlCharacters === other.renderControlCharacters - && this.spaceWidth === other.spaceWidth - && this.middotWidth === other.middotWidth - && this.wsmiddotWidth === other.wsmiddotWidth - && this.useMonospaceOptimizations === other.useMonospaceOptimizations - && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow - && this.lineHeight === other.lineHeight - && this.stopRenderingLineAfter === other.stopRenderingLineAfter - && this.fontLigatures === other.fontLigatures - ); - } -} - export class ViewLine implements IVisibleLine { public static readonly CLASS_NAME = 'view-line'; @@ -152,6 +98,12 @@ export class ViewLine implements IVisibleLine { } public renderLine(lineNumber: number, deltaTop: number, lineHeight: number, viewportData: ViewportData, sb: StringBuilder): boolean { + if (this._options.useGpu && ViewGpuContext.canRender(this._options, viewportData, lineNumber)) { + this._renderedViewLine?.domNode?.domNode.remove(); + this._renderedViewLine = null; + return false; + } + if (this._isMaybeInvalid === false) { // it appears that nothing relevant has changed return false; diff --git a/src/vs/editor/browser/viewParts/viewLines/viewLineOptions.ts b/src/vs/editor/browser/viewParts/viewLines/viewLineOptions.ts new file mode 100644 index 000000000..c75ea1740 --- /dev/null +++ b/src/vs/editor/browser/viewParts/viewLines/viewLineOptions.ts @@ -0,0 +1,66 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type { ColorScheme } from '../../../../platform/theme/common/theme.js'; +import type { IEditorConfiguration } from '../../../common/config/editorConfiguration.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; + +export class ViewLineOptions { + public readonly themeType: ColorScheme; + public readonly renderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all'; + public readonly renderControlCharacters: boolean; + public readonly spaceWidth: number; + public readonly middotWidth: number; + public readonly wsmiddotWidth: number; + public readonly useMonospaceOptimizations: boolean; + public readonly canUseHalfwidthRightwardsArrow: boolean; + public readonly lineHeight: number; + public readonly stopRenderingLineAfter: number; + public readonly fontLigatures: string; + public readonly useGpu: boolean; + + constructor(config: IEditorConfiguration, themeType: ColorScheme) { + this.themeType = themeType; + const options = config.options; + const fontInfo = options.get(EditorOption.fontInfo); + const experimentalWhitespaceRendering = options.get(EditorOption.experimentalWhitespaceRendering); + if (experimentalWhitespaceRendering === 'off') { + this.renderWhitespace = options.get(EditorOption.renderWhitespace); + } else { + // whitespace is rendered in a different layer + this.renderWhitespace = 'none'; + } + this.renderControlCharacters = options.get(EditorOption.renderControlCharacters); + this.spaceWidth = fontInfo.spaceWidth; + this.middotWidth = fontInfo.middotWidth; + this.wsmiddotWidth = fontInfo.wsmiddotWidth; + this.useMonospaceOptimizations = ( + fontInfo.isMonospace + && !options.get(EditorOption.disableMonospaceOptimizations) + ); + this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow; + this.lineHeight = options.get(EditorOption.lineHeight); + this.stopRenderingLineAfter = options.get(EditorOption.stopRenderingLineAfter); + this.fontLigatures = options.get(EditorOption.fontLigatures); + this.useGpu = options.get(EditorOption.experimentalGpuAcceleration) === 'on'; + } + + public equals(other: ViewLineOptions): boolean { + return ( + this.themeType === other.themeType + && this.renderWhitespace === other.renderWhitespace + && this.renderControlCharacters === other.renderControlCharacters + && this.spaceWidth === other.spaceWidth + && this.middotWidth === other.middotWidth + && this.wsmiddotWidth === other.wsmiddotWidth + && this.useMonospaceOptimizations === other.useMonospaceOptimizations + && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow + && this.lineHeight === other.lineHeight + && this.stopRenderingLineAfter === other.stopRenderingLineAfter + && this.fontLigatures === other.fontLigatures + && this.useGpu === other.useGpu + ); + } +} diff --git a/src/vs/editor/browser/viewParts/lines/viewLines.css b/src/vs/editor/browser/viewParts/viewLines/viewLines.css similarity index 100% rename from src/vs/editor/browser/viewParts/lines/viewLines.css rename to src/vs/editor/browser/viewParts/viewLines/viewLines.css diff --git a/src/vs/editor/browser/viewParts/lines/viewLines.ts b/src/vs/editor/browser/viewParts/viewLines/viewLines.ts similarity index 95% rename from src/vs/editor/browser/viewParts/lines/viewLines.ts rename to src/vs/editor/browser/viewParts/viewLines/viewLines.ts index ce594c136..b93a0028b 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLines.ts +++ b/src/vs/editor/browser/viewParts/viewLines/viewLines.ts @@ -3,27 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode } from 'vs/base/browser/fastDomNode'; -import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import * as platform from 'vs/base/common/platform'; -import { Constants } from 'vs/base/common/uint'; -import 'vs/css!./viewLines'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { HorizontalPosition, HorizontalRange, IViewLines, LineVisibleRanges, VisibleRanges } from 'vs/editor/browser/view/renderingContext'; -import { VisibleLinesCollection } from 'vs/editor/browser/view/viewLayer'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { DomReadingContext } from 'vs/editor/browser/viewParts/lines/domReadingContext'; -import { ViewLine, ViewLineOptions } from 'vs/editor/browser/viewParts/lines/viewLine'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { Viewport } from 'vs/editor/common/viewModel'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import { FastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import * as platform from '../../../../base/common/platform.js'; +import { Constants } from '../../../../base/common/uint.js'; +import './viewLines.css'; +import { applyFontInfo } from '../../config/domFontInfo.js'; +import { HorizontalPosition, HorizontalRange, IViewLines, LineVisibleRanges, VisibleRanges } from '../../view/renderingContext.js'; +import { VisibleLinesCollection } from '../../view/viewLayer.js'; +import { PartFingerprint, PartFingerprints, ViewPart } from '../../view/viewPart.js'; +import { DomReadingContext } from './domReadingContext.js'; +import { ViewLine } from './viewLine.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js'; +import { Viewport } from '../../../common/viewModel.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import { ViewLineOptions } from './viewLineOptions.js'; class LastRenderedData { @@ -87,6 +88,10 @@ class HorizontalRevealSelectionsRequest { type HorizontalRevealRequest = HorizontalRevealRangeRequest | HorizontalRevealSelectionsRequest; +/** + * The view lines part is responsible for rendering the actual content of a + * file. + */ export class ViewLines extends ViewPart implements IViewLines { /** * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport) diff --git a/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts b/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts new file mode 100644 index 000000000..693bfc1f5 --- /dev/null +++ b/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts @@ -0,0 +1,436 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getActiveWindow } from '../../../../base/browser/dom.js'; +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { autorun } from '../../../../base/common/observable.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import type { Position } from '../../../common/core/position.js'; +import type { Range } from '../../../common/core/range.js'; +import type { ViewLinesChangedEvent, ViewScrollChangedEvent } from '../../../common/viewEvents.js'; +import type { ViewportData } from '../../../common/viewLayout/viewLinesViewportData.js'; +import type { ViewContext } from '../../../common/viewModel/viewContext.js'; +import { TextureAtlasPage } from '../../gpu/atlas/textureAtlasPage.js'; +import { FullFileRenderStrategy } from '../../gpu/fullFileRenderStrategy.js'; +import { BindingId, type IGpuRenderStrategy } from '../../gpu/gpu.js'; +import { GPULifecycle } from '../../gpu/gpuDisposable.js'; +import { observeDevicePixelDimensions, quadVertices } from '../../gpu/gpuUtils.js'; +import { ViewGpuContext } from '../../gpu/viewGpuContext.js'; +import { FloatHorizontalRange, HorizontalPosition, IViewLines, LineVisibleRanges, RenderingContext, RestrictedRenderingContext, VisibleRanges } from '../../view/renderingContext.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { ViewLineOptions } from '../viewLines/viewLineOptions.js'; + + +const enum GlyphStorageBufferInfo { + FloatsPerEntry = 2 + 2 + 2, + BytesPerEntry = GlyphStorageBufferInfo.FloatsPerEntry * 4, + Offset_TexturePosition = 0, + Offset_TextureSize = 2, + Offset_OriginPosition = 4, +} + +/** + * The GPU implementation of the ViewLines part. + */ +export class ViewLinesGpu extends ViewPart implements IViewLines { + + private readonly canvas: HTMLCanvasElement; + + private _lastViewportData?: ViewportData; + private _lastViewLineOptions?: ViewLineOptions; + + private _device!: GPUDevice; + private _renderPassDescriptor!: GPURenderPassDescriptor; + private _renderPassColorAttachment!: GPURenderPassColorAttachment; + private _bindGroup!: GPUBindGroup; + private _pipeline!: GPURenderPipeline; + + private _vertexBuffer!: GPUBuffer; + + private readonly _glyphStorageBuffer: GPUBuffer[] = []; + private _atlasGpuTexture!: GPUTexture; + private readonly _atlasGpuTextureVersions: number[] = []; + + private _initialized = false; + + private _renderStrategy!: IGpuRenderStrategy; + + constructor( + context: ViewContext, + private readonly _viewGpuContext: ViewGpuContext, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @ILogService private readonly _logService: ILogService, + ) { + super(context); + + this.canvas = this._viewGpuContext.canvas.domNode; + + this._register(autorun(reader => { + /*const dims = */this._viewGpuContext.canvasDevicePixelDimensions.read(reader); + // TODO: Request render, should this just call renderText with the last viewportData + })); + + this.initWebgpu(); + } + + async initWebgpu() { + // #region General + + this._device = await this._viewGpuContext.device; + + if (this._store.isDisposed) { + return; + } + + const atlas = ViewGpuContext.atlas; + + // Rerender when the texture atlas deletes glyphs + this._register(atlas.onDidDeleteGlyphs(() => { + this._atlasGpuTextureVersions.length = 0; + this._atlasGpuTextureVersions[0] = 0; + this._atlasGpuTextureVersions[1] = 0; + this._renderStrategy.reset(); + })); + + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + this._viewGpuContext.ctx.configure({ + device: this._device, + format: presentationFormat, + alphaMode: 'premultiplied', + }); + + this._renderPassColorAttachment = { + view: null!, // Will be filled at render time + loadOp: 'load', + storeOp: 'store', + }; + this._renderPassDescriptor = { + label: 'Monaco render pass', + colorAttachments: [this._renderPassColorAttachment], + }; + + // #endregion General + + // #region Uniforms + + let layoutInfoUniformBuffer: GPUBuffer; + { + const enum Info { + FloatsPerEntry = 6, + BytesPerEntry = Info.FloatsPerEntry * 4, + Offset_CanvasWidth____ = 0, + Offset_CanvasHeight___ = 1, + Offset_ViewportOffsetX = 2, + Offset_ViewportOffsetY = 3, + Offset_ViewportWidth__ = 4, + Offset_ViewportHeight_ = 5, + } + const bufferValues = new Float32Array(Info.FloatsPerEntry); + const updateBufferValues = (canvasDevicePixelWidth: number = this.canvas.width, canvasDevicePixelHeight: number = this.canvas.height) => { + bufferValues[Info.Offset_CanvasWidth____] = canvasDevicePixelWidth; + bufferValues[Info.Offset_CanvasHeight___] = canvasDevicePixelHeight; + bufferValues[Info.Offset_ViewportOffsetX] = Math.ceil(this._context.configuration.options.get(EditorOption.layoutInfo).contentLeft * getActiveWindow().devicePixelRatio); + bufferValues[Info.Offset_ViewportOffsetY] = 0; + bufferValues[Info.Offset_ViewportWidth__] = bufferValues[Info.Offset_CanvasWidth____] - bufferValues[Info.Offset_ViewportOffsetX]; + bufferValues[Info.Offset_ViewportHeight_] = bufferValues[Info.Offset_CanvasHeight___] - bufferValues[Info.Offset_ViewportOffsetY]; + return bufferValues; + }; + layoutInfoUniformBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco uniform buffer', + size: Info.BytesPerEntry, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }, () => updateBufferValues())).object; + this._register(observeDevicePixelDimensions(this.canvas, getActiveWindow(), (w, h) => { + this._device.queue.writeBuffer(layoutInfoUniformBuffer, 0, updateBufferValues(w, h)); + })); + } + + let atlasInfoUniformBuffer: GPUBuffer; + { + const enum Info { + FloatsPerEntry = 2, + BytesPerEntry = Info.FloatsPerEntry * 4, + Offset_Width_ = 0, + Offset_Height = 1, + } + atlasInfoUniformBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco atlas info uniform buffer', + size: Info.BytesPerEntry, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }, () => { + const values = new Float32Array(Info.FloatsPerEntry); + values[Info.Offset_Width_] = atlas.pageSize; + values[Info.Offset_Height] = atlas.pageSize; + return values; + })).object; + } + + // #endregion Uniforms + + // #region Storage buffers + + this._renderStrategy = this._register(this._instantiationService.createInstance(FullFileRenderStrategy, this._context, this._device, this.canvas, atlas)); + + this._glyphStorageBuffer[0] = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco glyph storage buffer', + size: GlyphStorageBufferInfo.BytesPerEntry * TextureAtlasPage.maximumGlyphCount, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, + })).object; + this._glyphStorageBuffer[1] = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco glyph storage buffer', + size: GlyphStorageBufferInfo.BytesPerEntry * TextureAtlasPage.maximumGlyphCount, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, + })).object; + this._atlasGpuTextureVersions[0] = 0; + this._atlasGpuTextureVersions[1] = 0; + this._atlasGpuTexture = this._register(GPULifecycle.createTexture(this._device, { + label: 'Monaco atlas texture', + format: 'rgba8unorm', + // TODO: Dynamically grow/shrink layer count + size: { width: atlas.pageSize, height: atlas.pageSize, depthOrArrayLayers: 2 }, + dimension: '2d', + usage: GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.COPY_DST | + GPUTextureUsage.RENDER_ATTACHMENT, + })).object; + + this._updateAtlasStorageBufferAndTexture(); + + // #endregion Storage buffers + + // #region Vertex buffer + + this._vertexBuffer = this._register(GPULifecycle.createBuffer(this._device, { + label: 'Monaco vertex buffer', + size: quadVertices.byteLength, + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST, + }, quadVertices)).object; + + // #endregion Vertex buffer + + // #region Shader module + + const module = this._device.createShaderModule({ + label: 'Monaco shader module', + code: this._renderStrategy.wgsl, + }); + + // #endregion Shader module + + // #region Pipeline + + this._pipeline = this._device.createRenderPipeline({ + label: 'Monaco render pipeline', + layout: 'auto', + vertex: { + module, + buffers: [ + { + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, // 2 floats, 4 bytes each + attributes: [ + { shaderLocation: 0, offset: 0, format: 'float32x2' }, // position + ], + } + ] + }, + fragment: { + module, + targets: [ + { + format: presentationFormat, + blend: { + color: { + srcFactor: 'src-alpha', + dstFactor: 'one-minus-src-alpha' + }, + alpha: { + srcFactor: 'src-alpha', + dstFactor: 'one-minus-src-alpha' + }, + }, + } + ], + }, + }); + + // #endregion Pipeline + + // #region Bind group + + this._bindGroup = this._device.createBindGroup({ + label: 'Monaco bind group', + layout: this._pipeline.getBindGroupLayout(0), + entries: [ + // TODO: Pass in generically as array? + { binding: BindingId.GlyphInfo0, resource: { buffer: this._glyphStorageBuffer[0] } }, + { binding: BindingId.GlyphInfo1, resource: { buffer: this._glyphStorageBuffer[1] } }, + { + binding: BindingId.TextureSampler, resource: this._device.createSampler({ + label: 'Monaco atlas sampler', + magFilter: 'nearest', + minFilter: 'nearest', + }) + }, + { binding: BindingId.Texture, resource: this._atlasGpuTexture.createView() }, + { binding: BindingId.LayoutInfoUniform, resource: { buffer: layoutInfoUniformBuffer } }, + { binding: BindingId.AtlasDimensionsUniform, resource: { buffer: atlasInfoUniformBuffer } }, + ...this._renderStrategy.bindGroupEntries + ], + }); + + // endregion Bind group + + this._initialized = true; + } + + private _updateAtlasStorageBufferAndTexture() { + for (const [layerIndex, page] of ViewGpuContext.atlas.pages.entries()) { + // Skip the update if it's already the latest version + if (page.version === this._atlasGpuTextureVersions[layerIndex]) { + continue; + } + + this._logService.trace('Updating atlas page[', layerIndex, '] from version ', this._atlasGpuTextureVersions[layerIndex], ' to version ', page.version); + + // TODO: Reuse buffer instead of reconstructing each time + // TODO: Dynamically set buffer size + const values = new Float32Array(GlyphStorageBufferInfo.FloatsPerEntry * TextureAtlasPage.maximumGlyphCount); + let entryOffset = 0; + for (const glyph of page.glyphs) { + values[entryOffset + GlyphStorageBufferInfo.Offset_TexturePosition] = glyph.x; + values[entryOffset + GlyphStorageBufferInfo.Offset_TexturePosition + 1] = glyph.y; + values[entryOffset + GlyphStorageBufferInfo.Offset_TextureSize] = glyph.w; + values[entryOffset + GlyphStorageBufferInfo.Offset_TextureSize + 1] = glyph.h; + values[entryOffset + GlyphStorageBufferInfo.Offset_OriginPosition] = glyph.originOffsetX; + values[entryOffset + GlyphStorageBufferInfo.Offset_OriginPosition + 1] = glyph.originOffsetY; + entryOffset += GlyphStorageBufferInfo.FloatsPerEntry; + } + if (entryOffset / GlyphStorageBufferInfo.FloatsPerEntry > TextureAtlasPage.maximumGlyphCount) { + throw new Error(`Attempting to write more glyphs (${entryOffset / GlyphStorageBufferInfo.FloatsPerEntry}) than the GPUBuffer can hold (${TextureAtlasPage.maximumGlyphCount})`); + } + this._device.queue.writeBuffer(this._glyphStorageBuffer[layerIndex], 0, values); + if (page.usedArea.right - page.usedArea.left > 0 && page.usedArea.bottom - page.usedArea.top > 0) { + this._device.queue.copyExternalImageToTexture( + { source: page.source }, + { + texture: this._atlasGpuTexture, + origin: { + x: page.usedArea.left, + y: page.usedArea.top, + z: layerIndex + } + }, + { + width: page.usedArea.right - page.usedArea.left, + height: page.usedArea.bottom - page.usedArea.top + }, + ); + } + this._atlasGpuTextureVersions[layerIndex] = page.version; + } + } + + public static canRender(options: ViewLineOptions, viewportData: ViewportData, lineNumber: number): boolean { + const d = viewportData.getViewLineRenderingData(lineNumber); + // TODO + return d.content.indexOf('e') !== -1; + } + + public prepareRender(ctx: RenderingContext): void { + throw new BugIndicatingError('Should not be called'); + } + + public override render(ctx: RestrictedRenderingContext): void { + throw new BugIndicatingError('Should not be called'); + } + + override onLinesChanged(e: ViewLinesChangedEvent): boolean { + return true; + } + + override onScrollChanged(e: ViewScrollChangedEvent): boolean { + return true; + } + + // subscribe to more events + + public renderText(viewportData: ViewportData): void { + if (this._initialized) { + return this._renderText(viewportData); + } + } + + private _renderText(viewportData: ViewportData): void { + this._viewGpuContext.rectangleRenderer.draw(viewportData); + + const options = new ViewLineOptions(this._context.configuration, this._context.theme.type); + + const visibleObjectCount = this._renderStrategy.update(viewportData, options); + + this._updateAtlasStorageBufferAndTexture(); + + const encoder = this._device.createCommandEncoder({ label: 'Monaco command encoder' }); + + this._renderPassColorAttachment.view = this._viewGpuContext.ctx.getCurrentTexture().createView({ label: 'Monaco canvas texture view' }); + const pass = encoder.beginRenderPass(this._renderPassDescriptor); + pass.setPipeline(this._pipeline); + pass.setVertexBuffer(0, this._vertexBuffer); + + pass.setBindGroup(0, this._bindGroup); + + if (this._renderStrategy?.draw) { + // TODO: Don't draw lines if ViewLinesGpu.canRender is false + this._renderStrategy.draw(pass, viewportData); + } else { + pass.draw(quadVertices.length / 2, visibleObjectCount); + } + + pass.end(); + + const commandBuffer = encoder.finish(); + + this._device.queue.submit([commandBuffer]); + + this._lastViewportData = viewportData; + this._lastViewLineOptions = options; + } + + linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[] | null { + return null; + } + + private _visibleRangesForLineRange(lineNumber: number, startColumn: number, endColumn: number): VisibleRanges | null { + if (this.shouldRender()) { + // Cannot read from the DOM because it is dirty + // i.e. the model & the dom are out of sync, so I'd be reading something stale + return null; + } + + const viewportData = this._lastViewportData; + const viewLineOptions = this._lastViewLineOptions; + + if (!viewportData || !viewLineOptions || lineNumber < viewportData.startLineNumber || lineNumber > viewportData.endLineNumber) { + return null; + } + + // Visible horizontal range in _scaled_ pixels + const result = new VisibleRanges(false, [new FloatHorizontalRange( + (startColumn - 1) * viewLineOptions.spaceWidth, + (endColumn - startColumn - 1) * viewLineOptions.spaceWidth) + ]); + + return result; + } + + visibleRangeForPosition(position: Position): HorizontalPosition | null { + const visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column); + if (!visibleRanges) { + return null; + } + return new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left); + } +} diff --git a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts index a99dac77c..4b94e5660 100644 --- a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts +++ b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { IViewZone, IViewZoneChangeAccessor } from 'vs/editor/browser/editorBrowser'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; -import { Position } from 'vs/editor/common/core/position'; -import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { IEditorWhitespace, IViewWhitespaceViewportData, IWhitespaceChangeAccessor } from 'vs/editor/common/viewModel'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { FastDomNode, createFastDomNode } from '../../../../base/browser/fastDomNode.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { IViewZone, IViewZoneChangeAccessor } from '../../editorBrowser.js'; +import { ViewPart } from '../../view/viewPart.js'; +import { Position } from '../../../common/core/position.js'; +import { RenderingContext, RestrictedRenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { IEditorWhitespace, IViewWhitespaceViewportData, IWhitespaceChangeAccessor } from '../../../common/viewModel.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; interface IMyViewZone { whitespaceId: string; @@ -32,6 +32,11 @@ interface IComputedViewZoneProps { const invalidFunc = () => { throw new Error(`Invalid change accessor`); }; +/** + * A view zone is a rectangle that is a section that is inserted into the editor + * lines that can be used for various purposes such as showing a diffs, peeking + * an implementation, etc. + */ export class ViewZones extends ViewPart { private _zones: { [id: string]: IMyViewZone }; diff --git a/src/vs/editor/browser/viewParts/whitespace/whitespace.ts b/src/vs/editor/browser/viewParts/whitespace/whitespace.ts index 3bd29fc5e..56cc4692d 100644 --- a/src/vs/editor/browser/viewParts/whitespace/whitespace.ts +++ b/src/vs/editor/browser/viewParts/whitespace/whitespace.ts @@ -3,21 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./whitespace'; -import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { Selection } from 'vs/editor/common/core/selection'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewLineData } from 'vs/editor/common/viewModel'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import * as strings from 'vs/base/common/strings'; -import { CharCode } from 'vs/base/common/charCode'; -import { LineRange } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { Position } from 'vs/editor/common/core/position'; -import { editorWhitespaces } from 'vs/editor/common/core/editorColorRegistry'; - +import './whitespace.css'; +import { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js'; +import { Selection } from '../../../common/core/selection.js'; +import { RenderingContext } from '../../view/renderingContext.js'; +import { ViewContext } from '../../../common/viewModel/viewContext.js'; +import * as viewEvents from '../../../common/viewEvents.js'; +import { ViewLineData } from '../../../common/viewModel.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorConfiguration } from '../../../common/config/editorConfiguration.js'; +import * as strings from '../../../../base/common/strings.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { LineRange } from '../../../common/viewLayout/viewLineRenderer.js'; +import { Position } from '../../../common/core/position.js'; +import { editorWhitespaces } from '../../../common/core/editorColorRegistry.js'; + +/** + * The whitespace overlay will visual certain whitespace depending on the + * current editor configuration (boundary, selection, etc.). + */ export class WhitespaceOverlay extends DynamicViewOverlay { private readonly _context: ViewContext; diff --git a/src/vs/editor/browser/widget/codeEditor/codeEditorContributions.ts b/src/vs/editor/browser/widget/codeEditor/codeEditorContributions.ts index 840bcc4f5..107fa4092 100644 --- a/src/vs/editor/browser/widget/codeEditor/codeEditorContributions.ts +++ b/src/vs/editor/browser/widget/codeEditor/codeEditorContributions.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getWindow, runWhenWindowIdle } from 'vs/base/browser/dom'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable, DisposableMap, IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { getWindow, runWhenWindowIdle } from '../../../../base/browser/dom.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Disposable, DisposableMap, IDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../editorBrowser.js'; +import { EditorContributionInstantiation, IEditorContributionDescription } from '../../editorExtensions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; export class CodeEditorContributions extends Disposable { diff --git a/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts index 660e00eea..59f027dd4 100644 --- a/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts @@ -3,63 +3,63 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/editor/browser/services/markerDecorations'; -import * as dom from 'vs/base/browser/dom'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { Color } from 'vs/base/common/color'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, EmitterOptions, Event, EventDeliveryQueue, createEventDeliveryQueue } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { Disposable, DisposableStore, IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import 'vs/css!./editor'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { EditorConfiguration, IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { TabFocus } from 'vs/editor/browser/config/tabFocus'; -import * as editorBrowser from 'vs/editor/browser/editorBrowser'; -import { EditorExtensionsRegistry, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IContentWidgetData, IGlyphMarginWidgetData, IOverlayWidgetData, View } from 'vs/editor/browser/view'; -import { DOMLineBreaksComputerFactory } from 'vs/editor/browser/view/domLineBreaksComputer'; -import { ICommandDelegate } from 'vs/editor/browser/view/viewController'; -import { ViewUserInputEvents } from 'vs/editor/browser/view/viewUserInputEvents'; -import { CodeEditorContributions } from 'vs/editor/browser/widget/codeEditor/codeEditorContributions'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { ConfigurationChangedEvent, EditorLayoutInfo, EditorOption, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, filterValidationDecorations } from 'vs/editor/common/config/editorOptions'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { editorUnnecessaryCodeOpacity } from 'vs/editor/common/core/editorColorRegistry'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { WordOperations } from 'vs/editor/common/cursor/cursorWordOperations'; -import { CursorChangeReason, ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { InternalEditorAction } from 'vs/editor/common/editorAction'; -import * as editorCommon from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { EndOfLinePreference, IAttachedView, ICursorStateComputer, IIdentifiedSingleEditOperation, IModelDecoration, IModelDecorationOptions, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; -import { ClassName } from 'vs/editor/common/model/intervalTree'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { VerticalRevealType } from 'vs/editor/common/viewEvents'; -import { IEditorWhitespace, IViewModel } from 'vs/editor/common/viewModel'; -import { MonospaceLineBreaksComputerFactory } from 'vs/editor/common/viewModel/monospaceLineBreaksComputer'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { OutgoingViewModelEventKind } from 'vs/editor/common/viewModelEventDispatcher'; -import * as nls from 'vs/nls'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyValue, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { editorErrorForeground, editorHintForeground, editorInfoForeground, editorWarningForeground } from 'vs/platform/theme/common/colorRegistry'; -import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { MenuId } from 'vs/platform/actions/common/actions'; +import '../../services/markerDecorations.js'; +import * as dom from '../../../../base/browser/dom.js'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { IMouseWheelEvent } from '../../../../base/browser/mouseEvent.js'; +import { Color } from '../../../../base/common/color.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, EmitterOptions, Event, EventDeliveryQueue, createEventDeliveryQueue } from '../../../../base/common/event.js'; +import { hash } from '../../../../base/common/hash.js'; +import { Disposable, DisposableStore, IDisposable, dispose } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import './editor.css'; +import { applyFontInfo } from '../../config/domFontInfo.js'; +import { EditorConfiguration, IEditorConstructionOptions } from '../../config/editorConfiguration.js'; +import { TabFocus } from '../../config/tabFocus.js'; +import * as editorBrowser from '../../editorBrowser.js'; +import { EditorExtensionsRegistry, IEditorContributionDescription } from '../../editorExtensions.js'; +import { ICodeEditorService } from '../../services/codeEditorService.js'; +import { IContentWidgetData, IGlyphMarginWidgetData, IOverlayWidgetData, View } from '../../view.js'; +import { DOMLineBreaksComputerFactory } from '../../view/domLineBreaksComputer.js'; +import { ICommandDelegate } from '../../view/viewController.js'; +import { ViewUserInputEvents } from '../../view/viewUserInputEvents.js'; +import { CodeEditorContributions } from './codeEditorContributions.js'; +import { IEditorConfiguration } from '../../../common/config/editorConfiguration.js'; +import { ConfigurationChangedEvent, EditorLayoutInfo, EditorOption, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, filterValidationDecorations } from '../../../common/config/editorOptions.js'; +import { CursorColumns } from '../../../common/core/cursorColumns.js'; +import { IDimension } from '../../../common/core/dimension.js'; +import { editorUnnecessaryCodeOpacity } from '../../../common/core/editorColorRegistry.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ISelection, Selection } from '../../../common/core/selection.js'; +import { IWordAtPosition } from '../../../common/core/wordHelper.js'; +import { WordOperations } from '../../../common/cursor/cursorWordOperations.js'; +import { CursorChangeReason, ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from '../../../common/cursorEvents.js'; +import { InternalEditorAction } from '../../../common/editorAction.js'; +import * as editorCommon from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { EndOfLinePreference, IAttachedView, ICursorStateComputer, IIdentifiedSingleEditOperation, IModelDecoration, IModelDecorationOptions, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel } from '../../../common/model.js'; +import { ClassName } from '../../../common/model/intervalTree.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from '../../../common/textModelEvents.js'; +import { VerticalRevealType } from '../../../common/viewEvents.js'; +import { IEditorWhitespace, IViewModel } from '../../../common/viewModel.js'; +import { MonospaceLineBreaksComputerFactory } from '../../../common/viewModel/monospaceLineBreaksComputer.js'; +import { ViewModel } from '../../../common/viewModel/viewModelImpl.js'; +import { OutgoingViewModelEventKind } from '../../../common/viewModelEventDispatcher.js'; +import * as nls from '../../../../nls.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyValue, IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js'; +import { editorErrorForeground, editorHintForeground, editorInfoForeground, editorWarningForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { IThemeService, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeEditor { @@ -188,6 +188,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private _updateCounter = 0; + private readonly _onWillTriggerEditorOperationEvent: Emitter = this._register(new Emitter()); + public readonly onWillTriggerEditorOperationEvent: Event = this._onWillTriggerEditorOperationEvent.event; + private readonly _onBeginUpdate: Emitter = this._register(new Emitter()); public readonly onBeginUpdate: Event = this._onBeginUpdate.event; @@ -581,8 +584,8 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE return CodeEditorWidget._getVerticalOffsetAfterPosition(this._modelData, lineNumber, maxCol, includeViewZones); } - public setHiddenAreas(ranges: IRange[], source?: unknown): void { - this._modelData?.viewModel.setHiddenAreas(ranges.map(r => Range.lift(r)), source); + public setHiddenAreas(ranges: IRange[], source?: unknown, forceUpdate?: boolean): void { + this._modelData?.viewModel.setHiddenAreas(ranges.map(r => Range.lift(r)), source, forceUpdate); } public getVisibleColumnFromPosition(rawPosition: IPosition): number { @@ -1047,6 +1050,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE payload = payload || {}; try { + this._onWillTriggerEditorOperationEvent.fire({ source: source, handlerId: handlerId, payload: payload }); this._beginUpdate(); switch (handlerId) { diff --git a/src/vs/editor/browser/widget/codeEditor/editor.css b/src/vs/editor/browser/widget/codeEditor/editor.css index a6d82d584..d33122122 100644 --- a/src/vs/editor/browser/widget/codeEditor/editor.css +++ b/src/vs/editor/browser/widget/codeEditor/editor.css @@ -45,6 +45,14 @@ border-style: dotted; } +.monaco-editor .editorCanvas { + position: absolute; + width: 100%; + height: 100%; + z-index: 0; + pointer-events: none; +} + /* -------------------- Misc -------------------- */ .monaco-editor .overflow-guard { diff --git a/src/vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget.ts index 9fb3a8e69..b716aa611 100644 --- a/src/vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as objects from 'vs/base/common/objects'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { ConfigurationChangedEvent, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; +import * as objects from '../../../../base/common/objects.js'; +import { ICodeEditor } from '../../editorBrowser.js'; +import { ICodeEditorService } from '../../services/codeEditorService.js'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from './codeEditorWidget.js'; +import { ConfigurationChangedEvent, IEditorOptions } from '../../../common/config/editorOptions.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; export class EmbeddedCodeEditorWidget extends CodeEditorWidget { private readonly _parentEditor: ICodeEditor; diff --git a/src/vs/editor/browser/widget/diffEditor/commands.ts b/src/vs/editor/browser/widget/diffEditor/commands.ts index cdfff8f57..9e04b2aad 100644 --- a/src/vs/editor/browser/widget/diffEditor/commands.ts +++ b/src/vs/editor/browser/widget/diffEditor/commands.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getActiveElement } from 'vs/base/browser/dom'; -import { Codicon } from 'vs/base/common/codicons'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction2, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { localize2 } from 'vs/nls'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { Action2, MenuId } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import './registrations.contribution'; -import { DiffEditorSelectionHunkToolbarContext } from 'vs/editor/browser/widget/diffEditor/features/gutterFeature'; -import { URI } from 'vs/base/common/uri'; +import { getActiveElement } from '../../../../base/browser/dom.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor, IDiffEditor } from '../../editorBrowser.js'; +import { EditorAction2, ServicesAccessor } from '../../editorExtensions.js'; +import { ICodeEditorService } from '../../services/codeEditorService.js'; +import { DiffEditorWidget } from './diffEditorWidget.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { localize2 } from '../../../../nls.js'; +import { ILocalizedString } from '../../../../platform/action/common/action.js'; +import { Action2, MenuId } from '../../../../platform/actions/common/actions.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import './registrations.contribution.js'; +import { DiffEditorSelectionHunkToolbarContext } from './features/gutterFeature.js'; +import { URI } from '../../../../base/common/uri.js'; export class ToggleCollapseUnchangedRegions extends Action2 { constructor() { diff --git a/src/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.ts b/src/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.ts index 3c27606e5..a5add0402 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.ts @@ -3,37 +3,37 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener, addStandardDisposableListener, reset } from 'vs/base/browser/dom'; -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { Action } from 'vs/base/common/actions'; -import { forEachAdjacent, groupAdjacentBy } from 'vs/base/common/arrays'; -import { Codicon } from 'vs/base/common/codicons'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ITransaction, autorun, autorunWithStore, derived, derivedWithStore, observableValue, subtransaction, transaction } from 'vs/base/common/observable'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { applyStyle } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { DetailedLineRangeMapping, LineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ITextModel, TextModelResolvedOptions } from 'vs/editor/common/model'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { RenderLineInput, renderViewLine2 } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { ViewLineRenderingData } from 'vs/editor/common/viewModel'; -import { localize } from 'vs/nls'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import 'vs/css!./accessibleDiffViewer'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; +import { addDisposableListener, addStandardDisposableListener, reset } from '../../../../../base/browser/dom.js'; +import { createTrustedTypesPolicy } from '../../../../../base/browser/trustedTypes.js'; +import { ActionBar } from '../../../../../base/browser/ui/actionbar/actionbar.js'; +import { DomScrollableElement } from '../../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { Action } from '../../../../../base/common/actions.js'; +import { forEachAdjacent, groupAdjacentBy } from '../../../../../base/common/arrays.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; +import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, ITransaction, autorun, autorunWithStore, derived, derivedWithStore, observableValue, subtransaction, transaction } from '../../../../../base/common/observable.js'; +import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { applyFontInfo } from '../../../config/domFontInfo.js'; +import { applyStyle } from '../utils.js'; +import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../common/core/lineRange.js'; +import { OffsetRange } from '../../../../common/core/offsetRange.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { DetailedLineRangeMapping, LineRangeMapping } from '../../../../common/diff/rangeMapping.js'; +import { ILanguageIdCodec } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ITextModel, TextModelResolvedOptions } from '../../../../common/model.js'; +import { LineTokens } from '../../../../common/tokens/lineTokens.js'; +import { RenderLineInput, renderViewLine2 } from '../../../../common/viewLayout/viewLineRenderer.js'; +import { ViewLineRenderingData } from '../../../../common/viewModel.js'; +import { localize } from '../../../../../nls.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { registerIcon } from '../../../../../platform/theme/common/iconRegistry.js'; +import './accessibleDiffViewer.css'; +import { DiffEditorEditors } from './diffEditorEditors.js'; const accessibleDiffViewerInsertIcon = registerIcon('diff-review-insert', Codicon.add, localize('accessibleDiffViewerInsertIcon', 'Icon for \'Insert\' in accessible diff viewer.')); const accessibleDiffViewerRemoveIcon = registerIcon('diff-review-remove', Codicon.remove, localize('accessibleDiffViewerRemoveIcon', 'Icon for \'Remove\' in accessible diff viewer.')); diff --git a/src/vs/editor/browser/widget/diffEditor/components/diffEditorDecorations.ts b/src/vs/editor/browser/widget/diffEditor/components/diffEditorDecorations.ts index efbbe00f6..609dd70fc 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/diffEditorDecorations.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/diffEditorDecorations.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IObservable, derived } from 'vs/base/common/observable'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { allowsTrueInlineDiffRendering } from 'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones'; -import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorOptions'; -import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { MovedBlocksLinesFeature } from 'vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature'; -import { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackground, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackground, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from 'vs/editor/browser/widget/diffEditor/registrations.contribution'; -import { applyObservableDecorations } from 'vs/editor/browser/widget/diffEditor/utils'; -import { IModelDeltaDecoration } from 'vs/editor/common/model'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, derived } from '../../../../../base/common/observable.js'; +import { DiffEditorEditors } from './diffEditorEditors.js'; +import { allowsTrueInlineDiffRendering } from './diffEditorViewZones/diffEditorViewZones.js'; +import { DiffEditorOptions } from '../diffEditorOptions.js'; +import { DiffEditorViewModel } from '../diffEditorViewModel.js'; +import { DiffEditorWidget } from '../diffEditorWidget.js'; +import { MovedBlocksLinesFeature } from '../features/movedBlocksLinesFeature.js'; +import { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackground, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackground, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from '../registrations.contribution.js'; +import { applyObservableDecorations } from '../utils.js'; +import { IModelDeltaDecoration } from '../../../../common/model.js'; export class DiffEditorDecorations extends Disposable { constructor( diff --git a/src/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.ts b/src/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.ts index ee7935fd5..5d8f652a4 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IReader, autorunHandleChanges, derived, derivedOpts, observableFromEvent } from 'vs/base/common/observable'; -import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { IDiffCodeEditorWidgetOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { OverviewRulerFeature } from 'vs/editor/browser/widget/diffEditor/features/overviewRulerFeature'; -import { EditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { IContentSizeChangedEvent } from 'vs/editor/common/editorCommon'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { DiffEditorOptions } from '../diffEditorOptions'; +import { Emitter } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IReader, autorunHandleChanges, derived, derivedOpts, observableFromEvent } from '../../../../../base/common/observable.js'; +import { IEditorConstructionOptions } from '../../../config/editorConfiguration.js'; +import { IDiffEditorConstructionOptions } from '../../../editorBrowser.js'; +import { observableCodeEditor } from '../../../observableCodeEditor.js'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../../codeEditor/codeEditorWidget.js'; +import { IDiffCodeEditorWidgetOptions } from '../diffEditorWidget.js'; +import { OverviewRulerFeature } from '../features/overviewRulerFeature.js'; +import { EditorOptions, IEditorOptions } from '../../../../common/config/editorOptions.js'; +import { Position } from '../../../../common/core/position.js'; +import { IContentSizeChangedEvent } from '../../../../common/editorCommon.js'; +import { localize } from '../../../../../nls.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { DiffEditorOptions } from '../diffEditorOptions.js'; export class DiffEditorEditors extends Disposable { public readonly original = this._register(this._createLeftHandSideEditor(this._options.editorOptions.get(), this._argCodeEditorWidgetOptions.originalEditor || {})); diff --git a/src/vs/editor/browser/widget/diffEditor/components/diffEditorSash.ts b/src/vs/editor/browser/widget/diffEditor/components/diffEditorSash.ts index 3361129a0..8abaddcce 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/diffEditorSash.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/diffEditorSash.ts @@ -3,11 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IBoundarySashes, ISashEvent, Orientation, Sash, SashState } from 'vs/base/browser/ui/sash/sash'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IObservable, IReader, ISettableObservable, autorun, observableValue } from 'vs/base/common/observable'; -import { DiffEditorOptions } from '../diffEditorOptions'; -import { derivedWithSetter } from 'vs/base/common/observableInternal/derived'; +import { IBoundarySashes, ISashEvent, Orientation, Sash, SashState } from '../../../../../base/browser/ui/sash/sash.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, IReader, ISettableObservable, autorun, derivedWithSetter, observableValue } from '../../../../../base/common/observable.js'; +import { DiffEditorOptions } from '../diffEditorOptions.js'; export class SashLayout { public readonly sashLeft = derivedWithSetter(this, reader => { diff --git a/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.ts b/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.ts index 3b1b222de..58e3c5118 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, addDisposableListener } from 'vs/base/browser/dom'; -import { ArrayQueue } from 'vs/base/common/arrays'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, derived, derivedWithStore, observableFromEvent, observableValue } from 'vs/base/common/observable'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { assertIsDefined } from 'vs/base/common/types'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { diffDeleteDecoration, diffRemoveIcon } from 'vs/editor/browser/widget/diffEditor/registrations.contribution'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { DiffEditorViewModel, DiffMapping } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { InlineDiffDeletedCodeMargin } from 'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin'; -import { LineSource, RenderOptions, renderLines } from 'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines'; -import { IObservableViewZone, animatedObservable, joinCombine } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { Position } from 'vs/editor/common/core/position'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { BackgroundTokenizationState } from 'vs/editor/common/tokenizationTextModelPart'; -import { InlineDecoration, InlineDecorationType } from 'vs/editor/common/viewModel'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { DiffEditorOptions } from '../../diffEditorOptions'; -import { Range } from 'vs/editor/common/core/range'; +import { $, addDisposableListener } from '../../../../../../base/browser/dom.js'; +import { ArrayQueue } from '../../../../../../base/common/arrays.js'; +import { RunOnceScheduler } from '../../../../../../base/common/async.js'; +import { Codicon } from '../../../../../../base/common/codicons.js'; +import { Disposable, DisposableStore } from '../../../../../../base/common/lifecycle.js'; +import { IObservable, autorun, derived, derivedWithStore, observableFromEvent, observableValue } from '../../../../../../base/common/observable.js'; +import { ThemeIcon } from '../../../../../../base/common/themables.js'; +import { assertIsDefined } from '../../../../../../base/common/types.js'; +import { applyFontInfo } from '../../../../config/domFontInfo.js'; +import { CodeEditorWidget } from '../../../codeEditor/codeEditorWidget.js'; +import { diffDeleteDecoration, diffRemoveIcon } from '../../registrations.contribution.js'; +import { DiffEditorEditors } from '../diffEditorEditors.js'; +import { DiffEditorViewModel, DiffMapping } from '../../diffEditorViewModel.js'; +import { DiffEditorWidget } from '../../diffEditorWidget.js'; +import { InlineDiffDeletedCodeMargin } from './inlineDiffDeletedCodeMargin.js'; +import { LineSource, RenderOptions, renderLines } from './renderLines.js'; +import { IObservableViewZone, animatedObservable, joinCombine } from '../../utils.js'; +import { EditorOption } from '../../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../../common/core/lineRange.js'; +import { Position } from '../../../../../common/core/position.js'; +import { DetailedLineRangeMapping } from '../../../../../common/diff/rangeMapping.js'; +import { ScrollType } from '../../../../../common/editorCommon.js'; +import { BackgroundTokenizationState } from '../../../../../common/tokenizationTextModelPart.js'; +import { InlineDecoration, InlineDecorationType } from '../../../../../common/viewModel.js'; +import { IClipboardService } from '../../../../../../platform/clipboard/common/clipboardService.js'; +import { IContextMenuService } from '../../../../../../platform/contextview/browser/contextView.js'; +import { DiffEditorOptions } from '../../diffEditorOptions.js'; +import { Range } from '../../../../../common/core/range.js'; /** * Ensures both editors have the same height by aligning unchanged lines. diff --git a/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.ts b/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.ts index f6d88c3af..fa63055ff 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addStandardDisposableListener, getDomNodePagePosition } from 'vs/base/browser/dom'; -import { Action } from 'vs/base/common/actions'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isIOS } from 'vs/base/common/platform'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; -import { localize } from 'vs/nls'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { addStandardDisposableListener, getDomNodePagePosition } from '../../../../../../base/browser/dom.js'; +import { Action } from '../../../../../../base/common/actions.js'; +import { Codicon } from '../../../../../../base/common/codicons.js'; +import { Disposable } from '../../../../../../base/common/lifecycle.js'; +import { isIOS } from '../../../../../../base/common/platform.js'; +import { ThemeIcon } from '../../../../../../base/common/themables.js'; +import { IEditorMouseEvent, MouseTargetType } from '../../../../editorBrowser.js'; +import { CodeEditorWidget } from '../../../codeEditor/codeEditorWidget.js'; +import { DiffEditorWidget } from '../../diffEditorWidget.js'; +import { EditorOption } from '../../../../../common/config/editorOptions.js'; +import { DetailedLineRangeMapping } from '../../../../../common/diff/rangeMapping.js'; +import { EndOfLineSequence, ITextModel } from '../../../../../common/model.js'; +import { localize } from '../../../../../../nls.js'; +import { IClipboardService } from '../../../../../../platform/clipboard/common/clipboardService.js'; +import { IContextMenuService } from '../../../../../../platform/contextview/browser/contextView.js'; export class InlineDiffDeletedCodeMargin extends Disposable { private readonly _diffActions: HTMLElement; diff --git a/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.ts b/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.ts index f9d8b3f9a..fc20d63c8 100644 --- a/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.ts +++ b/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorFontLigatures, EditorOption, FindComputedEditorOptionValueById } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { InlineDecoration, ViewLineRenderingData } from 'vs/editor/common/viewModel'; +import { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js'; +import { applyFontInfo } from '../../../../config/domFontInfo.js'; +import { ICodeEditor } from '../../../../editorBrowser.js'; +import { EditorFontLigatures, EditorOption, FindComputedEditorOptionValueById } from '../../../../../common/config/editorOptions.js'; +import { FontInfo } from '../../../../../common/config/fontInfo.js'; +import { StringBuilder } from '../../../../../common/core/stringBuilder.js'; +import { ModelLineProjectionData } from '../../../../../common/modelLineProjectionData.js'; +import { IViewLineTokens, LineTokens } from '../../../../../common/tokens/lineTokens.js'; +import { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js'; +import { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js'; +import { InlineDecoration, ViewLineRenderingData } from '../../../../../common/viewModel.js'; const ttPolicy = createTrustedTypesPolicy('diffEditorWidget', { createHTML: value => value }); diff --git a/src/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.ts b/src/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.ts index 96a85f35e..056db97f6 100644 --- a/src/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.ts +++ b/src/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IDiffEditorViewModel, IEditor, IEditorAction, IEditorDecorationsCollection, IEditorModel, IEditorViewState, ScrollType } from 'vs/editor/common/editorCommon'; -import { IModelDecorationsChangeAccessor, IModelDeltaDecoration } from 'vs/editor/common/model'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { CodeEditorWidget } from '../codeEditor/codeEditorWidget.js'; +import { IEditorOptions } from '../../../common/config/editorOptions.js'; +import { IDimension } from '../../../common/core/dimension.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ISelection, Selection } from '../../../common/core/selection.js'; +import { IDiffEditorViewModel, IEditor, IEditorAction, IEditorDecorationsCollection, IEditorModel, IEditorViewState, ScrollType } from '../../../common/editorCommon.js'; +import { IModelDecorationsChangeAccessor, IModelDeltaDecoration } from '../../../common/model.js'; export abstract class DelegatingEditor extends Disposable implements IEditor { private static idCounter = 0; diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts b/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts index 75017bce4..d264028a7 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { AccessibleDiffViewerNext, AccessibleDiffViewerPrev, CollapseAllUnchangedRegions, ExitCompareMove, RevertHunkOrSelection, ShowAllUnchangedRegions, SwitchSide, ToggleCollapseUnchangedRegions, ToggleShowMovedCodeBlocks, ToggleUseInlineViewWhenSpaceIsLimited } from 'vs/editor/browser/widget/diffEditor/commands'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { localize } from 'vs/nls'; -import { MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ContextKeyEqualsExpr, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import './registrations.contribution'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { AccessibleDiffViewerNext, AccessibleDiffViewerPrev, CollapseAllUnchangedRegions, ExitCompareMove, RevertHunkOrSelection, ShowAllUnchangedRegions, SwitchSide, ToggleCollapseUnchangedRegions, ToggleShowMovedCodeBlocks, ToggleUseInlineViewWhenSpaceIsLimited } from './commands.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { localize } from '../../../../nls.js'; +import { MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyEqualsExpr, ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import './registrations.contribution.js'; registerAction2(ToggleCollapseUnchangedRegions); registerAction2(ToggleShowMovedCodeBlocks); diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditorOptions.ts b/src/vs/editor/browser/widget/diffEditor/diffEditorOptions.ts index ea3506b74..0c1a53368 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditorOptions.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditorOptions.ts @@ -3,15 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IObservable, ISettableObservable, derived, observableFromEvent, observableValue } from 'vs/base/common/observable'; -import { derivedConstOnceDefined } from 'vs/base/common/observableInternal/utils'; -import { Constants } from 'vs/base/common/uint'; -import { allowsTrueInlineDiffRendering } from 'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones'; -import { DiffEditorViewModel, DiffState } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { diffEditorDefaultOptions } from 'vs/editor/common/config/diffEditor'; -import { IDiffEditorBaseOptions, IDiffEditorOptions, IEditorOptions, ValidDiffEditorBaseOptions, clampedFloat, clampedInt, boolean as validateBooleanOption, stringSet as validateStringSetOption } from 'vs/editor/common/config/editorOptions'; -import { LineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; +import { IObservable, ISettableObservable, derived, derivedConstOnceDefined, observableFromEvent, observableValue } from '../../../../base/common/observable.js'; +import { Constants } from '../../../../base/common/uint.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { diffEditorDefaultOptions } from '../../../common/config/diffEditor.js'; +import { IDiffEditorBaseOptions, IDiffEditorOptions, IEditorOptions, ValidDiffEditorBaseOptions, clampedFloat, clampedInt, boolean as validateBooleanOption, stringSet as validateStringSetOption } from '../../../common/config/editorOptions.js'; +import { LineRangeMapping } from '../../../common/diff/rangeMapping.js'; +import { allowsTrueInlineDiffRendering } from './components/diffEditorViewZones/diffEditorViewZones.js'; +import { DiffEditorViewModel, DiffState } from './diffEditorViewModel.js'; export class DiffEditorOptions { private readonly _options: ISettableObservable, { changedOptions: IDiffEditorOptions }>; diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts b/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts index 557b75758..25a79288c 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, IReader, ISettableObservable, ITransaction, autorun, autorunWithStore, derived, observableSignal, observableSignalFromEvent, observableValue, transaction, waitForState } from 'vs/base/common/observable'; -import { IDiffProviderFactoryService } from 'vs/editor/browser/widget/diffEditor/diffProviderFactoryService'; -import { filterWithPrevious } from 'vs/editor/browser/widget/diffEditor/utils'; -import { readHotReloadableExport } from 'vs/base/common/hotReloadHelpers'; -import { ISerializedLineRange, LineRange, LineRangeSet } from 'vs/editor/common/core/lineRange'; -import { DefaultLinesDiffComputer } from 'vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer'; -import { IDocumentDiff } from 'vs/editor/common/diff/documentDiffProvider'; -import { MovedText } from 'vs/editor/common/diff/linesDiffComputer'; -import { DetailedLineRangeMapping, LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { IDiffEditorModel, IDiffEditorViewModel } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { TextEditInfo } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper'; -import { combineTextEditInfos } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos'; -import { DiffEditorOptions } from './diffEditorOptions'; -import { optimizeSequenceDiffs } from 'vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations'; -import { isDefined } from 'vs/base/common/types'; -import { groupAdjacentBy } from 'vs/base/common/arrays'; -import { softAssert } from 'vs/base/common/assert'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Disposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, IReader, ISettableObservable, ITransaction, autorun, autorunWithStore, derived, observableSignal, observableSignalFromEvent, observableValue, transaction, waitForState } from '../../../../base/common/observable.js'; +import { IDiffProviderFactoryService } from './diffProviderFactoryService.js'; +import { filterWithPrevious } from './utils.js'; +import { readHotReloadableExport } from '../../../../base/common/hotReloadHelpers.js'; +import { ISerializedLineRange, LineRange, LineRangeSet } from '../../../common/core/lineRange.js'; +import { DefaultLinesDiffComputer } from '../../../common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js'; +import { IDocumentDiff } from '../../../common/diff/documentDiffProvider.js'; +import { MovedText } from '../../../common/diff/linesDiffComputer.js'; +import { DetailedLineRangeMapping, LineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js'; +import { IDiffEditorModel, IDiffEditorViewModel } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { TextEditInfo } from '../../../common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.js'; +import { combineTextEditInfos } from '../../../common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.js'; +import { DiffEditorOptions } from './diffEditorOptions.js'; +import { optimizeSequenceDiffs } from '../../../common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.js'; +import { isDefined } from '../../../../base/common/types.js'; +import { groupAdjacentBy } from '../../../../base/common/arrays.js'; +import { softAssert } from '../../../../base/common/assert.js'; export class DiffEditorViewModel extends Disposable implements IDiffEditorViewModel { private readonly _isDiffUpToDate = observableValue(this, false); diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts index e22b0291d..da2e28f1c 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts @@ -2,52 +2,51 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getWindow, h } from 'vs/base/browser/dom'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { findLast } from 'vs/base/common/arraysFind'; -import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ITransaction, autorun, autorunWithStore, derived, disposableObservableValue, observableFromEvent, observableValue, recomputeInitiallyAndOnChange, subtransaction, transaction } from 'vs/base/common/observable'; -import { derivedDisposable } from 'vs/base/common/observableInternal/derived'; -import 'vs/css!./style'; -import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { ICodeEditor, IDiffEditor, IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; -import { EditorExtensionsRegistry, IDiffEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { AccessibleDiffViewer, AccessibleDiffViewerModelFromEditors } from 'vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer'; -import { DiffEditorDecorations } from 'vs/editor/browser/widget/diffEditor/components/diffEditorDecorations'; -import { DiffEditorSash, SashLayout } from 'vs/editor/browser/widget/diffEditor/components/diffEditorSash'; -import { DiffEditorViewZones } from 'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones'; -import { DiffEditorGutter } from 'vs/editor/browser/widget/diffEditor/features/gutterFeature'; -import { HideUnchangedRegionsFeature } from 'vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature'; -import { MovedBlocksLinesFeature } from 'vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature'; -import { OverviewRulerFeature } from 'vs/editor/browser/widget/diffEditor/features/overviewRulerFeature'; -import { RevertButtonsFeature } from 'vs/editor/browser/widget/diffEditor/features/revertButtonsFeature'; -import { CSSStyle, ObservableElementSizeObserver, RefCounted, applyStyle, applyViewZones, translatePosition } from 'vs/editor/browser/widget/diffEditor/utils'; -import { readHotReloadableExport } from 'vs/base/common/hotReloadHelpers'; -import { bindContextKey } from 'vs/platform/observable/common/platformObservableUtils'; -import { IDiffEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IDiffComputationResult, ILineChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { EditorType, IDiffEditorModel, IDiffEditorViewModel, IDiffEditorViewState } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IIdentifiedSingleEditOperation } from 'vs/editor/common/model'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { DiffEditorEditors } from './components/diffEditorEditors'; -import { DelegatingEditor } from './delegatingEditorImpl'; -import { DiffEditorOptions } from './diffEditorOptions'; -import { DiffEditorViewModel, DiffMapping, DiffState } from './diffEditorViewModel'; +import { getWindow, h } from '../../../../base/browser/dom.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; +import { findLast } from '../../../../base/common/arraysFind.js'; +import { BugIndicatingError, onUnexpectedError } from '../../../../base/common/errors.js'; +import { Event } from '../../../../base/common/event.js'; +import { readHotReloadableExport } from '../../../../base/common/hotReloadHelpers.js'; +import { toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, ITransaction, autorun, autorunWithStore, derived, derivedDisposable, disposableObservableValue, observableFromEvent, observableValue, recomputeInitiallyAndOnChange, subtransaction, transaction } from '../../../../base/common/observable.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { bindContextKey } from '../../../../platform/observable/common/platformObservableUtils.js'; +import { IEditorProgressService } from '../../../../platform/progress/common/progress.js'; +import { IDiffEditorOptions } from '../../../common/config/editorOptions.js'; +import { IDimension } from '../../../common/core/dimension.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { CursorChangeReason, ICursorPositionChangedEvent } from '../../../common/cursorEvents.js'; +import { IDiffComputationResult, ILineChange } from '../../../common/diff/legacyLinesDiffComputer.js'; +import { LineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js'; +import { EditorType, IDiffEditorModel, IDiffEditorViewModel, IDiffEditorViewState } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { IIdentifiedSingleEditOperation } from '../../../common/model.js'; +import { IEditorConstructionOptions } from '../../config/editorConfiguration.js'; +import { ICodeEditor, IDiffEditor, IDiffEditorConstructionOptions } from '../../editorBrowser.js'; +import { EditorExtensionsRegistry, IDiffEditorContributionDescription } from '../../editorExtensions.js'; +import { ICodeEditorService } from '../../services/codeEditorService.js'; +import { StableEditorScrollState } from '../../stableEditorScroll.js'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../codeEditor/codeEditorWidget.js'; +import { AccessibleDiffViewer, AccessibleDiffViewerModelFromEditors } from './components/accessibleDiffViewer.js'; +import { DiffEditorDecorations } from './components/diffEditorDecorations.js'; +import { DiffEditorEditors } from './components/diffEditorEditors.js'; +import { DiffEditorSash, SashLayout } from './components/diffEditorSash.js'; +import { DiffEditorViewZones } from './components/diffEditorViewZones/diffEditorViewZones.js'; +import { DelegatingEditor } from './delegatingEditorImpl.js'; +import { DiffEditorOptions } from './diffEditorOptions.js'; +import { DiffEditorViewModel, DiffMapping, DiffState } from './diffEditorViewModel.js'; +import { DiffEditorGutter } from './features/gutterFeature.js'; +import { HideUnchangedRegionsFeature } from './features/hideUnchangedRegionsFeature.js'; +import { MovedBlocksLinesFeature } from './features/movedBlocksLinesFeature.js'; +import { OverviewRulerFeature } from './features/overviewRulerFeature.js'; +import { RevertButtonsFeature } from './features/revertButtonsFeature.js'; +import './style.css'; +import { CSSStyle, ObservableElementSizeObserver, RefCounted, applyStyle, applyViewZones, translatePosition } from './utils.js'; export interface IDiffCodeEditorWidgetOptions { originalEditor?: ICodeEditorWidgetOptions; diff --git a/src/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.ts b/src/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.ts index 19cee5997..ab087b4ff 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { IDocumentDiff, IDocumentDiffProvider, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { DetailedLineRangeMapping, RangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { ITextModel } from 'vs/editor/common/model'; -import { DiffAlgorithmName, IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { IInstantiationService, createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { LineRange } from '../../../common/core/lineRange.js'; +import { IDocumentDiff, IDocumentDiffProvider, IDocumentDiffProviderOptions } from '../../../common/diff/documentDiffProvider.js'; +import { DetailedLineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js'; +import { ITextModel } from '../../../common/model.js'; +import { DiffAlgorithmName, IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; export const IDiffProviderFactoryService = createDecorator('diffProviderFactoryService'); diff --git a/src/vs/editor/browser/widget/diffEditor/embeddedDiffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditor/embeddedDiffEditorWidget.ts index 9156c17ea..ce41de7bc 100644 --- a/src/vs/editor/browser/widget/diffEditor/embeddedDiffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditor/embeddedDiffEditorWidget.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as objects from 'vs/base/common/objects'; -import { ICodeEditor, IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { DiffEditorWidget, IDiffCodeEditorWidgetOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { ConfigurationChangedEvent, IDiffEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; +import * as objects from '../../../../base/common/objects.js'; +import { ICodeEditor, IDiffEditorConstructionOptions } from '../../editorBrowser.js'; +import { ICodeEditorService } from '../../services/codeEditorService.js'; +import { DiffEditorWidget, IDiffCodeEditorWidgetOptions } from './diffEditorWidget.js'; +import { ConfigurationChangedEvent, IDiffEditorOptions, IEditorOptions } from '../../../common/config/editorOptions.js'; +import { IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IEditorProgressService } from '../../../../platform/progress/common/progress.js'; export class EmbeddedDiffEditorWidget extends DiffEditorWidget { private readonly _parentEditor: ICodeEditor; diff --git a/src/vs/editor/browser/widget/diffEditor/features/gutterFeature.ts b/src/vs/editor/browser/widget/diffEditor/features/gutterFeature.ts index 010fba5ec..556378aeb 100644 --- a/src/vs/editor/browser/widget/diffEditor/features/gutterFeature.ts +++ b/src/vs/editor/browser/widget/diffEditor/features/gutterFeature.ts @@ -3,34 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EventType, addDisposableListener, h } from 'vs/base/browser/dom'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; -import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, autorunWithStore, derived, observableFromEvent, observableValue } from 'vs/base/common/observable'; -import { derivedDisposable, derivedWithSetter } from 'vs/base/common/observableInternal/derived'; -import { URI } from 'vs/base/common/uri'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { DiffEditorSash, SashLayout } from 'vs/editor/browser/widget/diffEditor/components/diffEditorSash'; -import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorOptions'; -import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { appendRemoveOnDispose, applyStyle, prependRemoveOnDispose } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorGutter, IGutterItemInfo, IGutterItemView } from 'vs/editor/browser/widget/diffEditor/utils/editorGutter'; -import { ActionRunnerWithContext } from 'vs/editor/browser/widget/multiDiffEditor/utils'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { LineRange, LineRangeSet } from 'vs/editor/common/core/lineRange'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Range } from 'vs/editor/common/core/range'; -import { TextEdit } from 'vs/editor/common/core/textEdit'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { TextModelText } from 'vs/editor/common/model/textModelText'; -import { HiddenItemStrategy, MenuWorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { WorkbenchHoverDelegate } from 'vs/platform/hover/browser/hover'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { EventType, addDisposableListener, h } from '../../../../../base/browser/dom.js'; +import { IMouseWheelEvent } from '../../../../../base/browser/mouseEvent.js'; +import { ActionsOrientation } from '../../../../../base/browser/ui/actionbar/actionbar.js'; +import { HoverPosition } from '../../../../../base/browser/ui/hover/hoverWidget.js'; +import { IBoundarySashes } from '../../../../../base/browser/ui/sash/sash.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, autorun, autorunWithStore, derived, derivedDisposable, derivedWithSetter, observableFromEvent, observableValue } from '../../../../../base/common/observable.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { HiddenItemStrategy, MenuWorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js'; +import { IMenuService, MenuId } from '../../../../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { WorkbenchHoverDelegate } from '../../../../../platform/hover/browser/hover.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { LineRange, LineRangeSet } from '../../../../common/core/lineRange.js'; +import { OffsetRange } from '../../../../common/core/offsetRange.js'; +import { Range } from '../../../../common/core/range.js'; +import { TextEdit } from '../../../../common/core/textEdit.js'; +import { DetailedLineRangeMapping } from '../../../../common/diff/rangeMapping.js'; +import { TextModelText } from '../../../../common/model/textModelText.js'; +import { ActionRunnerWithContext } from '../../multiDiffEditor/utils.js'; +import { DiffEditorEditors } from '../components/diffEditorEditors.js'; +import { DiffEditorSash, SashLayout } from '../components/diffEditorSash.js'; +import { DiffEditorOptions } from '../diffEditorOptions.js'; +import { DiffEditorViewModel } from '../diffEditorViewModel.js'; +import { appendRemoveOnDispose, applyStyle, prependRemoveOnDispose } from '../utils.js'; +import { EditorGutter, IGutterItemInfo, IGutterItemView } from '../utils/editorGutter.js'; const emptyArr: never[] = []; const width = 35; @@ -81,40 +80,42 @@ export class DiffEditorGutter extends Disposable { ); }).recomputeInitiallyAndOnChange(this._store); - this._register(new EditorGutter(this._editors.modified, this.elements.root, { - getIntersectingGutterItems: (range, reader) => { - const model = this._diffModel.read(reader); - if (!model) { - return []; - } - const diffs = model.diff.read(reader); - if (!diffs) { return []; } - - const selection = this._selectedDiffs.read(reader); - if (selection.length > 0) { - const m = DetailedLineRangeMapping.fromRangeMappings(selection.flatMap(s => s.rangeMappings)); - return [ - new DiffGutterItem( - m, - true, - MenuId.DiffEditorSelectionToolbar, - undefined, - model.model.original.uri, - model.model.modified.uri, - )]; - } + const gutterItems = derived(this, reader => { + const model = this._diffModel.read(reader); + if (!model) { + return []; + } + const diffs = model.diff.read(reader); + if (!diffs) { return []; } + + const selection = this._selectedDiffs.read(reader); + if (selection.length > 0) { + const m = DetailedLineRangeMapping.fromRangeMappings(selection.flatMap(s => s.rangeMappings)); + return [ + new DiffGutterItem( + m, + true, + MenuId.DiffEditorSelectionToolbar, + undefined, + model.model.original.uri, + model.model.modified.uri, + )]; + } - const currentDiff = this._currentDiff.read(reader); + const currentDiff = this._currentDiff.read(reader); - return diffs.mappings.map(m => new DiffGutterItem( - m.lineRangeMapping.withInnerChangesFromLineRanges(), - m.lineRangeMapping === currentDiff?.lineRangeMapping, - MenuId.DiffEditorHunkToolbar, - undefined, - model.model.original.uri, - model.model.modified.uri, - )); - }, + return diffs.mappings.map(m => new DiffGutterItem( + m.lineRangeMapping.withInnerChangesFromLineRanges(), + m.lineRangeMapping === currentDiff?.lineRangeMapping, + MenuId.DiffEditorHunkToolbar, + undefined, + model.model.original.uri, + model.model.modified.uri, + )); + }); + + this._register(new EditorGutter(this._editors.modified, this.elements.root, { + getIntersectingGutterItems: (range, reader) => gutterItems.read(reader), createView: (item, target) => { return this._instantiationService.createInstance(DiffToolBar, item, target, this); }, diff --git a/src/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.ts b/src/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.ts index 336bdb430..e87fe47e0 100644 --- a/src/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.ts +++ b/src/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.ts @@ -3,30 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, addDisposableListener, getWindow, h, reset } from 'vs/base/browser/dom'; -import { renderIcon, renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; -import { Codicon } from 'vs/base/common/codicons'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, IReader, autorun, derived, derivedWithStore, observableValue, transaction } from 'vs/base/common/observable'; -import { derivedDisposable } from 'vs/base/common/observableInternal/derived'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { isDefined } from 'vs/base/common/types'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorOptions'; -import { DiffEditorViewModel, RevealPreference, UnchangedRegion } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { IObservableViewZone, PlaceholderViewZone, ViewZoneOverlayWidget, applyObservableDecorations, applyStyle } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { SymbolKind, SymbolKinds } from 'vs/editor/common/languages'; -import { IModelDecorationOptions, IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { $, addDisposableListener, getWindow, h, reset } from '../../../../../base/browser/dom.js'; +import { renderIcon, renderLabelWithIcons } from '../../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; +import { MarkdownString } from '../../../../../base/common/htmlContent.js'; +import { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, IReader, autorun, derived, derivedDisposable, derivedWithStore, observableValue, transaction } from '../../../../../base/common/observable.js'; +import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { isDefined } from '../../../../../base/common/types.js'; +import { localize } from '../../../../../nls.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../common/core/lineRange.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { CursorChangeReason } from '../../../../common/cursorEvents.js'; +import { SymbolKind, SymbolKinds } from '../../../../common/languages.js'; +import { IModelDecorationOptions, IModelDeltaDecoration, ITextModel } from '../../../../common/model.js'; +import { ICodeEditor } from '../../../editorBrowser.js'; +import { observableCodeEditor } from '../../../observableCodeEditor.js'; +import { DiffEditorEditors } from '../components/diffEditorEditors.js'; +import { DiffEditorOptions } from '../diffEditorOptions.js'; +import { DiffEditorViewModel, RevealPreference, UnchangedRegion } from '../diffEditorViewModel.js'; +import { IObservableViewZone, PlaceholderViewZone, ViewZoneOverlayWidget, applyObservableDecorations, applyStyle } from '../utils.js'; /** * Make sure to add the view zones to the editor! diff --git a/src/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.ts b/src/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.ts index afb29693f..a06947da0 100644 --- a/src/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.ts +++ b/src/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { h } from 'vs/base/browser/dom'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Action } from 'vs/base/common/actions'; -import { booleanComparator, compareBy, numberComparator, tieBreakComparators } from 'vs/base/common/arrays'; -import { findMaxIdx } from 'vs/base/common/arraysFind'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, autorunHandleChanges, autorunWithStore, constObservable, derived, derivedWithStore, observableFromEvent, observableSignalFromEvent, observableValue, recomputeInitiallyAndOnChange } from 'vs/base/common/observable'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { PlaceholderViewZone, ViewZoneOverlayWidget, applyStyle, applyViewZones } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorLayoutInfo } from 'vs/editor/common/config/editorOptions'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { OffsetRange, OffsetRangeSet } from 'vs/editor/common/core/offsetRange'; -import { MovedText } from 'vs/editor/common/diff/linesDiffComputer'; -import { localize } from 'vs/nls'; +import { h } from '../../../../../base/browser/dom.js'; +import { ActionBar } from '../../../../../base/browser/ui/actionbar/actionbar.js'; +import { Action } from '../../../../../base/common/actions.js'; +import { booleanComparator, compareBy, numberComparator, tieBreakComparators } from '../../../../../base/common/arrays.js'; +import { findMaxIdx } from '../../../../../base/common/arraysFind.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; +import { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, autorun, autorunHandleChanges, autorunWithStore, constObservable, derived, derivedWithStore, observableFromEvent, observableSignalFromEvent, observableValue, recomputeInitiallyAndOnChange } from '../../../../../base/common/observable.js'; +import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { ICodeEditor } from '../../../editorBrowser.js'; +import { DiffEditorEditors } from '../components/diffEditorEditors.js'; +import { DiffEditorViewModel } from '../diffEditorViewModel.js'; +import { PlaceholderViewZone, ViewZoneOverlayWidget, applyStyle, applyViewZones } from '../utils.js'; +import { EditorLayoutInfo } from '../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../common/core/lineRange.js'; +import { OffsetRange, OffsetRangeSet } from '../../../../common/core/offsetRange.js'; +import { MovedText } from '../../../../common/diff/linesDiffComputer.js'; +import { localize } from '../../../../../nls.js'; export class MovedBlocksLinesFeature extends Disposable { public static readonly movedCodeBlockPadding = 4; diff --git a/src/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.ts b/src/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.ts index 017d8268f..1db18e147 100644 --- a/src/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.ts +++ b/src/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EventType, addDisposableListener, addStandardDisposableListener, h } from 'vs/base/browser/dom'; -import { createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { ScrollbarState } from 'vs/base/browser/ui/scrollbar/scrollbarState'; -import { Color } from 'vs/base/common/color'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, autorunWithStore, derived, observableFromEvent, observableSignalFromEvent } from 'vs/base/common/observable'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { appendRemoveOnDispose } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorLayoutInfo, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { Position } from 'vs/editor/common/core/position'; -import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager'; -import { defaultInsertColor, defaultRemoveColor, diffInserted, diffOverviewRulerInserted, diffOverviewRulerRemoved, diffRemoved } from 'vs/platform/theme/common/colorRegistry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { EventType, addDisposableListener, addStandardDisposableListener, h } from '../../../../../base/browser/dom.js'; +import { createFastDomNode } from '../../../../../base/browser/fastDomNode.js'; +import { IMouseWheelEvent } from '../../../../../base/browser/mouseEvent.js'; +import { ScrollbarState } from '../../../../../base/browser/ui/scrollbar/scrollbarState.js'; +import { Color } from '../../../../../base/common/color.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, autorun, autorunWithStore, derived, observableFromEvent, observableSignalFromEvent } from '../../../../../base/common/observable.js'; +import { CodeEditorWidget } from '../../codeEditor/codeEditorWidget.js'; +import { DiffEditorEditors } from '../components/diffEditorEditors.js'; +import { DiffEditorViewModel } from '../diffEditorViewModel.js'; +import { appendRemoveOnDispose } from '../utils.js'; +import { EditorLayoutInfo, EditorOption } from '../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../common/core/lineRange.js'; +import { Position } from '../../../../common/core/position.js'; +import { OverviewRulerZone } from '../../../../common/viewModel/overviewZoneManager.js'; +import { defaultInsertColor, defaultRemoveColor, diffInserted, diffOverviewRulerInserted, diffOverviewRulerRemoved, diffRemoved } from '../../../../../platform/theme/common/colorRegistry.js'; +import { IThemeService } from '../../../../../platform/theme/common/themeService.js'; export class OverviewRulerFeature extends Disposable { private static readonly ONE_OVERVIEW_WIDTH = 15; diff --git a/src/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.ts b/src/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.ts index b2a7d3823..2d94b6e06 100644 --- a/src/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.ts +++ b/src/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener, h, EventType } from 'vs/base/browser/dom'; -import { renderIcon } from 'vs/base/browser/ui/iconLabel/iconLabels'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorunWithStore, derived } from 'vs/base/common/observable'; -import { IGlyphMarginWidget, IGlyphMarginWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditor/components/diffEditorEditors'; -import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorOptions'; -import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { LineRange, LineRangeSet } from 'vs/editor/common/core/lineRange'; -import { Range } from 'vs/editor/common/core/range'; -import { LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { GlyphMarginLane } from 'vs/editor/common/model'; -import { localize } from 'vs/nls'; +import { addDisposableListener, h, EventType } from '../../../../../base/browser/dom.js'; +import { renderIcon } from '../../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; +import { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, autorunWithStore, derived } from '../../../../../base/common/observable.js'; +import { IGlyphMarginWidget, IGlyphMarginWidgetPosition } from '../../../editorBrowser.js'; +import { DiffEditorEditors } from '../components/diffEditorEditors.js'; +import { DiffEditorOptions } from '../diffEditorOptions.js'; +import { DiffEditorViewModel } from '../diffEditorViewModel.js'; +import { DiffEditorWidget } from '../diffEditorWidget.js'; +import { LineRange, LineRangeSet } from '../../../../common/core/lineRange.js'; +import { Range } from '../../../../common/core/range.js'; +import { LineRangeMapping, RangeMapping } from '../../../../common/diff/rangeMapping.js'; +import { GlyphMarginLane } from '../../../../common/model.js'; +import { localize } from '../../../../../nls.js'; const emptyArr: never[] = []; diff --git a/src/vs/editor/browser/widget/diffEditor/registrations.contribution.ts b/src/vs/editor/browser/widget/diffEditor/registrations.contribution.ts index 80b553bcb..2194ddadb 100644 --- a/src/vs/editor/browser/widget/diffEditor/registrations.contribution.ts +++ b/src/vs/editor/browser/widget/diffEditor/registrations.contribution.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { localize } from 'vs/nls'; -import { registerColor } from 'vs/platform/theme/common/colorRegistry'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { localize } from '../../../../nls.js'; +import { registerColor } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; export const diffMoveBorder = registerColor( 'diffEditor.move.border', diff --git a/src/vs/editor/browser/widget/diffEditor/utils.ts b/src/vs/editor/browser/widget/diffEditor/utils.ts index ed24ac504..b69c5ff8f 100644 --- a/src/vs/editor/browser/widget/diffEditor/utils.ts +++ b/src/vs/editor/browser/widget/diffEditor/utils.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDimension } from 'vs/base/browser/dom'; -import { findLast } from 'vs/base/common/arraysFind'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Disposable, DisposableStore, IDisposable, IReference, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ISettableObservable, autorun, autorunHandleChanges, autorunOpts, autorunWithStore, observableValue, transaction } from 'vs/base/common/observable'; -import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver'; -import { ICodeEditor, IOverlayWidget, IViewZone } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { IModelDeltaDecoration } from 'vs/editor/common/model'; -import { TextLength } from 'vs/editor/common/core/textLength'; +import { IDimension } from '../../../../base/browser/dom.js'; +import { findLast } from '../../../../base/common/arraysFind.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Disposable, DisposableStore, IDisposable, IReference, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, ISettableObservable, autorun, autorunHandleChanges, autorunOpts, autorunWithStore, observableValue, transaction } from '../../../../base/common/observable.js'; +import { ElementSizeObserver } from '../../config/elementSizeObserver.js'; +import { ICodeEditor, IOverlayWidget, IViewZone } from '../../editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { DetailedLineRangeMapping } from '../../../common/diff/rangeMapping.js'; +import { IModelDeltaDecoration } from '../../../common/model.js'; +import { TextLength } from '../../../common/core/textLength.js'; export function joinCombine(arr1: readonly T[], arr2: readonly T[], keySelector: (val: T) => number, combine: (v1: T, v2: T) => T): readonly T[] { if (arr1.length === 0) { diff --git a/src/vs/editor/browser/widget/diffEditor/utils/editorGutter.ts b/src/vs/editor/browser/widget/diffEditor/utils/editorGutter.ts index 3d76c01e2..bc149ec17 100644 --- a/src/vs/editor/browser/widget/diffEditor/utils/editorGutter.ts +++ b/src/vs/editor/browser/widget/diffEditor/utils/editorGutter.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { h, reset } from 'vs/base/browser/dom'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { autorun, IObservable, IReader, ISettableObservable, observableFromEvent, observableSignal, observableSignalFromEvent, observableValue, transaction } from 'vs/base/common/observable'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; +import { h, reset } from '../../../../../base/browser/dom.js'; +import { Disposable, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { autorun, IObservable, IReader, ISettableObservable, observableFromEvent, observableSignal, observableSignalFromEvent, observableValue, transaction } from '../../../../../base/common/observable.js'; +import { CodeEditorWidget } from '../../codeEditor/codeEditorWidget.js'; +import { LineRange } from '../../../../common/core/lineRange.js'; +import { OffsetRange } from '../../../../common/core/offsetRange.js'; export class EditorGutter extends Disposable { private readonly scrollTop = observableFromEvent(this, diff --git a/src/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer.ts b/src/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer.ts index bb27260aa..33d1adc99 100644 --- a/src/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer.ts +++ b/src/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MarkdownRenderOptions, MarkedOptions, renderMarkdown } from 'vs/base/browser/markdownRenderer'; -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { IMarkdownString, MarkdownStringTrustedOptions } from 'vs/base/common/htmlContent'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import 'vs/css!./renderedMarkdown'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { tokenizeToString } from 'vs/editor/common/languages/textToHtmlTokenizer'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { MarkdownRenderOptions, MarkedOptions, renderMarkdown } from '../../../../../base/browser/markdownRenderer.js'; +import { createTrustedTypesPolicy } from '../../../../../base/browser/trustedTypes.js'; +import { onUnexpectedError } from '../../../../../base/common/errors.js'; +import { Emitter } from '../../../../../base/common/event.js'; +import { IMarkdownString, MarkdownStringTrustedOptions } from '../../../../../base/common/htmlContent.js'; +import { DisposableStore, IDisposable } from '../../../../../base/common/lifecycle.js'; +import './renderedMarkdown.css'; +import { applyFontInfo } from '../../../config/domFontInfo.js'; +import { ICodeEditor } from '../../../editorBrowser.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../../common/languages/modesRegistry.js'; +import { tokenizeToString } from '../../../../common/languages/textToHtmlTokenizer.js'; +import { IOpenerService } from '../../../../../platform/opener/common/opener.js'; export interface IMarkdownRenderResult extends IDisposable { readonly element: HTMLElement; @@ -105,11 +105,15 @@ export class MarkdownRenderer { }, asyncRenderCallback: () => this._onDidRenderAsync.fire(), actionHandler: { - callback: (link) => openLinkFromMarkdown(this._openerService, link, markdown.isTrusted), + callback: (link) => this.openMarkdownLink(link, markdown), disposables: disposables } }; } + + protected async openMarkdownLink(link: string, markdown: IMarkdownString) { + await openLinkFromMarkdown(this._openerService, link, markdown.isTrusted); + } } export async function openLinkFromMarkdown(openerService: IOpenerService, link: string, isTrusted: boolean | MarkdownStringTrustedOptions | undefined): Promise { diff --git a/src/vs/editor/browser/widget/multiDiffEditor/colors.ts b/src/vs/editor/browser/widget/multiDiffEditor/colors.ts index c9e2cca5f..13652fd7f 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/colors.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/colors.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { registerColor, editorBackground } from 'vs/platform/theme/common/colorRegistry'; +import { localize } from '../../../../nls.js'; +import { registerColor, editorBackground } from '../../../../platform/theme/common/colorRegistry.js'; export const multiDiffEditorHeaderBackground = registerColor( 'multiDiffEditor.headerBackground', diff --git a/src/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.ts b/src/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.ts index d9b726079..48ac35815 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.ts @@ -2,26 +2,25 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { h } from 'vs/base/browser/dom'; -import { Button } from 'vs/base/browser/ui/button/button'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { autorun, derived } from 'vs/base/common/observable'; -import { globalTransaction, observableValue } from 'vs/base/common/observableInternal/base'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { DocumentDiffItemViewModel } from 'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel'; -import { IWorkbenchUIElementFactory } from 'vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory'; -import { IDiffEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { MenuWorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IObjectData, IPooledObject } from './objectPool'; -import { ActionRunnerWithContext } from './utils'; -import { IContextKeyService, type IScopedContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { h } from '../../../../base/browser/dom.js'; +import { Button } from '../../../../base/browser/ui/button/button.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { autorun, derived, globalTransaction, observableValue } from '../../../../base/common/observable.js'; +import { createActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { MenuWorkbenchToolBar } from '../../../../platform/actions/browser/toolbar.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { IContextKeyService, type IScopedContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { IDiffEditorOptions } from '../../../common/config/editorOptions.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { observableCodeEditor } from '../../observableCodeEditor.js'; +import { DiffEditorWidget } from '../diffEditor/diffEditorWidget.js'; +import { DocumentDiffItemViewModel } from './multiDiffEditorViewModel.js'; +import { IObjectData, IPooledObject } from './objectPool.js'; +import { ActionRunnerWithContext } from './utils.js'; +import { IWorkbenchUIElementFactory } from './workbenchUIElementFactory.js'; export class TemplateData implements IObjectData { constructor( diff --git a/src/vs/editor/browser/widget/multiDiffEditor/model.ts b/src/vs/editor/browser/widget/multiDiffEditor/model.ts index d3ee5972e..320773200 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/model.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/model.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event, IValueWithChangeEvent } from 'vs/base/common/event'; -import { RefCounted } from 'vs/editor/browser/widget/diffEditor/utils'; -import { IDiffEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { ITextModel } from 'vs/editor/common/model'; -import { ContextKeyValue } from 'vs/platform/contextkey/common/contextkey'; +import { Event, IValueWithChangeEvent } from '../../../../base/common/event.js'; +import { RefCounted } from '../diffEditor/utils.js'; +import { IDiffEditorOptions } from '../../../common/config/editorOptions.js'; +import { ITextModel } from '../../../common/model.js'; +import { ContextKeyValue } from '../../../../platform/contextkey/common/contextkey.js'; export interface IMultiDiffEditorModel { - readonly documents: IValueWithChangeEvent[]>; + readonly documents: IValueWithChangeEvent[] | 'loading'>; readonly contextKeys?: Record; } diff --git a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.ts b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.ts index 309246478..49c674d04 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.ts @@ -3,33 +3,41 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ITransaction, derived, observableValue, transaction } from 'vs/base/common/observable'; -import { constObservable, derivedObservableWithWritableCache, mapObservableArrayCached, observableFromValueWithChangeEvent } from 'vs/base/common/observableInternal/utils'; -import { URI } from 'vs/base/common/uri'; -import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditor/diffEditorOptions'; -import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { RefCounted } from 'vs/editor/browser/widget/diffEditor/utils'; -import { IDocumentDiffItem, IMultiDiffEditorModel } from 'vs/editor/browser/widget/multiDiffEditor/model'; -import { IDiffEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IDiffEditorViewModel } from 'vs/editor/common/editorCommon'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ContextKeyValue } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, ITransaction, constObservable, derived, derivedObservableWithWritableCache, mapObservableArrayCached, observableFromValueWithChangeEvent, observableValue, transaction } from '../../../../base/common/observable.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ContextKeyValue } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IDiffEditorOptions } from '../../../common/config/editorOptions.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IDiffEditorViewModel } from '../../../common/editorCommon.js'; +import { IModelService } from '../../../common/services/model.js'; +import { DiffEditorOptions } from '../diffEditor/diffEditorOptions.js'; +import { DiffEditorViewModel } from '../diffEditor/diffEditorViewModel.js'; +import { RefCounted } from '../diffEditor/utils.js'; +import { IDocumentDiffItem, IMultiDiffEditorModel } from './model.js'; export class MultiDiffEditorViewModel extends Disposable { - private readonly _documents: IObservable[]> = observableFromValueWithChangeEvent(this.model, this.model.documents); + private readonly _documents: IObservable[] | 'loading'> = observableFromValueWithChangeEvent(this.model, this.model.documents); + + private readonly _documentsArr = derived(this, reader => { + const result = this._documents.read(reader); + if (result === 'loading') { return []; } + return result; + }); + + public readonly isLoading = derived(this, reader => this._documents.read(reader) === 'loading'); public readonly items: IObservable = mapObservableArrayCached( this, - this._documents, + this._documentsArr, (d, store) => store.add(this._instantiationService.createInstance(DocumentDiffItemViewModel, d, this)) - ) - .recomputeInitiallyAndOnChange(this._store); + ).recomputeInitiallyAndOnChange(this._store); public readonly focusedDiffItem = derived(this, reader => this.items.read(reader).find(i => i.isFocused.read(reader))); - public readonly activeDiffItem = derivedObservableWithWritableCache(this, (reader, lastValue) => this.focusedDiffItem.read(reader) ?? lastValue); + public readonly activeDiffItem = derivedObservableWithWritableCache(this, + (reader, lastValue) => this.focusedDiffItem.read(reader) ?? (lastValue && this.items.read(reader).indexOf(lastValue) !== -1) ? lastValue : undefined + ); public async waitForDiffs(): Promise { for (const d of this.items.get()) { diff --git a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.ts b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.ts index 8275c4f73..d23ad8c87 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Dimension } from 'vs/base/browser/dom'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { derived, derivedWithStore, observableValue, recomputeInitiallyAndOnChange } from 'vs/base/common/observable'; -import { readHotReloadableExport } from 'vs/base/common/hotReloadHelpers'; -import { IDocumentDiffItem, IMultiDiffEditorModel } from 'vs/editor/browser/widget/multiDiffEditor/model'; -import { IMultiDiffEditorViewState, IMultiDiffResourceId, MultiDiffEditorWidgetImpl } from 'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl'; -import { MultiDiffEditorViewModel } from './multiDiffEditorViewModel'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import './colors'; -import { DiffEditorItemTemplate } from 'vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate'; -import { IWorkbenchUIElementFactory } from 'vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { IDiffEditor } from 'vs/editor/common/editorCommon'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { Range } from 'vs/editor/common/core/range'; +import { Dimension } from '../../../../base/browser/dom.js'; +import { Event } from '../../../../base/common/event.js'; +import { readHotReloadableExport } from '../../../../base/common/hotReloadHelpers.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { derived, derivedWithStore, observableValue, recomputeInitiallyAndOnChange } from '../../../../base/common/observable.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { Range } from '../../../common/core/range.js'; +import { IDiffEditor } from '../../../common/editorCommon.js'; +import { ICodeEditor } from '../../editorBrowser.js'; +import { DiffEditorWidget } from '../diffEditor/diffEditorWidget.js'; +import './colors.js'; +import { DiffEditorItemTemplate } from './diffEditorItemTemplate.js'; +import { IDocumentDiffItem, IMultiDiffEditorModel } from './model.js'; +import { MultiDiffEditorViewModel } from './multiDiffEditorViewModel.js'; +import { IMultiDiffEditorViewState, IMultiDiffResourceId, MultiDiffEditorWidgetImpl } from './multiDiffEditorWidgetImpl.js'; +import { IWorkbenchUIElementFactory } from './workbenchUIElementFactory.js'; export class MultiDiffEditorWidget extends Disposable { private readonly _dimension = observableValue(this, undefined); diff --git a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts index a8a2f96f7..ec0bf3cf6 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts @@ -3,35 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Dimension, getWindow, h, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; -import { SmoothScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { compareBy, numberComparator } from 'vs/base/common/arrays'; -import { findFirstMax } from 'vs/base/common/arraysFind'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { Disposable, IReference, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, IReader, autorun, autorunWithStore, derived, derivedWithStore, observableFromEvent, observableValue } from 'vs/base/common/observable'; -import { ITransaction, disposableObservableValue, globalTransaction, transaction } from 'vs/base/common/observableInternal/base'; -import { Scrollable, ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./style'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ObservableElementSizeObserver } from 'vs/editor/browser/widget/diffEditor/utils'; -import { RevealOptions } from 'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget'; -import { IWorkbenchUIElementFactory } from 'vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { IRange } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IDiffEditor } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ContextKeyValue, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { DiffEditorItemTemplate, TemplateData } from './diffEditorItemTemplate'; -import { DocumentDiffItemViewModel, MultiDiffEditorViewModel } from './multiDiffEditorViewModel'; -import { ObjectPool } from './objectPool'; -import { localize } from 'vs/nls'; -import { IDocumentDiffItem } from 'vs/editor/browser/widget/multiDiffEditor/model'; +import { Dimension, getWindow, h, scheduleAtNextAnimationFrame } from '../../../../base/browser/dom.js'; +import { SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { compareBy, numberComparator } from '../../../../base/common/arrays.js'; +import { findFirstMax } from '../../../../base/common/arraysFind.js'; +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { Disposable, IReference, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, IReader, ITransaction, autorun, autorunWithStore, derived, derivedWithStore, disposableObservableValue, globalTransaction, observableFromEvent, observableValue, transaction } from '../../../../base/common/observable.js'; +import { Scrollable, ScrollbarVisibility } from '../../../../base/common/scrollable.js'; +import { URI } from '../../../../base/common/uri.js'; +import { localize } from '../../../../nls.js'; +import { ContextKeyValue, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { IRange } from '../../../common/core/range.js'; +import { ISelection, Selection } from '../../../common/core/selection.js'; +import { IDiffEditor } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ICodeEditor } from '../../editorBrowser.js'; +import { ObservableElementSizeObserver } from '../diffEditor/utils.js'; +import { DiffEditorItemTemplate, TemplateData } from './diffEditorItemTemplate.js'; +import { IDocumentDiffItem } from './model.js'; +import { DocumentDiffItemViewModel, MultiDiffEditorViewModel } from './multiDiffEditorViewModel.js'; +import { RevealOptions } from './multiDiffEditorWidget.js'; +import { ObjectPool } from './objectPool.js'; +import './style.css'; +import { IWorkbenchUIElementFactory } from './workbenchUIElementFactory.js'; export class MultiDiffEditorWidgetImpl extends Disposable { private readonly _scrollableElements = h('div.scrollContent', [ @@ -58,7 +57,7 @@ export class MultiDiffEditorWidgetImpl extends Disposable { private readonly _elements = h('div.monaco-component.multiDiffEditor', {}, [ h('div', {}, [this._scrollableElement.getDomNode()]), - h('div.placeholder@placeholder', {}, [h('div', [localize('noChangedFiles', 'No Changed Files') as any])]), + h('div.placeholder@placeholder', {}, [h('div')]), ]); private readonly _sizeObserver = this._register(new ObservableElementSizeObserver(this._element, undefined)); @@ -129,8 +128,6 @@ export class MultiDiffEditorWidgetImpl extends Disposable { ) { super(); - this._contextKeyService.createKey(EditorContextKeys.inMultiDiffEditor.key, true); - this._register(autorunWithStore((reader, store) => { const viewModel = this._viewModel.read(reader); if (viewModel && viewModel.contextKeys) { @@ -157,10 +154,20 @@ export class MultiDiffEditorWidgetImpl extends Disposable { this._sizeObserver.observe(dimension); })); - this._register(autorun((reader) => { - /** @description Update widget dimension */ + const placeholderMessage = derived(reader => { const items = this._viewItems.read(reader); - this._elements.placeholder.classList.toggle('visible', items.length === 0); + if (items.length > 0) { return undefined; } + + const vm = this._viewModel.read(reader); + return (!vm || vm.isLoading.read(reader)) + ? localize('loading', 'Loading...') + : localize('noChangedFiles', 'No Changed Files'); + }); + + this._register(autorun((reader) => { + const message = placeholderMessage.read(reader); + this._elements.placeholder.innerText = message ?? ''; + this._elements.placeholder.classList.toggle('visible', !!message); })); this._scrollableElements.content.style.position = 'relative'; diff --git a/src/vs/editor/browser/widget/multiDiffEditor/objectPool.ts b/src/vs/editor/browser/widget/multiDiffEditor/objectPool.ts index e41019fdb..7bccd1cc5 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/objectPool.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/objectPool.ts @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable, IReference } from 'vs/base/common/lifecycle'; +import { IDisposable, IReference } from '../../../../base/common/lifecycle.js'; export class ObjectPool> implements IDisposable { private readonly _unused = new Set(); diff --git a/src/vs/editor/browser/widget/multiDiffEditor/utils.ts b/src/vs/editor/browser/widget/multiDiffEditor/utils.ts index be9240267..2806ae63c 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/utils.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/utils.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ActionRunner, IAction } from 'vs/base/common/actions'; +import { ActionRunner, IAction } from '../../../../base/common/actions.js'; export class ActionRunnerWithContext extends ActionRunner { constructor(private readonly _getContext: () => unknown) { diff --git a/src/vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory.ts b/src/vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory.ts index 80a018dea..2f09d92ba 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/workbenchUIElementFactory.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; /** * This solves the problem that the editor layer cannot depend on the workbench layer. diff --git a/src/vs/editor/common/commands/replaceCommand.ts b/src/vs/editor/common/commands/replaceCommand.ts index a3db197ae..f4beabe78 100644 --- a/src/vs/editor/common/commands/replaceCommand.ts +++ b/src/vs/editor/common/commands/replaceCommand.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Selection, SelectionDirection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../core/range.js'; +import { Selection, SelectionDirection } from '../core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../editorCommon.js'; +import { ITextModel } from '../model.js'; export class ReplaceCommand implements ICommand { diff --git a/src/vs/editor/common/commands/shiftCommand.ts b/src/vs/editor/common/commands/shiftCommand.ts index 3c0c9bea6..aa10151de 100644 --- a/src/vs/editor/common/commands/shiftCommand.ts +++ b/src/vs/editor/common/commands/shiftCommand.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection, SelectionDirection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { getEnterAction } from 'vs/editor/common/languages/enterAction'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { CursorColumns } from '../core/cursorColumns.js'; +import { Range } from '../core/range.js'; +import { Selection, SelectionDirection } from '../core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../editorCommon.js'; +import { ITextModel } from '../model.js'; +import { EditorAutoIndentStrategy } from '../config/editorOptions.js'; +import { getEnterAction } from '../languages/enterAction.js'; +import { ILanguageConfigurationService } from '../languages/languageConfigurationRegistry.js'; export interface IShiftCommandOpts { isUnshift: boolean; diff --git a/src/vs/editor/common/commands/surroundSelectionCommand.ts b/src/vs/editor/common/commands/surroundSelectionCommand.ts index ac170a7b6..58ba301fa 100644 --- a/src/vs/editor/common/commands/surroundSelectionCommand.ts +++ b/src/vs/editor/common/commands/surroundSelectionCommand.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../core/range.js'; +import { Position } from '../core/position.js'; +import { Selection } from '../core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../editorCommon.js'; +import { ITextModel } from '../model.js'; export class SurroundSelectionCommand implements ICommand { private readonly _range: Selection; diff --git a/src/vs/editor/common/commands/trimTrailingWhitespaceCommand.ts b/src/vs/editor/common/commands/trimTrailingWhitespaceCommand.ts index 343a5739f..23e3f6123 100644 --- a/src/vs/editor/common/commands/trimTrailingWhitespaceCommand.ts +++ b/src/vs/editor/common/commands/trimTrailingWhitespaceCommand.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ITextModel } from 'vs/editor/common/model'; +import * as strings from '../../../base/common/strings.js'; +import { EditOperation, ISingleEditOperation } from '../core/editOperation.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../editorCommon.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { ITextModel } from '../model.js'; export class TrimTrailingWhitespaceCommand implements ICommand { diff --git a/src/vs/editor/common/config/diffEditor.ts b/src/vs/editor/common/config/diffEditor.ts index ff97a530f..43529c5b1 100644 --- a/src/vs/editor/common/config/diffEditor.ts +++ b/src/vs/editor/common/config/diffEditor.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ValidDiffEditorBaseOptions } from 'vs/editor/common/config/editorOptions'; +import { ValidDiffEditorBaseOptions } from './editorOptions.js'; export const diffEditorDefaultOptions = { enableSplitViewResizing: true, diff --git a/src/vs/editor/common/config/editorConfiguration.ts b/src/vs/editor/common/config/editorConfiguration.ts index ccaa98425..08f45386a 100644 --- a/src/vs/editor/common/config/editorConfiguration.ts +++ b/src/vs/editor/common/config/editorConfiguration.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ConfigurationChangedEvent, IComputedEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { MenuId } from 'vs/platform/actions/common/actions'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { ConfigurationChangedEvent, IComputedEditorOptions, IEditorOptions } from './editorOptions.js'; +import { IDimension } from '../core/dimension.js'; +import { MenuId } from '../../../platform/actions/common/actions.js'; export interface IEditorConfiguration extends IDisposable { /** diff --git a/src/vs/editor/common/config/editorConfigurationSchema.ts b/src/vs/editor/common/config/editorConfigurationSchema.ts index ea51e8361..e89269b9f 100644 --- a/src/vs/editor/common/config/editorConfigurationSchema.ts +++ b/src/vs/editor/common/config/editorConfigurationSchema.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { diffEditorDefaultOptions } from 'vs/editor/common/config/diffEditor'; -import { editorOptionsRegistry } from 'vs/editor/common/config/editorOptions'; -import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/core/textModelDefaults'; -import * as nls from 'vs/nls'; -import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationPropertySchema, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { diffEditorDefaultOptions } from './diffEditor.js'; +import { editorOptionsRegistry } from './editorOptions.js'; +import { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js'; +import * as nls from '../../../nls.js'; +import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationPropertySchema, IConfigurationRegistry } from '../../../platform/configuration/common/configurationRegistry.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; export const editorConfigurationBaseNode = Object.freeze({ id: 'editor', diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index 0c099aa07..9c5f5a34d 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import * as objects from 'vs/base/common/objects'; -import * as platform from 'vs/base/common/platform'; -import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { Constants } from 'vs/base/common/uint'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/core/textModelDefaults'; -import { USUAL_WORD_SEPARATORS } from 'vs/editor/common/core/wordHelper'; -import * as nls from 'vs/nls'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { IConfigurationPropertySchema } from 'vs/platform/configuration/common/configurationRegistry'; +import * as arrays from '../../../base/common/arrays.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import * as objects from '../../../base/common/objects.js'; +import * as platform from '../../../base/common/platform.js'; +import { ScrollbarVisibility } from '../../../base/common/scrollable.js'; +import { Constants } from '../../../base/common/uint.js'; +import { FontInfo } from './fontInfo.js'; +import { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js'; +import { USUAL_WORD_SEPARATORS } from '../core/wordHelper.js'; +import * as nls from '../../../nls.js'; +import { AccessibilitySupport } from '../../../platform/accessibility/common/accessibility.js'; +import { IConfigurationPropertySchema } from '../../../platform/configuration/common/configurationRegistry.js'; //#region typed options @@ -634,6 +634,11 @@ export interface IEditorOptions { * Defaults to 'always'. */ matchBrackets?: 'never' | 'near' | 'always'; + /** + * Enable experimental rendering using WebGPU. + * Defaults to 'off'. + */ + experimentalGpuAcceleration?: 'on' | 'off'; /** * Enable experimental whitespace rendering. * Defaults to 'svg'. @@ -743,6 +748,11 @@ export interface IEditorOptions { */ dropIntoEditor?: IDropIntoEditorOptions; + /** + * Sets whether the new experimental edit context should be used instead of the text area. + */ + experimentalEditContextEnabled?: boolean; + /** * Controls support for changing how content is pasted into the editor. */ @@ -1477,7 +1487,10 @@ export const enum TextEditorCursorBlinkingStyle { Solid = 5 } -function _cursorBlinkingStyleFromString(cursorBlinkingStyle: 'blink' | 'smooth' | 'phase' | 'expand' | 'solid'): TextEditorCursorBlinkingStyle { +/** + * @internal + */ +export function cursorBlinkingStyleFromString(cursorBlinkingStyle: 'blink' | 'smooth' | 'phase' | 'expand' | 'solid'): TextEditorCursorBlinkingStyle { switch (cursorBlinkingStyle) { case 'blink': return TextEditorCursorBlinkingStyle.Blink; case 'smooth': return TextEditorCursorBlinkingStyle.Smooth; @@ -1535,7 +1548,10 @@ export function cursorStyleToString(cursorStyle: TextEditorCursorStyle): 'line' } } -function _cursorStyleFromString(cursorStyle: 'line' | 'block' | 'underline' | 'line-thin' | 'block-outline' | 'underline-thin'): TextEditorCursorStyle { +/** + * @internal + */ +export function cursorStyleFromString(cursorStyle: 'line' | 'block' | 'underline' | 'line-thin' | 'block-outline' | 'underline-thin'): TextEditorCursorStyle { switch (cursorStyle) { case 'line': return TextEditorCursorStyle.Line; case 'block': return TextEditorCursorStyle.Block; @@ -2938,6 +2954,12 @@ export interface IEditorInlayHintsOptions { * Defaults to false. */ padding?: boolean; + + /** + * Maximum length for inlay hints per line + * Set to 0 to have an unlimited length. + */ + maximumLength?: number; } /** @@ -2948,7 +2970,7 @@ export type EditorInlayHintsOptions = Readonly { constructor() { - const defaults: EditorInlayHintsOptions = { enabled: 'on', fontSize: 0, fontFamily: '', padding: false }; + const defaults: EditorInlayHintsOptions = { enabled: 'on', fontSize: 0, fontFamily: '', padding: false, maximumLength: 43 }; super( EditorOption.inlayHints, 'inlayHints', defaults, { @@ -2978,6 +3000,11 @@ class EditorInlayHints extends BaseEditorOption(input.enabled, this.defaultValue.enabled, ['on', 'off', 'offUnlessPressed', 'onUnlessPressed']), fontSize: EditorIntOption.clampedInt(input.fontSize, this.defaultValue.fontSize, 0, 100), fontFamily: EditorStringOption.string(input.fontFamily, this.defaultValue.fontFamily), - padding: boolean(input.padding, this.defaultValue.padding) + padding: boolean(input.padding, this.defaultValue.padding), + maximumLength: EditorIntOption.clampedInt(input.maximumLength, this.defaultValue.maximumLength, 0, Number.MAX_SAFE_INTEGER), }; } } @@ -4103,6 +4131,8 @@ export interface IInlineSuggestOptions { showToolbar?: 'always' | 'onHover' | 'never'; + syntaxHighlightingEnabled?: boolean; + suppressSuggestions?: boolean; /** @@ -4132,7 +4162,8 @@ class InlineEditorSuggest extends BaseEditorOption; diff --git a/src/vs/editor/common/config/fontInfo.ts b/src/vs/editor/common/config/fontInfo.ts index 5dafe560d..6854c5f76 100644 --- a/src/vs/editor/common/config/fontInfo.ts +++ b/src/vs/editor/common/config/fontInfo.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as platform from 'vs/base/common/platform'; -import { EditorFontVariations, EditorOptions, EditorOption, FindComputedEditorOptionValueById, EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions'; -import { EditorZoom } from 'vs/editor/common/config/editorZoom'; +import * as platform from '../../../base/common/platform.js'; +import { EditorFontVariations, EditorOptions, EditorOption, FindComputedEditorOptionValueById, EDITOR_FONT_DEFAULTS } from './editorOptions.js'; +import { EditorZoom } from './editorZoom.js'; /** * Determined from empirical observations. diff --git a/src/vs/editor/common/core/characterClassifier.ts b/src/vs/editor/common/core/characterClassifier.ts index fb7b921ed..595d08818 100644 --- a/src/vs/editor/common/core/characterClassifier.ts +++ b/src/vs/editor/common/core/characterClassifier.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { toUint8 } from 'vs/base/common/uint'; +import { toUint8 } from '../../../base/common/uint.js'; /** * A fast character classifier that uses a compact array for ASCII values. diff --git a/src/vs/editor/common/core/cursorColumns.ts b/src/vs/editor/common/core/cursorColumns.ts index 669c38b43..1d84b8635 100644 --- a/src/vs/editor/common/core/cursorColumns.ts +++ b/src/vs/editor/common/core/cursorColumns.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; /** * A column in a position is the gap between two adjacent characters. The methods here @@ -128,7 +128,7 @@ export class CursorColumns { * @see {@link CursorColumns} */ public static nextIndentTabStop(visibleColumn: number, indentSize: number): number { - return visibleColumn + indentSize - visibleColumn % indentSize; + return CursorColumns.nextRenderTabStop(visibleColumn, indentSize); } /** @@ -144,6 +144,6 @@ export class CursorColumns { * @see {@link CursorColumns} */ public static prevIndentTabStop(column: number, indentSize: number): number { - return Math.max(0, column - 1 - (column - 1) % indentSize); + return CursorColumns.prevRenderTabStop(column, indentSize); } } diff --git a/src/vs/editor/common/core/editOperation.ts b/src/vs/editor/common/core/editOperation.ts index 59a06a7dc..047330dc2 100644 --- a/src/vs/editor/common/core/editOperation.ts +++ b/src/vs/editor/common/core/editOperation.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; +import { Position } from './position.js'; +import { IRange, Range } from './range.js'; /** * A single edit operation, that acts as a simple replace. diff --git a/src/vs/editor/common/core/editorColorRegistry.ts b/src/vs/editor/common/core/editorColorRegistry.ts index b8c8157b2..1bcf72524 100644 --- a/src/vs/editor/common/core/editorColorRegistry.ts +++ b/src/vs/editor/common/core/editorColorRegistry.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { Color, RGBA } from 'vs/base/common/color'; -import { activeContrastBorder, editorBackground, registerColor, editorWarningForeground, editorInfoForeground, editorWarningBorder, editorInfoBorder, contrastBorder, editorFindMatchHighlight, editorWarningBackground } from 'vs/platform/theme/common/colorRegistry'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; +import * as nls from '../../../nls.js'; +import { Color, RGBA } from '../../../base/common/color.js'; +import { activeContrastBorder, editorBackground, registerColor, editorWarningForeground, editorInfoForeground, editorWarningBorder, editorInfoBorder, contrastBorder, editorFindMatchHighlight, editorWarningBackground } from '../../../platform/theme/common/colorRegistry.js'; +import { registerThemingParticipant } from '../../../platform/theme/common/themeService.js'; /** * Definition of the editor colors diff --git a/src/vs/editor/common/core/eolCounter.ts b/src/vs/editor/common/core/eolCounter.ts index 702b562cb..42175b1a3 100644 --- a/src/vs/editor/common/core/eolCounter.ts +++ b/src/vs/editor/common/core/eolCounter.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; +import { CharCode } from '../../../base/common/charCode.js'; export const enum StringEOL { Unknown = 0, diff --git a/src/vs/editor/common/core/indentation.ts b/src/vs/editor/common/core/indentation.ts index d4cd6d0e7..03ce99442 100644 --- a/src/vs/editor/common/core/indentation.ts +++ b/src/vs/editor/common/core/indentation.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; +import * as strings from '../../../base/common/strings.js'; +import { CursorColumns } from './cursorColumns.js'; function _normalizeIndentationFromWhitespace(str: string, indentSize: number, insertSpaces: boolean): string { let spacesCnt = 0; diff --git a/src/vs/editor/common/core/lineRange.ts b/src/vs/editor/common/core/lineRange.ts index 1a7a0d6b5..007fa6b75 100644 --- a/src/vs/editor/common/core/lineRange.ts +++ b/src/vs/editor/common/core/lineRange.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BugIndicatingError } from 'vs/base/common/errors'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Range } from 'vs/editor/common/core/range'; -import { findFirstIdxMonotonousOrArrLen, findLastIdxMonotonous, findLastMonotonous } from 'vs/base/common/arraysFind'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { OffsetRange } from './offsetRange.js'; +import { Range } from './range.js'; +import { findFirstIdxMonotonousOrArrLen, findLastIdxMonotonous, findLastMonotonous } from '../../../base/common/arraysFind.js'; /** * A range of lines (1-based). diff --git a/src/vs/editor/common/core/offsetEdit.ts b/src/vs/editor/common/core/offsetEdit.ts new file mode 100644 index 000000000..7243a408a --- /dev/null +++ b/src/vs/editor/common/core/offsetEdit.ts @@ -0,0 +1,322 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { OffsetRange } from './offsetRange.js'; + +/** + * Describes an edit to a (0-based) string. + * Use `TextEdit` to describe edits for a 1-based line/column text. +*/ +export class OffsetEdit { + public static readonly empty = new OffsetEdit([]); + + public static fromJson(data: IOffsetEdit): OffsetEdit { + return new OffsetEdit(data.map(SingleOffsetEdit.fromJson)); + } + + public static replace( + range: OffsetRange, + newText: string, + ): OffsetEdit { + return new OffsetEdit([new SingleOffsetEdit(range, newText)]); + } + + public static insert( + offset: number, + insertText: string, + ): OffsetEdit { + return OffsetEdit.replace(OffsetRange.emptyAt(offset), insertText); + } + + constructor( + public readonly edits: readonly SingleOffsetEdit[], + ) { + let lastEndEx = -1; + for (const edit of edits) { + if (!(edit.replaceRange.start >= lastEndEx)) { + throw new BugIndicatingError(`Edits must be disjoint and sorted. Found ${edit} after ${lastEndEx}`); + } + lastEndEx = edit.replaceRange.endExclusive; + } + } + + normalize(): OffsetEdit { + const edits: SingleOffsetEdit[] = []; + let lastEdit: SingleOffsetEdit | undefined; + for (const edit of this.edits) { + if (edit.newText.length === 0 && edit.replaceRange.length === 0) { + continue; + } + if (lastEdit && lastEdit.replaceRange.endExclusive === edit.replaceRange.start) { + lastEdit = new SingleOffsetEdit( + lastEdit.replaceRange.join(edit.replaceRange), + lastEdit.newText + edit.newText, + ); + } else { + if (lastEdit) { + edits.push(lastEdit); + } + lastEdit = edit; + } + } + if (lastEdit) { + edits.push(lastEdit); + } + return new OffsetEdit(edits); + } + + toString() { + const edits = this.edits.map(e => e.toString()).join(', '); + return `[${edits}]`; + } + + apply(str: string): string { + const resultText: string[] = []; + let pos = 0; + for (const edit of this.edits) { + resultText.push(str.substring(pos, edit.replaceRange.start)); + resultText.push(edit.newText); + pos = edit.replaceRange.endExclusive; + } + resultText.push(str.substring(pos)); + return resultText.join(''); + } + + compose(other: OffsetEdit): OffsetEdit { + return joinEdits(this, other); + } + + /** + * Creates an edit that reverts this edit. + */ + inverse(originalStr: string): OffsetEdit { + const edits: SingleOffsetEdit[] = []; + let offset = 0; + for (const e of this.edits) { + edits.push(new SingleOffsetEdit( + OffsetRange.ofStartAndLength(e.replaceRange.start + offset, e.newText.length), + originalStr.substring(e.replaceRange.start, e.replaceRange.endExclusive), + )); + offset += e.newText.length - e.replaceRange.length; + } + return new OffsetEdit(edits); + } + + getNewTextRanges(): OffsetRange[] { + const ranges: OffsetRange[] = []; + let offset = 0; + for (const e of this.edits) { + ranges.push(OffsetRange.ofStartAndLength(e.replaceRange.start + offset, e.newText.length),); + offset += e.newText.length - e.replaceRange.length; + } + return ranges; + } + + get isEmpty(): boolean { + return this.edits.length === 0; + } + + /** + * Consider `t1 := text o base` and `t2 := text o this`. + * We are interested in `tm := tryMerge(t1, t2, base: text)`. + * For that, we compute `tm' := t1 o base o this.rebase(base)` + * such that `tm' === tm`. + */ + tryRebase(base: OffsetEdit): OffsetEdit { + const newEdits: SingleOffsetEdit[] = []; + + let baseIdx = 0; + let ourIdx = 0; + let offset = 0; + + while (ourIdx < this.edits.length || baseIdx < base.edits.length) { + // take the edit that starts first + const baseEdit = base.edits[baseIdx]; + const ourEdit = this.edits[ourIdx]; + + if (!ourEdit) { + // We processed all our edits + break; + } else if (!baseEdit) { + // no more edits from base + newEdits.push(new SingleOffsetEdit( + ourEdit.replaceRange.delta(offset), + ourEdit.newText, + )); + ourIdx++; + } else if (ourEdit.replaceRange.intersects(baseEdit.replaceRange)) { + ourIdx++; // Don't take our edit, as it is conflicting -> skip + } else if (ourEdit.replaceRange.start < baseEdit.replaceRange.start) { + // Our edit starts first + newEdits.push(new SingleOffsetEdit( + ourEdit.replaceRange.delta(offset), + ourEdit.newText, + )); + ourIdx++; + } else { + baseIdx++; + offset += baseEdit.newText.length - baseEdit.replaceRange.length; + } + } + + return new OffsetEdit(newEdits); + } + + applyToOffset(originalOffset: number): number { + let accumulatedDelta = 0; + for (const edit of this.edits) { + if (edit.replaceRange.start <= originalOffset) { + if (originalOffset < edit.replaceRange.endExclusive) { + // the offset is in the replaced range + return edit.replaceRange.start + accumulatedDelta; + } + accumulatedDelta += edit.newText.length - edit.replaceRange.length; + } else { + break; + } + } + return originalOffset + accumulatedDelta; + } + + applyToOffsetRange(originalRange: OffsetRange): OffsetRange { + return new OffsetRange( + this.applyToOffset(originalRange.start), + this.applyToOffset(originalRange.endExclusive) + ); + } + + applyInverseToOffset(postEditsOffset: number): number { + let accumulatedDelta = 0; + for (const edit of this.edits) { + const editLength = edit.newText.length; + if (edit.replaceRange.start <= postEditsOffset - accumulatedDelta) { + if (postEditsOffset - accumulatedDelta < edit.replaceRange.start + editLength) { + // the offset is in the replaced range + return edit.replaceRange.start; + } + accumulatedDelta += editLength - edit.replaceRange.length; + } else { + break; + } + } + return postEditsOffset - accumulatedDelta; + } +} + +export type IOffsetEdit = ISingleOffsetEdit[]; + +export interface ISingleOffsetEdit { + txt: string; + pos: number; + len: number; +} + +export class SingleOffsetEdit { + public static fromJson(data: ISingleOffsetEdit): SingleOffsetEdit { + return new SingleOffsetEdit(OffsetRange.ofStartAndLength(data.pos, data.len), data.txt); + } + + public static insert(offset: number, text: string): SingleOffsetEdit { + return new SingleOffsetEdit(OffsetRange.emptyAt(offset), text); + } + + constructor( + public readonly replaceRange: OffsetRange, + public readonly newText: string, + ) { } + + toString(): string { + return `${this.replaceRange} -> "${this.newText}"`; + } + + get isEmpty() { + return this.newText.length === 0 && this.replaceRange.length === 0; + } +} + +/** + * Invariant: + * ``` + * edits2.apply(edits1.apply(str)) = join(edits1, edits2).apply(str) + * ``` + */ +function joinEdits(edits1: OffsetEdit, edits2: OffsetEdit): OffsetEdit { + edits1 = edits1.normalize(); + edits2 = edits2.normalize(); + + if (edits1.isEmpty) { return edits2; } + if (edits2.isEmpty) { return edits1; } + + const edit1Queue = [...edits1.edits]; + const result: SingleOffsetEdit[] = []; + + let edit1ToEdit2 = 0; + + for (const edit2 of edits2.edits) { + // Copy over edit1 unmodified until it touches edit2. + while (true) { + const edit1 = edit1Queue[0]!; + if (!edit1 || edit1.replaceRange.start + edit1ToEdit2 + edit1.newText.length >= edit2.replaceRange.start) { + break; + } + edit1Queue.shift(); + + result.push(edit1); + edit1ToEdit2 += edit1.newText.length - edit1.replaceRange.length; + } + + const firstEdit1ToEdit2 = edit1ToEdit2; + let firstIntersecting: SingleOffsetEdit | undefined; // or touching + let lastIntersecting: SingleOffsetEdit | undefined; // or touching + + while (true) { + const edit1 = edit1Queue[0]; + if (!edit1 || edit1.replaceRange.start + edit1ToEdit2 > edit2.replaceRange.endExclusive) { + break; + } + // else we intersect, because the new end of edit1 is after or equal to our start + + if (!firstIntersecting) { + firstIntersecting = edit1; + } + lastIntersecting = edit1; + edit1Queue.shift(); + + edit1ToEdit2 += edit1.newText.length - edit1.replaceRange.length; + } + + if (!firstIntersecting) { + result.push(new SingleOffsetEdit(edit2.replaceRange.delta(-edit1ToEdit2), edit2.newText)); + } else { + let prefix = ''; + const prefixLength = edit2.replaceRange.start - (firstIntersecting.replaceRange.start + firstEdit1ToEdit2); + if (prefixLength > 0) { + prefix = firstIntersecting.newText.slice(0, prefixLength); + } + const suffixLength = (lastIntersecting!.replaceRange.endExclusive + edit1ToEdit2) - edit2.replaceRange.endExclusive; + if (suffixLength > 0) { + const e = new SingleOffsetEdit(OffsetRange.ofStartAndLength(lastIntersecting!.replaceRange.endExclusive, 0), lastIntersecting!.newText.slice(-suffixLength)); + edit1Queue.unshift(e); + edit1ToEdit2 -= e.newText.length - e.replaceRange.length; + } + const newText = prefix + edit2.newText; + + const newReplaceRange = new OffsetRange( + Math.min(firstIntersecting.replaceRange.start, edit2.replaceRange.start - firstEdit1ToEdit2), + edit2.replaceRange.endExclusive - edit1ToEdit2 + ); + result.push(new SingleOffsetEdit(newReplaceRange, newText)); + } + } + + while (true) { + const item = edit1Queue.shift(); + if (!item) { break; } + result.push(item); + } + + return new OffsetEdit(result).normalize(); +} diff --git a/src/vs/editor/common/core/offsetRange.ts b/src/vs/editor/common/core/offsetRange.ts index 17857dd94..5e2ef46d5 100644 --- a/src/vs/editor/common/core/offsetRange.ts +++ b/src/vs/editor/common/core/offsetRange.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BugIndicatingError } from 'vs/base/common/errors'; +import { BugIndicatingError } from '../../../base/common/errors.js'; export interface IOffsetRange { readonly start: number; @@ -47,6 +47,10 @@ export class OffsetRange implements IOffsetRange { return new OffsetRange(start, start + length); } + public static emptyAt(offset: number): OffsetRange { + return new OffsetRange(offset, offset); + } + constructor(public readonly start: number, public readonly endExclusive: number) { if (start > endExclusive) { throw new BugIndicatingError(`Invalid range: ${this.toString()}`); @@ -112,6 +116,12 @@ export class OffsetRange implements IOffsetRange { return undefined; } + public intersectionLength(range: OffsetRange): number { + const start = Math.max(this.start, range.start); + const end = Math.min(this.endExclusive, range.endExclusive); + return Math.max(0, end - start); + } + public intersects(other: OffsetRange): boolean { const start = Math.max(this.start, other.start); const end = Math.min(this.endExclusive, other.endExclusive); diff --git a/src/vs/editor/common/core/positionToOffset.ts b/src/vs/editor/common/core/positionToOffset.ts index 484c0a326..e4a13a076 100644 --- a/src/vs/editor/common/core/positionToOffset.ts +++ b/src/vs/editor/common/core/positionToOffset.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findLastIdxMonotonous } from 'vs/base/common/arraysFind'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { TextLength } from 'vs/editor/common/core/textLength'; +import { findLastIdxMonotonous } from '../../../base/common/arraysFind.js'; +import { OffsetRange } from './offsetRange.js'; +import { Position } from './position.js'; +import { Range } from './range.js'; +import { TextLength } from './textLength.js'; export class PositionOffsetTransformer { private readonly lineStartOffsetByLineIdx: number[]; diff --git a/src/vs/editor/common/core/range.ts b/src/vs/editor/common/core/range.ts index 72396396d..954c18e13 100644 --- a/src/vs/editor/common/core/range.ts +++ b/src/vs/editor/common/core/range.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPosition, Position } from 'vs/editor/common/core/position'; +import { IPosition, Position } from './position.js'; /** * A range in the editor. This interface is suitable for serialization. diff --git a/src/vs/editor/common/core/rangeMapping.ts b/src/vs/editor/common/core/rangeMapping.ts index 379e04635..8d838cc1f 100644 --- a/src/vs/editor/common/core/rangeMapping.ts +++ b/src/vs/editor/common/core/rangeMapping.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findLastMonotonous } from 'vs/base/common/arraysFind'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { TextLength } from 'vs/editor/common/core/textLength'; +import { findLastMonotonous } from '../../../base/common/arraysFind.js'; +import { Position } from './position.js'; +import { Range } from './range.js'; +import { TextLength } from './textLength.js'; /** * Represents a list of mappings of ranges from one document to another. diff --git a/src/vs/editor/common/core/selection.ts b/src/vs/editor/common/core/selection.ts index 1e0db95c8..c436bb61e 100644 --- a/src/vs/editor/common/core/selection.ts +++ b/src/vs/editor/common/core/selection.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; +import { IPosition, Position } from './position.js'; +import { Range } from './range.js'; /** * A selection in the editor. diff --git a/src/vs/editor/common/core/stringBuilder.ts b/src/vs/editor/common/core/stringBuilder.ts index d4b74be68..4231fba27 100644 --- a/src/vs/editor/common/core/stringBuilder.ts +++ b/src/vs/editor/common/core/stringBuilder.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import * as platform from 'vs/base/common/platform'; -import * as buffer from 'vs/base/common/buffer'; +import * as strings from '../../../base/common/strings.js'; +import * as platform from '../../../base/common/platform.js'; +import * as buffer from '../../../base/common/buffer.js'; let _utf16LE_TextDecoder: TextDecoder | null; function getUTF16LE_TextDecoder(): TextDecoder { diff --git a/src/vs/editor/common/core/textChange.ts b/src/vs/editor/common/core/textChange.ts index aad78ed4c..43925f181 100644 --- a/src/vs/editor/common/core/textChange.ts +++ b/src/vs/editor/common/core/textChange.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as buffer from 'vs/base/common/buffer'; -import { decodeUTF16LE } from 'vs/editor/common/core/stringBuilder'; +import * as buffer from '../../../base/common/buffer.js'; +import { decodeUTF16LE } from './stringBuilder.js'; function escapeNewLine(str: string): string { return ( diff --git a/src/vs/editor/common/core/textEdit.ts b/src/vs/editor/common/core/textEdit.ts index 4d001a0fb..2dcc4ec3d 100644 --- a/src/vs/editor/common/core/textEdit.ts +++ b/src/vs/editor/common/core/textEdit.ts @@ -3,19 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assert, assertFn, checkAdjacentItems } from 'vs/base/common/assert'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { PositionOffsetTransformer } from 'vs/editor/common/core/positionToOffset'; -import { Range } from 'vs/editor/common/core/range'; -import { TextLength } from 'vs/editor/common/core/textLength'; +import { assert, assertFn, checkAdjacentItems } from '../../../base/common/assert.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { ISingleEditOperation } from './editOperation.js'; +import { Position } from './position.js'; +import { PositionOffsetTransformer } from './positionToOffset.js'; +import { Range } from './range.js'; +import { TextLength } from './textLength.js'; export class TextEdit { public static single(originalRange: Range, newText: string): TextEdit { return new TextEdit([new SingleTextEdit(originalRange, newText)]); } + public static insert(position: Position, newText: string): TextEdit { + return new TextEdit([new SingleTextEdit(Range.fromPositions(position, position), newText)]); + } + constructor(public readonly edits: readonly SingleTextEdit[]) { assertFn(() => checkAdjacentItems(edits, (a, b) => a.range.getEndPosition().isBeforeOrEqual(b.range.getStartPosition()))); } @@ -43,12 +47,12 @@ export class TextEdit { for (const edit of this.edits) { const start = edit.range.getStartPosition(); - const end = edit.range.getEndPosition(); if (position.isBeforeOrEqual(start)) { break; } + const end = edit.range.getEndPosition(); const len = TextLength.ofText(edit.text); if (position.isBefore(end)) { const startPos = new Position(start.lineNumber + lineDelta, start.column + (start.lineNumber + lineDelta === curLine ? columnDeltaInCurLine : 0)); @@ -56,6 +60,10 @@ export class TextEdit { return rangeFromPositions(startPos, endPos); } + if (start.lineNumber + lineDelta !== curLine) { + columnDeltaInCurLine = 0; + } + lineDelta += len.lineCount - (edit.range.endLineNumber - edit.range.startLineNumber); if (len.lineCount === 0) { @@ -173,6 +181,14 @@ export class SingleTextEdit { text: this.text, }; } + + public toEdit(): TextEdit { + return new TextEdit([this]); + } + + public equals(other: SingleTextEdit): boolean { + return SingleTextEdit.equals(this, other); + } } function rangeFromPositions(start: Position, end: Position): Range { @@ -195,6 +211,10 @@ export abstract class AbstractText { getValue() { return this.getValueOfRange(this.length.toRange()); } + + getLineLength(lineNumber: number): number { + return this.getValueOfRange(new Range(lineNumber, 1, lineNumber, Number.MAX_SAFE_INTEGER)).length; + } } export class LineBasedText extends AbstractText { @@ -207,7 +227,7 @@ export class LineBasedText extends AbstractText { super(); } - getValueOfRange(range: Range): string { + override getValueOfRange(range: Range): string { if (range.startLineNumber === range.endLineNumber) { return this._getLineContent(range.startLineNumber).substring(range.startColumn - 1, range.endColumn - 1); } @@ -219,6 +239,10 @@ export class LineBasedText extends AbstractText { return result; } + override getLineLength(lineNumber: number): number { + return this._getLineContent(lineNumber).length; + } + get length(): TextLength { const lastLine = this._getLineContent(this._lineCount); return new TextLength(this._lineCount - 1, lastLine.length); diff --git a/src/vs/editor/common/core/textLength.ts b/src/vs/editor/common/core/textLength.ts index bee3897d5..91dbdd796 100644 --- a/src/vs/editor/common/core/textLength.ts +++ b/src/vs/editor/common/core/textLength.ts @@ -2,8 +2,8 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; +import { Position } from './position.js'; +import { Range } from './range.js'; /** * Represents a non-negative length of text in terms of line and column count. @@ -30,6 +30,10 @@ export class TextLength { } } + public static fromPosition(pos: Position): TextLength { + return new TextLength(pos.lineNumber - 1, pos.column - 1); + } + public static ofRange(range: Range) { return TextLength.betweenPositions(range.getStartPosition(), range.getEndPosition()); } @@ -117,6 +121,13 @@ export class TextLength { } } + public addToRange(range: Range): Range { + return Range.fromPositions( + this.addToPosition(range.getStartPosition()), + this.addToPosition(range.getEndPosition()) + ); + } + toString() { return `${this.lineCount},${this.columnCount}`; } diff --git a/src/vs/editor/common/core/wordCharacterClassifier.ts b/src/vs/editor/common/core/wordCharacterClassifier.ts index b984c2726..649498c41 100644 --- a/src/vs/editor/common/core/wordCharacterClassifier.ts +++ b/src/vs/editor/common/core/wordCharacterClassifier.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { LRUCache } from 'vs/base/common/map'; -import { CharacterClassifier } from 'vs/editor/common/core/characterClassifier'; +import { CharCode } from '../../../base/common/charCode.js'; +import { LRUCache } from '../../../base/common/map.js'; +import { CharacterClassifier } from './characterClassifier.js'; export const enum WordCharacterClass { Regular = 0, diff --git a/src/vs/editor/common/core/wordHelper.ts b/src/vs/editor/common/core/wordHelper.ts index 96e378d0e..32838f920 100644 --- a/src/vs/editor/common/core/wordHelper.ts +++ b/src/vs/editor/common/core/wordHelper.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Iterable } from 'vs/base/common/iterator'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; +import { Iterable } from '../../../base/common/iterator.js'; +import { toDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; export const USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\|;:\'",.<>/?'; diff --git a/src/vs/editor/common/cursor/cursor.ts b/src/vs/editor/common/cursor/cursor.ts index 242283e76..d68f60c56 100644 --- a/src/vs/editor/common/cursor/cursor.ts +++ b/src/vs/editor/common/cursor/cursor.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import * as strings from 'vs/base/common/strings'; -import { CursorCollection } from 'vs/editor/common/cursor/cursorCollection'; -import { CursorConfiguration, CursorState, EditOperationResult, EditOperationType, IColumnSelectData, PartialCursorState, ICursorSimpleModel } from 'vs/editor/common/cursorCommon'; -import { CursorContext } from 'vs/editor/common/cursor/cursorContext'; -import { DeleteOperations } from 'vs/editor/common/cursor/cursorDeleteOperations'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { CompositionOutcome, TypeOperations } from 'vs/editor/common/cursor/cursorTypeOperations'; -import { BaseTypeWithAutoClosingCommand } from 'vs/editor/common/cursor/cursorTypeEditOperations'; -import { Position } from 'vs/editor/common/core/position'; -import { Range, IRange } from 'vs/editor/common/core/range'; -import { ISelection, Selection, SelectionDirection } from 'vs/editor/common/core/selection'; -import * as editorCommon from 'vs/editor/common/editorCommon'; -import { ITextModel, TrackedRangeStickiness, IModelDeltaDecoration, ICursorStateComputer, IIdentifiedSingleEditOperation, IValidEditOperation } from 'vs/editor/common/model'; -import { RawContentChangedType, ModelInjectedTextChangedEvent, InternalModelContentChangeEvent } from 'vs/editor/common/textModelEvents'; -import { VerticalRevealType, ViewCursorStateChangedEvent, ViewRevealRangeRequestEvent } from 'vs/editor/common/viewEvents'; -import { dispose, Disposable } from 'vs/base/common/lifecycle'; -import { ICoordinatesConverter } from 'vs/editor/common/viewModel'; -import { CursorStateChangedEvent, ViewModelEventsCollector } from 'vs/editor/common/viewModelEventDispatcher'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import * as strings from '../../../base/common/strings.js'; +import { CursorCollection } from './cursorCollection.js'; +import { CursorConfiguration, CursorState, EditOperationResult, EditOperationType, IColumnSelectData, PartialCursorState, ICursorSimpleModel } from '../cursorCommon.js'; +import { CursorContext } from './cursorContext.js'; +import { DeleteOperations } from './cursorDeleteOperations.js'; +import { CursorChangeReason } from '../cursorEvents.js'; +import { CompositionOutcome, TypeOperations } from './cursorTypeOperations.js'; +import { BaseTypeWithAutoClosingCommand } from './cursorTypeEditOperations.js'; +import { Position } from '../core/position.js'; +import { Range, IRange } from '../core/range.js'; +import { ISelection, Selection, SelectionDirection } from '../core/selection.js'; +import * as editorCommon from '../editorCommon.js'; +import { ITextModel, TrackedRangeStickiness, IModelDeltaDecoration, ICursorStateComputer, IIdentifiedSingleEditOperation, IValidEditOperation } from '../model.js'; +import { RawContentChangedType, ModelInjectedTextChangedEvent, InternalModelContentChangeEvent } from '../textModelEvents.js'; +import { VerticalRevealType, ViewCursorStateChangedEvent, ViewRevealRangeRequestEvent } from '../viewEvents.js'; +import { dispose, Disposable } from '../../../base/common/lifecycle.js'; +import { ICoordinatesConverter } from '../viewModel.js'; +import { CursorStateChangedEvent, ViewModelEventsCollector } from '../viewModelEventDispatcher.js'; export class CursorsController extends Disposable { diff --git a/src/vs/editor/common/cursor/cursorAtomicMoveOperations.ts b/src/vs/editor/common/cursor/cursorAtomicMoveOperations.ts index 5cd406c3f..6b2c9cd1f 100644 --- a/src/vs/editor/common/cursor/cursorAtomicMoveOperations.ts +++ b/src/vs/editor/common/cursor/cursorAtomicMoveOperations.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; +import { CharCode } from '../../../base/common/charCode.js'; +import { CursorColumns } from '../core/cursorColumns.js'; export const enum Direction { Left, diff --git a/src/vs/editor/common/cursor/cursorCollection.ts b/src/vs/editor/common/cursor/cursorCollection.ts index 626c139cb..ae1f4b6ca 100644 --- a/src/vs/editor/common/cursor/cursorCollection.ts +++ b/src/vs/editor/common/cursor/cursorCollection.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { compareBy } from 'vs/base/common/arrays'; -import { findLastMax, findFirstMin } from 'vs/base/common/arraysFind'; -import { CursorState, PartialCursorState } from 'vs/editor/common/cursorCommon'; -import { CursorContext } from 'vs/editor/common/cursor/cursorContext'; -import { Cursor } from 'vs/editor/common/cursor/oneCursor'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; +import { compareBy } from '../../../base/common/arrays.js'; +import { findLastMax, findFirstMin } from '../../../base/common/arraysFind.js'; +import { CursorState, PartialCursorState } from '../cursorCommon.js'; +import { CursorContext } from './cursorContext.js'; +import { Cursor } from './oneCursor.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { ISelection, Selection } from '../core/selection.js'; export class CursorCollection { diff --git a/src/vs/editor/common/cursor/cursorColumnSelection.ts b/src/vs/editor/common/cursor/cursorColumnSelection.ts index e87cf9109..eef556219 100644 --- a/src/vs/editor/common/cursor/cursorColumnSelection.ts +++ b/src/vs/editor/common/cursor/cursorColumnSelection.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CursorConfiguration, ICursorSimpleModel, SingleCursorState, IColumnSelectData, SelectionStartKind } from 'vs/editor/common/cursorCommon'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; +import { CursorConfiguration, ICursorSimpleModel, SingleCursorState, IColumnSelectData, SelectionStartKind } from '../cursorCommon.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; export class ColumnSelection { diff --git a/src/vs/editor/common/cursor/cursorContext.ts b/src/vs/editor/common/cursor/cursorContext.ts index 19c6877bf..30c25a6d6 100644 --- a/src/vs/editor/common/cursor/cursorContext.ts +++ b/src/vs/editor/common/cursor/cursorContext.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITextModel } from 'vs/editor/common/model'; -import { ICoordinatesConverter } from 'vs/editor/common/viewModel'; -import { CursorConfiguration, ICursorSimpleModel } from 'vs/editor/common/cursorCommon'; +import { ITextModel } from '../model.js'; +import { ICoordinatesConverter } from '../viewModel.js'; +import { CursorConfiguration, ICursorSimpleModel } from '../cursorCommon.js'; export class CursorContext { _cursorContextBrand: void = undefined; diff --git a/src/vs/editor/common/cursor/cursorDeleteOperations.ts b/src/vs/editor/common/cursor/cursorDeleteOperations.ts index 13218ea71..acf11b2d3 100644 --- a/src/vs/editor/common/cursor/cursorDeleteOperations.ts +++ b/src/vs/editor/common/cursor/cursorDeleteOperations.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand'; -import { EditorAutoClosingEditStrategy, EditorAutoClosingStrategy } from 'vs/editor/common/config/editorOptions'; -import { CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from 'vs/editor/common/cursorCommon'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { MoveOperations } from 'vs/editor/common/cursor/cursorMoveOperations'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { StandardAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; -import { Position } from 'vs/editor/common/core/position'; +import * as strings from '../../../base/common/strings.js'; +import { ReplaceCommand } from '../commands/replaceCommand.js'; +import { EditorAutoClosingEditStrategy, EditorAutoClosingStrategy } from '../config/editorOptions.js'; +import { CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from '../cursorCommon.js'; +import { CursorColumns } from '../core/cursorColumns.js'; +import { MoveOperations } from './cursorMoveOperations.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { ICommand } from '../editorCommon.js'; +import { StandardAutoClosingPairConditional } from '../languages/languageConfiguration.js'; +import { Position } from '../core/position.js'; export class DeleteOperations { diff --git a/src/vs/editor/common/cursor/cursorMoveCommands.ts b/src/vs/editor/common/cursor/cursorMoveCommands.ts index 78c553732..46e2192ff 100644 --- a/src/vs/editor/common/cursor/cursorMoveCommands.ts +++ b/src/vs/editor/common/cursor/cursorMoveCommands.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as types from 'vs/base/common/types'; -import { CursorState, ICursorSimpleModel, PartialCursorState, SelectionStartKind, SingleCursorState } from 'vs/editor/common/cursorCommon'; -import { MoveOperations } from 'vs/editor/common/cursor/cursorMoveOperations'; -import { WordOperations } from 'vs/editor/common/cursor/cursorWordOperations'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ICommandMetadata } from 'vs/platform/commands/common/commands'; -import { IViewModel } from 'vs/editor/common/viewModel'; +import * as types from '../../../base/common/types.js'; +import { CursorState, ICursorSimpleModel, PartialCursorState, SelectionStartKind, SingleCursorState } from '../cursorCommon.js'; +import { MoveOperations } from './cursorMoveOperations.js'; +import { WordOperations } from './cursorWordOperations.js'; +import { IPosition, Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { ICommandMetadata } from '../../../platform/commands/common/commands.js'; +import { IViewModel } from '../viewModel.js'; export class CursorMoveCommands { diff --git a/src/vs/editor/common/cursor/cursorMoveOperations.ts b/src/vs/editor/common/cursor/cursorMoveOperations.ts index 5699917a4..ebfde7673 100644 --- a/src/vs/editor/common/cursor/cursorMoveOperations.ts +++ b/src/vs/editor/common/cursor/cursorMoveOperations.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { Constants } from 'vs/base/common/uint'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { AtomicTabMoveOperations, Direction } from 'vs/editor/common/cursor/cursorAtomicMoveOperations'; -import { CursorConfiguration, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from 'vs/editor/common/cursorCommon'; -import { PositionAffinity } from 'vs/editor/common/model'; +import * as strings from '../../../base/common/strings.js'; +import { Constants } from '../../../base/common/uint.js'; +import { CursorColumns } from '../core/cursorColumns.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { AtomicTabMoveOperations, Direction } from './cursorAtomicMoveOperations.js'; +import { CursorConfiguration, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from '../cursorCommon.js'; +import { PositionAffinity } from '../model.js'; export class CursorPosition { _cursorPositionBrand: void = undefined; diff --git a/src/vs/editor/common/cursor/cursorTypeEditOperations.ts b/src/vs/editor/common/cursor/cursorTypeEditOperations.ts index df17d2f39..c20fcfad3 100644 --- a/src/vs/editor/common/cursor/cursorTypeEditOperations.ts +++ b/src/vs/editor/common/cursor/cursorTypeEditOperations.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import * as strings from 'vs/base/common/strings'; -import { ReplaceCommand, ReplaceCommandWithOffsetCursorState, ReplaceCommandWithoutChangingPosition, ReplaceCommandThatPreservesSelection } from 'vs/editor/common/commands/replaceCommand'; -import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; -import { SurroundSelectionCommand } from 'vs/editor/common/commands/surroundSelectionCommand'; -import { CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from 'vs/editor/common/cursorCommon'; -import { WordCharacterClass, getMapForWordSeparators } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Position } from 'vs/editor/common/core/position'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { EnterAction, IndentAction, StandardAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; -import { getIndentationAtPosition } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IElectricAction } from 'vs/editor/common/languages/supports/electricCharacter'; -import { EditorAutoClosingStrategy, EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { createScopedLineTokens } from 'vs/editor/common/languages/supports'; -import { getIndentActionForType, getIndentForEnter, getInheritIndentForLine } from 'vs/editor/common/languages/autoIndent'; -import { getEnterAction } from 'vs/editor/common/languages/enterAction'; +import { CharCode } from '../../../base/common/charCode.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import * as strings from '../../../base/common/strings.js'; +import { ReplaceCommand, ReplaceCommandWithOffsetCursorState, ReplaceCommandWithoutChangingPosition, ReplaceCommandThatPreservesSelection } from '../commands/replaceCommand.js'; +import { ShiftCommand } from '../commands/shiftCommand.js'; +import { SurroundSelectionCommand } from '../commands/surroundSelectionCommand.js'; +import { CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from '../cursorCommon.js'; +import { WordCharacterClass, getMapForWordSeparators } from '../core/wordCharacterClassifier.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { Position } from '../core/position.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../editorCommon.js'; +import { ITextModel } from '../model.js'; +import { EnterAction, IndentAction, StandardAutoClosingPairConditional } from '../languages/languageConfiguration.js'; +import { getIndentationAtPosition } from '../languages/languageConfigurationRegistry.js'; +import { IElectricAction } from '../languages/supports/electricCharacter.js'; +import { EditorAutoClosingStrategy, EditorAutoIndentStrategy } from '../config/editorOptions.js'; +import { createScopedLineTokens } from '../languages/supports.js'; +import { getIndentActionForType, getIndentForEnter, getInheritIndentForLine } from '../languages/autoIndent.js'; +import { getEnterAction } from '../languages/enterAction.js'; export class AutoIndentOperation { diff --git a/src/vs/editor/common/cursor/cursorTypeOperations.ts b/src/vs/editor/common/cursor/cursorTypeOperations.ts index b4c65156f..c518f3f97 100644 --- a/src/vs/editor/common/cursor/cursorTypeOperations.ts +++ b/src/vs/editor/common/cursor/cursorTypeOperations.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; -import { CompositionSurroundSelectionCommand } from 'vs/editor/common/commands/surroundSelectionCommand'; -import { CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from 'vs/editor/common/cursorCommon'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Position } from 'vs/editor/common/core/position'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { AutoClosingOpenCharTypeOperation, AutoClosingOvertypeOperation, AutoClosingOvertypeWithInterceptorsOperation, AutoIndentOperation, CompositionOperation, EnterOperation, InterceptorElectricCharOperation, PasteOperation, shiftIndent, shouldSurroundChar, SimpleCharacterTypeOperation, SurroundSelectionOperation, TabOperation, TypeWithoutInterceptorsOperation, unshiftIndent } from 'vs/editor/common/cursor/cursorTypeEditOperations'; +import { ShiftCommand } from '../commands/shiftCommand.js'; +import { CompositionSurroundSelectionCommand } from '../commands/surroundSelectionCommand.js'; +import { CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from '../cursorCommon.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { Position } from '../core/position.js'; +import { ICommand } from '../editorCommon.js'; +import { ITextModel } from '../model.js'; +import { AutoClosingOpenCharTypeOperation, AutoClosingOvertypeOperation, AutoClosingOvertypeWithInterceptorsOperation, AutoIndentOperation, CompositionOperation, EnterOperation, InterceptorElectricCharOperation, PasteOperation, shiftIndent, shouldSurroundChar, SimpleCharacterTypeOperation, SurroundSelectionOperation, TabOperation, TypeWithoutInterceptorsOperation, unshiftIndent } from './cursorTypeEditOperations.js'; export class TypeOperations { diff --git a/src/vs/editor/common/cursor/cursorWordOperations.ts b/src/vs/editor/common/cursor/cursorWordOperations.ts index a43538215..3e1d06658 100644 --- a/src/vs/editor/common/cursor/cursorWordOperations.ts +++ b/src/vs/editor/common/cursor/cursorWordOperations.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { EditorAutoClosingEditStrategy, EditorAutoClosingStrategy } from 'vs/editor/common/config/editorOptions'; -import { CursorConfiguration, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from 'vs/editor/common/cursorCommon'; -import { DeleteOperations } from 'vs/editor/common/cursor/cursorDeleteOperations'; -import { WordCharacterClass, WordCharacterClassifier, IntlWordSegmentData, getMapForWordSeparators } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ITextModel } from 'vs/editor/common/model'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { AutoClosingPairs } from 'vs/editor/common/languages/languageConfiguration'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { EditorAutoClosingEditStrategy, EditorAutoClosingStrategy } from '../config/editorOptions.js'; +import { CursorConfiguration, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from '../cursorCommon.js'; +import { DeleteOperations } from './cursorDeleteOperations.js'; +import { WordCharacterClass, WordCharacterClassifier, IntlWordSegmentData, getMapForWordSeparators } from '../core/wordCharacterClassifier.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { ITextModel } from '../model.js'; +import { IWordAtPosition } from '../core/wordHelper.js'; +import { AutoClosingPairs } from '../languages/languageConfiguration.js'; interface IFindWordResult { /** diff --git a/src/vs/editor/common/cursor/oneCursor.ts b/src/vs/editor/common/cursor/oneCursor.ts index a0dc0eafc..17bdb4e69 100644 --- a/src/vs/editor/common/cursor/oneCursor.ts +++ b/src/vs/editor/common/cursor/oneCursor.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CursorState, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from 'vs/editor/common/cursorCommon'; -import { CursorContext } from 'vs/editor/common/cursor/cursorContext'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { PositionAffinity, TrackedRangeStickiness } from 'vs/editor/common/model'; +import { CursorState, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from '../cursorCommon.js'; +import { CursorContext } from './cursorContext.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { PositionAffinity, TrackedRangeStickiness } from '../model.js'; /** * Represents a single cursor. diff --git a/src/vs/editor/common/cursorCommon.ts b/src/vs/editor/common/cursorCommon.ts index c5411aa85..52f8673a3 100644 --- a/src/vs/editor/common/cursorCommon.ts +++ b/src/vs/editor/common/cursorCommon.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ConfigurationChangedEvent, EditorAutoClosingEditStrategy, EditorAutoClosingStrategy, EditorAutoIndentStrategy, EditorAutoSurroundStrategy, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { PositionAffinity, TextModelResolvedOptions } from 'vs/editor/common/model'; -import { AutoClosingPairs } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { createScopedLineTokens } from 'vs/editor/common/languages/supports'; -import { IElectricAction } from 'vs/editor/common/languages/supports/electricCharacter'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { normalizeIndentation } from 'vs/editor/common/core/indentation'; +import { ConfigurationChangedEvent, EditorAutoClosingEditStrategy, EditorAutoClosingStrategy, EditorAutoIndentStrategy, EditorAutoSurroundStrategy, EditorOption } from './config/editorOptions.js'; +import { LineTokens } from './tokens/lineTokens.js'; +import { Position } from './core/position.js'; +import { Range } from './core/range.js'; +import { ISelection, Selection } from './core/selection.js'; +import { ICommand } from './editorCommon.js'; +import { IEditorConfiguration } from './config/editorConfiguration.js'; +import { PositionAffinity, TextModelResolvedOptions } from './model.js'; +import { AutoClosingPairs } from './languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from './languages/languageConfigurationRegistry.js'; +import { createScopedLineTokens } from './languages/supports.js'; +import { IElectricAction } from './languages/supports/electricCharacter.js'; +import { CursorColumns } from './core/cursorColumns.js'; +import { normalizeIndentation } from './core/indentation.js'; export interface IColumnSelectData { isReal: boolean; diff --git a/src/vs/editor/common/cursorEvents.ts b/src/vs/editor/common/cursorEvents.ts index eb3418b99..e3b58c312 100644 --- a/src/vs/editor/common/cursorEvents.ts +++ b/src/vs/editor/common/cursorEvents.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; +import { Position } from './core/position.js'; +import { Selection } from './core/selection.js'; /** * Describes the reason the cursor has changed its position. diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.ts index 2de463503..0d0eae6d7 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { forEachAdjacent } from 'vs/base/common/arrays'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; +import { forEachAdjacent } from '../../../../../base/common/arrays.js'; +import { BugIndicatingError } from '../../../../../base/common/errors.js'; +import { OffsetRange } from '../../../core/offsetRange.js'; /** * Represents a synchronous diff algorithm. Should be executed in a worker. @@ -196,8 +196,6 @@ export class DateTimeout implements ITimeout { const valid = Date.now() - this.startTime < this.timeout; if (!valid && this.valid) { this.valid = false; // timeout reached - // eslint-disable-next-line no-debugger - debugger; // WARNING: Most likely debugging caused the timeout. Call `this.disable()` to continue without timing out. } return this.valid; } diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.ts index f27644435..565560c5c 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { IDiffAlgorithm, SequenceDiff, ISequence, ITimeout, InfiniteTimeout, DiffAlgorithmResult } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; -import { Array2D } from 'vs/editor/common/diff/defaultLinesDiffComputer/utils'; +import { OffsetRange } from '../../../core/offsetRange.js'; +import { IDiffAlgorithm, SequenceDiff, ISequence, ITimeout, InfiniteTimeout, DiffAlgorithmResult } from './diffAlgorithm.js'; +import { Array2D } from '../utils.js'; /** * A O(MN) diffing algorithm that supports a score function. diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts index c08431889..b496d002d 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; +import { OffsetRange } from '../../../core/offsetRange.js'; +import { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js'; /** * An O(ND) diff algorithm that has a quadratic space worst-case complexity. diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts index 6a46557a1..523486d84 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITimeout, SequenceDiff } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; -import { DetailedLineRangeMapping, LineRangeMapping } from '../rangeMapping'; -import { pushMany, compareBy, numberComparator, reverseOrder } from 'vs/base/common/arrays'; -import { MonotonousArray, findLastMonotonous } from 'vs/base/common/arraysFind'; -import { SetMap } from 'vs/base/common/map'; -import { LineRange, LineRangeSet } from 'vs/editor/common/core/lineRange'; -import { LinesSliceCharSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence'; -import { LineRangeFragment, isSpace } from 'vs/editor/common/diff/defaultLinesDiffComputer/utils'; -import { MyersDiffAlgorithm } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm'; -import { Range } from 'vs/editor/common/core/range'; +import { ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js'; +import { DetailedLineRangeMapping, LineRangeMapping } from '../rangeMapping.js'; +import { pushMany, compareBy, numberComparator, reverseOrder } from '../../../../base/common/arrays.js'; +import { MonotonousArray, findLastMonotonous } from '../../../../base/common/arraysFind.js'; +import { SetMap } from '../../../../base/common/map.js'; +import { LineRange, LineRangeSet } from '../../core/lineRange.js'; +import { LinesSliceCharSequence } from './linesSliceCharSequence.js'; +import { LineRangeFragment, isSpace } from './utils.js'; +import { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js'; +import { Range } from '../../core/range.js'; export function computeMovedLines( changes: DetailedLineRangeMapping[], diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts index 5573f6845..3d3a14eb8 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts @@ -3,21 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals, groupAdjacentBy } from 'vs/base/common/arrays'; -import { assertFn, checkAdjacentItems } from 'vs/base/common/assert'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { DateTimeout, ITimeout, InfiniteTimeout, SequenceDiff } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; -import { DynamicProgrammingDiffing } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing'; -import { MyersDiffAlgorithm } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm'; -import { computeMovedLines } from 'vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines'; -import { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from 'vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations'; -import { LineSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/lineSequence'; -import { LinesSliceCharSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence'; -import { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from 'vs/editor/common/diff/linesDiffComputer'; -import { DetailedLineRangeMapping, LineRangeMapping, RangeMapping } from '../rangeMapping'; +import { equals } from '../../../../base/common/arrays.js'; +import { assertFn } from '../../../../base/common/assert.js'; +import { LineRange } from '../../core/lineRange.js'; +import { OffsetRange } from '../../core/offsetRange.js'; +import { Position } from '../../core/position.js'; +import { Range } from '../../core/range.js'; +import { ArrayText } from '../../core/textEdit.js'; +import { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from '../linesDiffComputer.js'; +import { DetailedLineRangeMapping, LineRangeMapping, lineRangeMappingFromRangeMappings, RangeMapping } from '../rangeMapping.js'; +import { DateTimeout, InfiniteTimeout, ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js'; +import { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js'; +import { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js'; +import { computeMovedLines } from './computeMovedLines.js'; +import { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js'; +import { LineSequence } from './lineSequence.js'; +import { LinesSliceCharSequence } from './linesSliceCharSequence.js'; export class DefaultLinesDiffComputer implements ILinesDiffComputer { private readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing(); @@ -140,7 +141,7 @@ export class DefaultLinesDiffComputer implements ILinesDiffComputer { scanForWhitespaceChanges(originalLines.length - seq1LastStart); - const changes = lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines); + const changes = lineRangeMappingFromRangeMappings(alignments, new ArrayText(originalLines), new ArrayText(modifiedLines)); let moves: MovedText[] = []; if (options.computeMoves) { @@ -203,7 +204,7 @@ export class DefaultLinesDiffComputer implements ILinesDiffComputer { m.original.toOffsetRange(), m.modified.toOffsetRange(), ), timeout, considerWhitespaceChanges); - const mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, originalLines, modifiedLines, true); + const mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true); return new MovedText(m, mappings); }); return movesWithDiffs; @@ -252,81 +253,6 @@ export class DefaultLinesDiffComputer implements ILinesDiffComputer { } } -export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[], dontAssertStartLine: boolean = false): DetailedLineRangeMapping[] { - const changes: DetailedLineRangeMapping[] = []; - for (const g of groupAdjacentBy( - alignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)), - (a1, a2) => - a1.original.overlapOrTouch(a2.original) - || a1.modified.overlapOrTouch(a2.modified) - )) { - const first = g[0]; - const last = g[g.length - 1]; - - changes.push(new DetailedLineRangeMapping( - first.original.join(last.original), - first.modified.join(last.modified), - g.map(a => a.innerChanges![0]), - )); - } - - assertFn(() => { - if (!dontAssertStartLine && changes.length > 0) { - if (changes[0].modified.startLineNumber !== changes[0].original.startLineNumber) { - return false; - } - if (modifiedLines.length - changes[changes.length - 1].modified.endLineNumberExclusive !== originalLines.length - changes[changes.length - 1].original.endLineNumberExclusive) { - return false; - } - } - return checkAdjacentItems(changes, - (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive && - // There has to be an unchanged line in between (otherwise both diffs should have been joined) - m1.original.endLineNumberExclusive < m2.original.startLineNumber && - m1.modified.endLineNumberExclusive < m2.modified.startLineNumber, - ); - }); - - return changes; -} - -export function getLineRangeMapping(rangeMapping: RangeMapping, originalLines: string[], modifiedLines: string[]): DetailedLineRangeMapping { - let lineStartDelta = 0; - let lineEndDelta = 0; - - // rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`. - - // original: ]xxx \n <- this line is not modified - // modified: ]xx \n - if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1 - && rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber - && rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) { - // We can only do this if the range is not empty yet - lineEndDelta = -1; - } - - // original: xxx[ \n <- this line is not modified - // modified: xxx[ \n - if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1].length - && rangeMapping.originalRange.startColumn - 1 >= originalLines[rangeMapping.originalRange.startLineNumber - 1].length - && rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta - && rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) { - // We can only do this if the range is not empty yet - lineStartDelta = 1; - } - - const originalLineRange = new LineRange( - rangeMapping.originalRange.startLineNumber + lineStartDelta, - rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta - ); - const modifiedLineRange = new LineRange( - rangeMapping.modifiedRange.startLineNumber + lineStartDelta, - rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta - ); - - return new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]); -} - function toLineRangeMapping(sequenceDiff: SequenceDiff) { return new LineRangeMapping( new LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1), diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts index fddfb1e0c..c205457ac 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { forEachWithNeighbors } from 'vs/base/common/arrays'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { ISequence, OffsetPair, SequenceDiff } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; -import { LineSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/lineSequence'; -import { LinesSliceCharSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence'; +import { forEachWithNeighbors } from '../../../../base/common/arrays.js'; +import { OffsetRange } from '../../core/offsetRange.js'; +import { ISequence, OffsetPair, SequenceDiff } from './algorithms/diffAlgorithm.js'; +import { LineSequence } from './lineSequence.js'; +import { LinesSliceCharSequence } from './linesSliceCharSequence.js'; export function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] { let result = sequenceDiffs; diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.ts index fd48f598d..998459b21 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { ISequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { OffsetRange } from '../../core/offsetRange.js'; +import { ISequence } from './algorithms/diffAlgorithm.js'; export class LineSequence implements ISequence { constructor( diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts index 776159948..b56245bbc 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findLastIdxMonotonous, findLastMonotonous, findFirstMonotonous } from 'vs/base/common/arraysFind'; -import { CharCode } from 'vs/base/common/charCode'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ISequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm'; -import { isSpace } from 'vs/editor/common/diff/defaultLinesDiffComputer/utils'; +import { findLastIdxMonotonous, findLastMonotonous, findFirstMonotonous } from '../../../../base/common/arraysFind.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { OffsetRange } from '../../core/offsetRange.js'; +import { Position } from '../../core/position.js'; +import { Range } from '../../core/range.js'; +import { ISequence } from './algorithms/diffAlgorithm.js'; +import { isSpace } from './utils.js'; export class LinesSliceCharSequence implements ISequence { private readonly elements: number[] = []; diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/utils.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/utils.ts index 533b71e37..cc5e19a2c 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/utils.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/utils.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { LineRange } from '../../core/lineRange.js'; +import { DetailedLineRangeMapping } from '../rangeMapping.js'; export class Array2D { private readonly array: T[] = []; diff --git a/src/vs/editor/common/diff/documentDiffProvider.ts b/src/vs/editor/common/diff/documentDiffProvider.ts index 10dfca908..161dde65d 100644 --- a/src/vs/editor/common/diff/documentDiffProvider.ts +++ b/src/vs/editor/common/diff/documentDiffProvider.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { MovedText } from 'vs/editor/common/diff/linesDiffComputer'; -import { DetailedLineRangeMapping } from './rangeMapping'; -import { ITextModel } from 'vs/editor/common/model'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { MovedText } from './linesDiffComputer.js'; +import { DetailedLineRangeMapping } from './rangeMapping.js'; +import { ITextModel } from '../model.js'; /** * A document diff provider computes the diff between two text models. diff --git a/src/vs/editor/common/diff/legacyLinesDiffComputer.ts b/src/vs/editor/common/diff/legacyLinesDiffComputer.ts index 8d7e05e03..f3129ac9a 100644 --- a/src/vs/editor/common/diff/legacyLinesDiffComputer.ts +++ b/src/vs/editor/common/diff/legacyLinesDiffComputer.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { IDiffChange, ISequence, LcsDiff, IDiffResult } from 'vs/base/common/diff/diff'; -import { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff } from 'vs/editor/common/diff/linesDiffComputer'; -import { RangeMapping, DetailedLineRangeMapping } from './rangeMapping'; -import * as strings from 'vs/base/common/strings'; -import { Range } from 'vs/editor/common/core/range'; -import { assertFn, checkAdjacentItems } from 'vs/base/common/assert'; -import { LineRange } from 'vs/editor/common/core/lineRange'; +import { CharCode } from '../../../base/common/charCode.js'; +import { IDiffChange, ISequence, LcsDiff, IDiffResult } from '../../../base/common/diff/diff.js'; +import { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff } from './linesDiffComputer.js'; +import { RangeMapping, DetailedLineRangeMapping } from './rangeMapping.js'; +import * as strings from '../../../base/common/strings.js'; +import { Range } from '../core/range.js'; +import { assertFn, checkAdjacentItems } from '../../../base/common/assert.js'; +import { LineRange } from '../core/lineRange.js'; const MINIMUM_MATCHING_CHARACTER_LENGTH = 3; diff --git a/src/vs/editor/common/diff/linesDiffComputer.ts b/src/vs/editor/common/diff/linesDiffComputer.ts index a11674f01..054d1eebf 100644 --- a/src/vs/editor/common/diff/linesDiffComputer.ts +++ b/src/vs/editor/common/diff/linesDiffComputer.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DetailedLineRangeMapping, LineRangeMapping } from './rangeMapping'; +import { DetailedLineRangeMapping, LineRangeMapping } from './rangeMapping.js'; export interface ILinesDiffComputer { computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff; diff --git a/src/vs/editor/common/diff/linesDiffComputers.ts b/src/vs/editor/common/diff/linesDiffComputers.ts index 75c63fe65..a0a17e5a4 100644 --- a/src/vs/editor/common/diff/linesDiffComputers.ts +++ b/src/vs/editor/common/diff/linesDiffComputers.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LegacyLinesDiffComputer } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { DefaultLinesDiffComputer } from 'vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer'; -import { ILinesDiffComputer } from 'vs/editor/common/diff/linesDiffComputer'; +import { LegacyLinesDiffComputer } from './legacyLinesDiffComputer.js'; +import { DefaultLinesDiffComputer } from './defaultLinesDiffComputer/defaultLinesDiffComputer.js'; +import { ILinesDiffComputer } from './linesDiffComputer.js'; export const linesDiffComputers = { getLegacy: () => new LegacyLinesDiffComputer(), diff --git a/src/vs/editor/common/diff/rangeMapping.ts b/src/vs/editor/common/diff/rangeMapping.ts index da9c3a491..80c18b9ed 100644 --- a/src/vs/editor/common/diff/rangeMapping.ts +++ b/src/vs/editor/common/diff/rangeMapping.ts @@ -3,11 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BugIndicatingError } from 'vs/base/common/errors'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { AbstractText, SingleTextEdit } from 'vs/editor/common/core/textEdit'; +import { groupAdjacentBy } from '../../../base/common/arrays.js'; +import { assertFn, checkAdjacentItems } from '../../../base/common/assert.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { LineRange } from '../core/lineRange.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { AbstractText, SingleTextEdit, TextEdit } from '../core/textEdit.js'; /** * Maps a line range in the original text model to a line range in the modified text model. @@ -226,6 +228,29 @@ export class DetailedLineRangeMapping extends LineRangeMapping { * Maps a range in the original text model to a range in the modified text model. */ export class RangeMapping { + public static fromEdit(edit: TextEdit): RangeMapping[] { + const newRanges = edit.getNewRanges(); + const result = edit.edits.map((e, idx) => new RangeMapping(e.range, newRanges[idx])); + return result; + } + + public static fromEditJoin(edit: TextEdit): RangeMapping { + const newRanges = edit.getNewRanges(); + const result = edit.edits.map((e, idx) => new RangeMapping(e.range, newRanges[idx])); + return RangeMapping.join(result); + } + + public static join(rangeMappings: RangeMapping[]): RangeMapping { + if (rangeMappings.length === 0) { + throw new BugIndicatingError('Cannot join an empty list of range mappings'); + } + let result = rangeMappings[0]; + for (let i = 1; i < rangeMappings.length; i++) { + result = result.join(rangeMappings[i]); + } + return result; + } + public static assertSorted(rangeMappings: RangeMapping[]): void { for (let i = 1; i < rangeMappings.length; i++) { const previous = rangeMappings[i - 1]; @@ -272,4 +297,87 @@ export class RangeMapping { const newText = modified.getValueOfRange(this.modifiedRange); return new SingleTextEdit(this.originalRange, newText); } + + public join(other: RangeMapping): RangeMapping { + return new RangeMapping( + this.originalRange.plusRange(other.originalRange), + this.modifiedRange.plusRange(other.modifiedRange) + ); + } +} + +export function lineRangeMappingFromRangeMappings(alignments: readonly RangeMapping[], originalLines: AbstractText, modifiedLines: AbstractText, dontAssertStartLine: boolean = false): DetailedLineRangeMapping[] { + const changes: DetailedLineRangeMapping[] = []; + for (const g of groupAdjacentBy( + alignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)), + (a1, a2) => + a1.original.overlapOrTouch(a2.original) + || a1.modified.overlapOrTouch(a2.modified) + )) { + const first = g[0]; + const last = g[g.length - 1]; + + changes.push(new DetailedLineRangeMapping( + first.original.join(last.original), + first.modified.join(last.modified), + g.map(a => a.innerChanges![0]), + )); + } + + assertFn(() => { + if (!dontAssertStartLine && changes.length > 0) { + if (changes[0].modified.startLineNumber !== changes[0].original.startLineNumber) { + return false; + } + + if (modifiedLines.length.lineCount - changes[changes.length - 1].modified.endLineNumberExclusive !== originalLines.length.lineCount - changes[changes.length - 1].original.endLineNumberExclusive) { + return false; + } + } + return checkAdjacentItems(changes, + (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive && + // There has to be an unchanged line in between (otherwise both diffs should have been joined) + m1.original.endLineNumberExclusive < m2.original.startLineNumber && + m1.modified.endLineNumberExclusive < m2.modified.startLineNumber, + ); + }); + + return changes; +} + +export function getLineRangeMapping(rangeMapping: RangeMapping, originalLines: AbstractText, modifiedLines: AbstractText): DetailedLineRangeMapping { + let lineStartDelta = 0; + let lineEndDelta = 0; + + // rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`. + + // original: ]xxx \n <- this line is not modified + // modified: ]xx \n + if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1 + && rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber + && rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) { + // We can only do this if the range is not empty yet + lineEndDelta = -1; + } + + // original: xxx[ \n <- this line is not modified + // modified: xxx[ \n + if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines.getLineLength(rangeMapping.modifiedRange.startLineNumber) + && rangeMapping.originalRange.startColumn - 1 >= originalLines.getLineLength(rangeMapping.originalRange.startLineNumber) + && rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta + && rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) { + // We can only do this if the range is not empty yet + lineStartDelta = 1; + } + + const originalLineRange = new LineRange( + rangeMapping.originalRange.startLineNumber + lineStartDelta, + rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta + ); + const modifiedLineRange = new LineRange( + rangeMapping.modifiedRange.startLineNumber + lineStartDelta, + rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta + ); + + return new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]); } diff --git a/src/vs/editor/common/editorAction.ts b/src/vs/editor/common/editorAction.ts index 90924e789..7d8224d01 100644 --- a/src/vs/editor/common/editorAction.ts +++ b/src/vs/editor/common/editorAction.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorAction } from 'vs/editor/common/editorCommon'; -import { ICommandMetadata } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IEditorAction } from './editorCommon.js'; +import { ICommandMetadata } from '../../platform/commands/common/commands.js'; +import { ContextKeyExpression, IContextKeyService } from '../../platform/contextkey/common/contextkey.js'; export class InternalEditorAction implements IEditorAction { diff --git a/src/vs/editor/common/editorCommon.ts b/src/vs/editor/common/editorCommon.ts index 57b9cde62..e25edb4fb 100644 --- a/src/vs/editor/common/editorCommon.ts +++ b/src/vs/editor/common/editorCommon.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ThemeColor } from 'vs/base/common/themables'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IModelDecoration, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel, IValidEditOperation, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { IModelDecorationsChangedEvent } from 'vs/editor/common/textModelEvents'; -import { ICommandMetadata } from 'vs/platform/commands/common/commands'; +import { Event } from '../../base/common/event.js'; +import { IMarkdownString } from '../../base/common/htmlContent.js'; +import { IDisposable } from '../../base/common/lifecycle.js'; +import { ThemeColor } from '../../base/common/themables.js'; +import { URI, UriComponents } from '../../base/common/uri.js'; +import { IEditorOptions } from './config/editorOptions.js'; +import { IDimension } from './core/dimension.js'; +import { IPosition, Position } from './core/position.js'; +import { IRange, Range } from './core/range.js'; +import { ISelection, Selection } from './core/selection.js'; +import { IModelDecoration, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel, IValidEditOperation, OverviewRulerLane, TrackedRangeStickiness } from './model.js'; +import { IModelDecorationsChangedEvent } from './textModelEvents.js'; +import { ICommandMetadata } from '../../platform/commands/common/commands.js'; /** * A builder and helper for edit operations for a command. @@ -147,6 +147,15 @@ export interface IContentSizeChangedEvent { readonly contentHeightChanged: boolean; } +/** + * @internal + */ +export interface ITriggerEditorOperationEvent { + source: string | null | undefined; + handlerId: string; + payload: any; +} + export interface INewScrollPosition { scrollLeft?: number; scrollTop?: number; @@ -770,4 +779,3 @@ export interface CompositionTypePayload { replaceNextCharCnt: number; positionDelta: number; } - diff --git a/src/vs/editor/common/editorContextKeys.ts b/src/vs/editor/common/editorContextKeys.ts index 2311fbd3a..8c6952a2e 100644 --- a/src/vs/editor/common/editorContextKeys.ts +++ b/src/vs/editor/common/editorContextKeys.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import * as nls from '../../nls.js'; +import { RawContextKey } from '../../platform/contextkey/common/contextkey.js'; export namespace EditorContextKeys { @@ -27,7 +27,6 @@ export namespace EditorContextKeys { export const readOnly = new RawContextKey('editorReadonly', false, nls.localize('editorReadonly', "Whether the editor is read-only")); export const inDiffEditor = new RawContextKey('inDiffEditor', false, nls.localize('inDiffEditor', "Whether the context is a diff editor")); export const isEmbeddedDiffEditor = new RawContextKey('isEmbeddedDiffEditor', false, nls.localize('isEmbeddedDiffEditor', "Whether the context is an embedded diff editor")); - export const inMultiDiffEditor = new RawContextKey('inMultiDiffEditor', false, nls.localize('inMultiDiffEditor', "Whether the context is a multi diff editor")); export const multiDiffEditorAllCollapsed = new RawContextKey('multiDiffEditorAllCollapsed', undefined, nls.localize('multiDiffEditorAllCollapsed', "Whether all files in multi diff editor are collapsed")); export const hasChanges = new RawContextKey('diffEditorHasChanges', false, nls.localize('diffEditorHasChanges', "Whether the diff editor has changes")); export const comparingMovedCode = new RawContextKey('comparingMovedCode', false, nls.localize('comparingMovedCode', "Whether a moved code block is selected for comparison")); diff --git a/src/vs/editor/common/editorFeatures.ts b/src/vs/editor/common/editorFeatures.ts index 99d297783..b68e3fcf2 100644 --- a/src/vs/editor/common/editorFeatures.ts +++ b/src/vs/editor/common/editorFeatures.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BrandedService, IConstructorSignature } from 'vs/platform/instantiation/common/instantiation'; +import { BrandedService, IConstructorSignature } from '../../platform/instantiation/common/instantiation.js'; /** * A feature that will be loaded when the first code editor is constructed and disposed when the system shuts down. diff --git a/src/vs/editor/common/editorTheme.ts b/src/vs/editor/common/editorTheme.ts index 6b5944133..eb0ba3830 100644 --- a/src/vs/editor/common/editorTheme.ts +++ b/src/vs/editor/common/editorTheme.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import { ColorIdentifier } from 'vs/platform/theme/common/colorRegistry'; -import { Color } from 'vs/base/common/color'; -import { ColorScheme } from 'vs/platform/theme/common/theme'; +import { IColorTheme } from '../../platform/theme/common/themeService.js'; +import { ColorIdentifier } from '../../platform/theme/common/colorRegistry.js'; +import { Color } from '../../base/common/color.js'; +import { ColorScheme } from '../../platform/theme/common/theme.js'; export class EditorTheme { diff --git a/src/vs/editor/common/encodedTokenAttributes.ts b/src/vs/editor/common/encodedTokenAttributes.ts index c0f2fad70..bf144bd8a 100644 --- a/src/vs/editor/common/encodedTokenAttributes.ts +++ b/src/vs/editor/common/encodedTokenAttributes.ts @@ -65,26 +65,26 @@ export const enum StandardTokenType { * */ export const enum MetadataConsts { - LANGUAGEID_MASK = 0b00000000000000000000000011111111, - TOKEN_TYPE_MASK = 0b00000000000000000000001100000000, - BALANCED_BRACKETS_MASK = 0b00000000000000000000010000000000, - FONT_STYLE_MASK = 0b00000000000000000111100000000000, - FOREGROUND_MASK = 0b00000000111111111000000000000000, - BACKGROUND_MASK = 0b11111111000000000000000000000000, - - ITALIC_MASK = 0b00000000000000000000100000000000, - BOLD_MASK = 0b00000000000000000001000000000000, - UNDERLINE_MASK = 0b00000000000000000010000000000000, - STRIKETHROUGH_MASK = 0b00000000000000000100000000000000, + LANGUAGEID_MASK /* */ = 0b00000000000000000000000011111111, + TOKEN_TYPE_MASK /* */ = 0b00000000000000000000001100000000, + BALANCED_BRACKETS_MASK /* */ = 0b00000000000000000000010000000000, + FONT_STYLE_MASK /* */ = 0b00000000000000000111100000000000, + FOREGROUND_MASK /* */ = 0b00000000111111111000000000000000, + BACKGROUND_MASK /* */ = 0b11111111000000000000000000000000, + + ITALIC_MASK /* */ = 0b00000000000000000000100000000000, + BOLD_MASK /* */ = 0b00000000000000000001000000000000, + UNDERLINE_MASK /* */ = 0b00000000000000000010000000000000, + STRIKETHROUGH_MASK /* */ = 0b00000000000000000100000000000000, // Semantic tokens cannot set the language id, so we can // use the first 8 bits for control purposes - SEMANTIC_USE_ITALIC = 0b00000000000000000000000000000001, - SEMANTIC_USE_BOLD = 0b00000000000000000000000000000010, - SEMANTIC_USE_UNDERLINE = 0b00000000000000000000000000000100, - SEMANTIC_USE_STRIKETHROUGH = 0b00000000000000000000000000001000, - SEMANTIC_USE_FOREGROUND = 0b00000000000000000000000000010000, - SEMANTIC_USE_BACKGROUND = 0b00000000000000000000000000100000, + SEMANTIC_USE_ITALIC /* */ = 0b00000000000000000000000000000001, + SEMANTIC_USE_BOLD /* */ = 0b00000000000000000000000000000010, + SEMANTIC_USE_UNDERLINE /* */ = 0b00000000000000000000000000000100, + SEMANTIC_USE_STRIKETHROUGH /* */ = 0b00000000000000000000000000001000, + SEMANTIC_USE_FOREGROUND /* */ = 0b00000000000000000000000000010000, + SEMANTIC_USE_BACKGROUND /* */ = 0b00000000000000000000000000100000, LANGUAGEID_OFFSET = 0, TOKEN_TYPE_OFFSET = 8, diff --git a/src/vs/editor/common/languageFeatureRegistry.ts b/src/vs/editor/common/languageFeatureRegistry.ts index 324897392..6bf6f8517 100644 --- a/src/vs/editor/common/languageFeatureRegistry.ts +++ b/src/vs/editor/common/languageFeatureRegistry.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ITextModel, shouldSynchronizeModel } from 'vs/editor/common/model'; -import { LanguageFilter, LanguageSelector, score } from 'vs/editor/common/languageSelector'; -import { URI } from 'vs/base/common/uri'; +import { Emitter } from '../../base/common/event.js'; +import { IDisposable, toDisposable } from '../../base/common/lifecycle.js'; +import { ITextModel, shouldSynchronizeModel } from './model.js'; +import { LanguageFilter, LanguageSelector, score } from './languageSelector.js'; +import { URI } from '../../base/common/uri.js'; interface Entry { readonly selector: LanguageSelector; diff --git a/src/vs/editor/common/languageSelector.ts b/src/vs/editor/common/languageSelector.ts index db32360aa..6374d380f 100644 --- a/src/vs/editor/common/languageSelector.ts +++ b/src/vs/editor/common/languageSelector.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IRelativePattern, match as matchGlobPattern } from 'vs/base/common/glob'; -import { URI } from 'vs/base/common/uri'; -import { normalize } from 'vs/base/common/path'; +import { IRelativePattern, match as matchGlobPattern } from '../../base/common/glob.js'; +import { URI } from '../../base/common/uri.js'; +import { normalize } from '../../base/common/path.js'; export interface LanguageFilter { readonly language?: string; diff --git a/src/vs/editor/common/languages.ts b/src/vs/editor/common/languages.ts index 32b937b6b..533010f8c 100644 --- a/src/vs/editor/common/languages.ts +++ b/src/vs/editor/common/languages.ts @@ -3,29 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Codicon } from 'vs/base/common/codicons'; -import { Color } from 'vs/base/common/color'; -import { IReadonlyVSDataTransfer } from 'vs/base/common/dataTransfer'; -import { Event } from 'vs/base/common/event'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { LanguageId } from 'vs/editor/common/encodedTokenAttributes'; -import { LanguageSelector } from 'vs/editor/common/languageSelector'; -import * as model from 'vs/editor/common/model'; -import { TokenizationRegistry as TokenizationRegistryImpl } from 'vs/editor/common/tokenizationRegistry'; -import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { IMarkerData } from 'vs/platform/markers/common/markers'; +import { VSBuffer } from '../../base/common/buffer.js'; +import { CancellationToken } from '../../base/common/cancellation.js'; +import { Codicon } from '../../base/common/codicons.js'; +import { Color } from '../../base/common/color.js'; +import { IReadonlyVSDataTransfer } from '../../base/common/dataTransfer.js'; +import { Event } from '../../base/common/event.js'; +import { HierarchicalKind } from '../../base/common/hierarchicalKind.js'; +import { IMarkdownString } from '../../base/common/htmlContent.js'; +import { IDisposable } from '../../base/common/lifecycle.js'; +import { ThemeIcon } from '../../base/common/themables.js'; +import { URI, UriComponents } from '../../base/common/uri.js'; +import { EditOperation, ISingleEditOperation } from './core/editOperation.js'; +import { IPosition, Position } from './core/position.js'; +import { IRange, Range } from './core/range.js'; +import { Selection } from './core/selection.js'; +import { LanguageId } from './encodedTokenAttributes.js'; +import { LanguageSelector } from './languageSelector.js'; +import * as model from './model.js'; +import { TokenizationRegistry as TokenizationRegistryImpl } from './tokenizationRegistry.js'; +import { ContiguousMultilineTokens } from './tokens/contiguousMultilineTokens.js'; +import { localize } from '../../nls.js'; +import { ExtensionIdentifier } from '../../platform/extensions/common/extensions.js'; +import { IMarkerData } from '../../platform/markers/common/markers.js'; +import { IModelTokensChangedEvent } from './textModelEvents.js'; /** * @internal @@ -89,6 +90,7 @@ export class EncodedTokenizationResult { export interface ITreeSitterTokenizationSupport { tokenizeEncoded(lineNumber: number, textModel: model.ITextModel): Uint32Array | undefined; captureAtPosition(lineNumber: number, column: number, textModel: model.ITextModel): any; + onDidChangeTokens: Event<{ textModel: model.ITextModel; changes: IModelTokensChangedEvent }>; } /** @@ -757,6 +759,8 @@ export interface InlineCompletion { * Defaults to `false`. */ readonly completeBracketPairs?: boolean; + + readonly isInlineEdit?: boolean; } export interface InlineCompletions { @@ -783,7 +787,7 @@ export interface InlineCompletionsProvider; + provideInlineEditsForRange?(model: model.ITextModel, range: Range, context: InlineCompletionContext, token: CancellationToken): ProviderResult; /** * Will be called when an item is shown. @@ -1206,6 +1210,16 @@ export function isLocationLink(thing: any): thing is LocationLink { && (Range.isIRange((thing as LocationLink).originSelectionRange) || Range.isIRange((thing as LocationLink).targetSelectionRange)); } +/** + * @internal + */ +export function isLocation(thing: any): thing is Location { + return thing + && URI.isUri((thing as Location).uri) + && Range.isIRange((thing as Location).range); +} + + export type Definition = Location | Location[] | LocationLink[]; /** @@ -1895,7 +1909,6 @@ export interface CommentThread { canReply: boolean; input?: CommentInput; onDidChangeInput: Event; - onDidChangeRange: Event; onDidChangeLabel: Event; onDidChangeCollapsibleState: Event; onDidChangeState: Event; @@ -2019,9 +2032,9 @@ export interface CommentThreadChangedEvent { } export interface CodeLens { - range: IRange; // the range of code - id?: string; // no idea what this is for - command?: Command; // command to run when they click the codeLens + range: IRange; + id?: string; + command?: Command; } export interface CodeLensList { @@ -2265,7 +2278,28 @@ export interface DocumentContextItem { export interface MappedEditsContext { /** The outer array is sorted by priority - from highest to lowest. The inner arrays contain elements of the same priority. */ - documents: DocumentContextItem[][]; + readonly documents: DocumentContextItem[][]; + /** + * @internal + */ + readonly conversation?: (ConversationRequest | ConversationResponse)[]; +} + +/** + * @internal + */ +export interface ConversationRequest { + readonly type: 'request'; + readonly message: string; +} + +/** + * @internal + */ +export interface ConversationResponse { + readonly type: 'response'; + readonly message: string; + readonly references?: DocumentContextItem[]; } export interface MappedEditsProvider { diff --git a/src/vs/editor/common/languages/autoIndent.ts b/src/vs/editor/common/languages/autoIndent.ts index 5c643b4fa..d2083853e 100644 --- a/src/vs/editor/common/languages/autoIndent.ts +++ b/src/vs/editor/common/languages/autoIndent.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { IndentAction } from 'vs/editor/common/languages/languageConfiguration'; -import { IndentConsts } from 'vs/editor/common/languages/supports/indentRules'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { IndentationContextProcessor, isLanguageDifferentFromLineStart, ProcessedIndentRulesSupport } from 'vs/editor/common/languages/supports/indentationLineProcessor'; -import { CursorConfiguration } from 'vs/editor/common/cursorCommon'; +import * as strings from '../../../base/common/strings.js'; +import { Range } from '../core/range.js'; +import { ITextModel } from '../model.js'; +import { IndentAction } from './languageConfiguration.js'; +import { IndentConsts } from './supports/indentRules.js'; +import { EditorAutoIndentStrategy } from '../config/editorOptions.js'; +import { ILanguageConfigurationService } from './languageConfigurationRegistry.js'; +import { IViewLineTokens } from '../tokens/lineTokens.js'; +import { IndentationContextProcessor, isLanguageDifferentFromLineStart, ProcessedIndentRulesSupport } from './supports/indentationLineProcessor.js'; +import { CursorConfiguration } from '../cursorCommon.js'; export interface IVirtualModel { tokenization: { diff --git a/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts b/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts index 02e447145..c188113e8 100644 --- a/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts +++ b/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts @@ -2,10 +2,10 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color, HSLA } from 'vs/base/common/color'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { IColor, IColorInformation } from 'vs/editor/common/languages'; +import { Color, HSLA } from '../../../base/common/color.js'; +import { IPosition } from '../core/position.js'; +import { IRange } from '../core/range.js'; +import { IColor, IColorInformation } from '../languages.js'; export interface IDocumentColorComputerTarget { getValue(): string; diff --git a/src/vs/editor/common/languages/enterAction.ts b/src/vs/editor/common/languages/enterAction.ts index 27669db6e..454cc1e5b 100644 --- a/src/vs/editor/common/languages/enterAction.ts +++ b/src/vs/editor/common/languages/enterAction.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { IndentAction, CompleteEnterAction } from 'vs/editor/common/languages/languageConfiguration'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { getIndentationAtPosition, ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IndentationContextProcessor } from 'vs/editor/common/languages/supports/indentationLineProcessor'; +import { Range } from '../core/range.js'; +import { ITextModel } from '../model.js'; +import { IndentAction, CompleteEnterAction } from './languageConfiguration.js'; +import { EditorAutoIndentStrategy } from '../config/editorOptions.js'; +import { getIndentationAtPosition, ILanguageConfigurationService } from './languageConfigurationRegistry.js'; +import { IndentationContextProcessor } from './supports/indentationLineProcessor.js'; export function getEnterAction( autoIndent: EditorAutoIndentStrategy, diff --git a/src/vs/editor/common/languages/highlights/typescript.scm b/src/vs/editor/common/languages/highlights/typescript.scm index e50bc9dec..664d84167 100644 --- a/src/vs/editor/common/languages/highlights/typescript.scm +++ b/src/vs/editor/common/languages/highlights/typescript.scm @@ -1,28 +1,220 @@ -; Order matters! Place higher precedence first. +; Order matters! Place lower precedence first. ; Adapted from https://github.com/zed-industries/zed/blob/main/crates/languages/src/typescript/highlights.scm -; Language constants +; Variables + +(identifier) @variable + +; Literals + +(this) @variable.language +(super) @variable.language + +(comment) @comment + +; TODO: This doesn't seem to be working +(escape_sequence) @constant.character.escape [ - (true) - (false) - (null) - (undefined) -] @constant.language + (string) + (template_string) + (template_literal_type) +] @string -(namespace_import - "*" @constant.language) +; NOTE: the typescript grammar doesn't break regex into nice parts so as to capture parts of it separately +(regex) @string.regexp +(number) @constant.numeric + +; Template TODO: These don't seem to be working + +(template_substitution + "${" @punctuation.definition.template-expression.begin + "}" @punctuation.definition.template-expression.end) + +(template_type + "${" @punctuation.definition.template-expression.begin + "}" @punctuation.definition.template-expression.end) + +(type_arguments + "<" @punctuation.bracket + ">" @punctuation.bracket) + +; Properties + +(member_expression + object: (this) + property: (property_identifier) @variable) + +(member_expression + property: (property_identifier) @variable.other.constant + (#match? @variable.other.constant "^[A-Z][A-Z_]+$")) + +[ + (property_identifier) + (shorthand_property_identifier) + (shorthand_property_identifier_pattern)] @variable + +; Function and method definitions + +(function_expression + name: (identifier) @entity.name.function) +(function_declaration + name: (identifier) @entity.name.function) +(method_definition + name: (property_identifier) @storage.type + (#eq? @storage.type "constructor")) +(method_definition + name: (property_identifier) @entity.name.function) +(method_signature + name: (property_identifier) @entity.name.function) + +(pair + key: (property_identifier) @entity.name.function + value: [(function_expression) (arrow_function)]) + +(assignment_expression + left: (member_expression + property: (property_identifier) @entity.name.function) + right: [(function_expression) (arrow_function)]) + +(variable_declarator + name: (identifier) @entity.name.function + value: [(function_expression) (arrow_function)]) + +(assignment_expression + left: (identifier) @entity.name.function + right: [(function_expression) (arrow_function)]) + +; Function and method calls + +(call_expression + function: (identifier) @entity.name.function) + +(call_expression + function: (member_expression + object: (identifier) @support.class.promise) + (#eq? @support.class.promise "Promise")) + +(call_expression + function: (member_expression + property: (property_identifier) @entity.name.function)) + +(new_expression + constructor: (identifier) @entity.name.function) + + +; Special identifiers + +(type_identifier) @entity.name.type +(predefined_type (["string" "boolean" "number" "any"])) @support.type.primitive +(predefined_type) @support.type + +(("const") + (variable_declarator + name: (identifier) @variable.other.constant)) + +([ + (identifier) + (shorthand_property_identifier) + (shorthand_property_identifier_pattern)] @variable.other.constant + (#match? @variable.other.constant "^[A-Z][A-Z_]+$")) + +(extends_clause + value: (identifier) @entity.other.inherited-class) + +; Tokens + +[ + ";" + "?." + "." + "," + ":" + "?" +] @punctuation.delimiter + +[ + "!" + "~" + "===" + "!==" + "&&" + "||" + "??" +] @keyword.operator.logical + +(binary_expression ([ + "-" + "+" + "*" + "/" + "%" + "^" +]) @keyword.operator.arithmetic) + +(binary_expression ([ + "<" + "<=" + ">" + ">=" +]) @keyword.operator.relational) + +[ + "=" +] @keyword.operator.assignment + +(augmented_assignment_expression ([ + "-=" + "+=" + "*=" + "/=" + "%=" + "^=" + "&=" + "|=" + "&&=" + "||=" + "??=" +]) @keyword.operator.assignment.compound) + +[ + "++" +] @keyword.operator.increment + +[ + "--" +] @keyword.operator.decrement + +[ + "**" + "**=" + "<<" + "<<=" + "==" + "!=" + "=>" + ">>" + ">>=" + ">>>" + ">>>=" + "~" + "&" + "|" +] @keyword.operator ; Keywords +("typeof") @keyword.operator.expression.typeof + +(binary_expression "instanceof" @keyword.operator.expression.instanceof) + +("of") @keyword.operator.expression.of + [ "delete" "in" "infer" - "instanceof" "keyof" - "of" - "typeof" ] @keyword.operator.expression [ @@ -86,186 +278,25 @@ "with" ] @keyword -; TODO: works in the playground but not here (regex_flags) @keyword [ "void" -] @support.type +] @support.type.primitive [ "new" ] @keyword.operator.new -; Tokens - -[ - ";" - "?." - "." - "," - ":" - "?" -] @punctuation.delimiter - -[ - "-" - "--" - "-=" - "+" - "++" - "+=" - "*" - "*=" - "**" - "**=" - "/" - "/=" - "%" - "%=" - "<" - "<=" - "<<" - "<<=" - "=" - "==" - "===" - "!" - "!=" - "!==" - "=>" - ">" - ">=" - ">>" - ">>=" - ">>>" - ">>>=" - "~" - "^" - "&" - "|" - "^=" - "&=" - "|=" - "&&" - "||" - "??" - "&&=" - "||=" - "??=" -] @keyword.operator - -; Special identifiers - -(type_identifier) @entity.name.type -(predefined_type) @support.type - -(("const") - (variable_declarator - name: (identifier) @variable.other.constant)) - -([ - (identifier) - (shorthand_property_identifier) - (shorthand_property_identifier_pattern)] @variable.other.constant - (#match? @variable.other.constant "^[A-Z][A-Z_]+$")) - -(extends_clause - value: (identifier) @entity.other.inherited-class) - -; Function and method calls - -(call_expression - function: (identifier) @entity.name.function) - -(call_expression - function: (member_expression - property: (property_identifier) @entity.name.function)) -(new_expression - constructor: (identifier) @entity.name.function) - -; Function and method definitions - -(function_expression - name: (identifier) @entity.name.function) -(function_declaration - name: (identifier) @entity.name.function) -(method_definition - name: (property_identifier) @storage.type - (#eq? @storage.type "constructor")) -(method_definition - name: (property_identifier) @entity.name.function) -(method_signature - name: (property_identifier) @entity.name.function) - -(pair - key: (property_identifier) @entity.name.function - value: [(function_expression) (arrow_function)]) - -(assignment_expression - left: (member_expression - property: (property_identifier) @entity.name.function) - right: [(function_expression) (arrow_function)]) - -(variable_declarator - name: (identifier) @entity.name.function - value: [(function_expression) (arrow_function)]) - -(assignment_expression - left: (identifier) @entity.name.function - right: [(function_expression) (arrow_function)]) - -; Properties - -(member_expression - object: (this) - property: (property_identifier) @variable) - -(member_expression - property: (property_identifier) @variable.other.constant - (#match? @variable.other.constant "^[A-Z][A-Z_]+$")) - -[ - (property_identifier) - (shorthand_property_identifier) - (shorthand_property_identifier_pattern)] @variable - -; Variables - -(identifier) @variable - -; Template TODO: These don't seem to be working - -(template_substitution - "${" @punctuation.definition.template-expression.begin - "}" @punctuation.definition.template-expression.end) - -(template_type - "${" @punctuation.definition.template-expression.begin - "}" @punctuation.definition.template-expression.end) - -(type_arguments - "<" @punctuation.bracket - ">" @punctuation.bracket) - -; Literals - -(this) @variable.language -(super) @variable.language - -(comment) @comment - -; TODO: This doesn't seem to be working -(escape_sequence) @constant.character.escape +; Language constants [ - (string) - (template_string) - (template_literal_type) -] @string - -; NOTE: the typescript grammar doesn't break regex into nice parts so as to capture parts of it separately -(regex) @string.regexp -(number) @constant.numeric + (true) + (false) + (null) + (undefined) +] @constant.language +(namespace_import + "*" @constant.language) diff --git a/src/vs/editor/common/languages/language.ts b/src/vs/editor/common/languages/language.ts index f0be928ea..065ab092a 100644 --- a/src/vs/editor/common/languages/language.ts +++ b/src/vs/editor/common/languages/language.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILanguageIdCodec } from '../languages.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export const ILanguageService = createDecorator('languageService'); diff --git a/src/vs/editor/common/languages/languageConfiguration.ts b/src/vs/editor/common/languages/languageConfiguration.ts index 69b852e40..b6aa902f7 100644 --- a/src/vs/editor/common/languages/languageConfiguration.ts +++ b/src/vs/editor/common/languages/languageConfiguration.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ScopedLineTokens } from 'vs/editor/common/languages/supports'; +import { CharCode } from '../../../base/common/charCode.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { ScopedLineTokens } from './supports.js'; /** * Describes how comments for a language work. diff --git a/src/vs/editor/common/languages/languageConfigurationRegistry.ts b/src/vs/editor/common/languages/languageConfigurationRegistry.ts index 7ff5ddec8..bf0516d53 100644 --- a/src/vs/editor/common/languages/languageConfigurationRegistry.ts +++ b/src/vs/editor/common/languages/languageConfigurationRegistry.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import * as strings from 'vs/base/common/strings'; -import { ITextModel } from 'vs/editor/common/model'; -import { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from 'vs/editor/common/core/wordHelper'; -import { EnterAction, FoldingRules, IAutoClosingPair, IndentationRule, LanguageConfiguration, AutoClosingPairs, CharacterPair, ExplicitLanguageConfiguration } from 'vs/editor/common/languages/languageConfiguration'; -import { CharacterPairSupport } from 'vs/editor/common/languages/supports/characterPair'; -import { BracketElectricCharacterSupport } from 'vs/editor/common/languages/supports/electricCharacter'; -import { IndentRulesSupport } from 'vs/editor/common/languages/supports/indentRules'; -import { OnEnterSupport } from 'vs/editor/common/languages/supports/onEnter'; -import { RichEditBrackets } from 'vs/editor/common/languages/supports/richEditBrackets'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { LanguageBracketsConfiguration } from 'vs/editor/common/languages/supports/languageBracketsConfiguration'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import * as strings from '../../../base/common/strings.js'; +import { ITextModel } from '../model.js'; +import { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from '../core/wordHelper.js'; +import { EnterAction, FoldingRules, IAutoClosingPair, IndentationRule, LanguageConfiguration, AutoClosingPairs, CharacterPair, ExplicitLanguageConfiguration } from './languageConfiguration.js'; +import { CharacterPairSupport } from './supports/characterPair.js'; +import { BracketElectricCharacterSupport } from './supports/electricCharacter.js'; +import { IndentRulesSupport } from './supports/indentRules.js'; +import { OnEnterSupport } from './supports/onEnter.js'; +import { RichEditBrackets } from './supports/richEditBrackets.js'; +import { EditorAutoIndentStrategy } from '../config/editorOptions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ILanguageService } from './language.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { PLAINTEXT_LANGUAGE_ID } from './modesRegistry.js'; +import { LanguageBracketsConfiguration } from './supports/languageBracketsConfiguration.js'; /** * Interface used to support insertion of mode specific comments. diff --git a/src/vs/editor/common/languages/linkComputer.ts b/src/vs/editor/common/languages/linkComputer.ts index 52f4eaee2..2c954d7f3 100644 --- a/src/vs/editor/common/languages/linkComputer.ts +++ b/src/vs/editor/common/languages/linkComputer.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { CharacterClassifier } from 'vs/editor/common/core/characterClassifier'; -import { ILink } from 'vs/editor/common/languages'; +import { CharCode } from '../../../base/common/charCode.js'; +import { CharacterClassifier } from '../core/characterClassifier.js'; +import { ILink } from '../languages.js'; export interface ILinkComputerTarget { getLineCount(): number; diff --git a/src/vs/editor/common/languages/modesRegistry.ts b/src/vs/editor/common/languages/modesRegistry.ts index 7376d0c06..871265804 100644 --- a/src/vs/editor/common/languages/modesRegistry.ts +++ b/src/vs/editor/common/languages/modesRegistry.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { Emitter, Event } from 'vs/base/common/event'; -import { ILanguageExtensionPoint } from 'vs/editor/common/languages/language'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; +import * as nls from '../../../nls.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { ILanguageExtensionPoint } from './language.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Mimes } from '../../../base/common/mime.js'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from '../../../platform/configuration/common/configurationRegistry.js'; // Define extension point ids export const Extensions = { diff --git a/src/vs/editor/common/languages/nullTokenize.ts b/src/vs/editor/common/languages/nullTokenize.ts index 2bf77a6ac..8966ab8b7 100644 --- a/src/vs/editor/common/languages/nullTokenize.ts +++ b/src/vs/editor/common/languages/nullTokenize.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Token, TokenizationResult, EncodedTokenizationResult, IState } from 'vs/editor/common/languages'; -import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; +import { Token, TokenizationResult, EncodedTokenizationResult, IState } from '../languages.js'; +import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts } from '../encodedTokenAttributes.js'; export const NullState: IState = new class implements IState { public clone(): IState { diff --git a/src/vs/editor/common/languages/supports.ts b/src/vs/editor/common/languages/supports.ts index 730fa2a1b..10e352b96 100644 --- a/src/vs/editor/common/languages/supports.ts +++ b/src/vs/editor/common/languages/supports.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; +import { IViewLineTokens, LineTokens } from '../tokens/lineTokens.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { ILanguageIdCodec } from '../languages.js'; export function createScopedLineTokens(context: LineTokens, offset: number): ScopedLineTokens { const tokenCount = context.getCount(); diff --git a/src/vs/editor/common/languages/supports/characterPair.ts b/src/vs/editor/common/languages/supports/characterPair.ts index 18eee773d..37fd6c968 100644 --- a/src/vs/editor/common/languages/supports/characterPair.ts +++ b/src/vs/editor/common/languages/supports/characterPair.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAutoClosingPair, StandardAutoClosingPairConditional, LanguageConfiguration } from 'vs/editor/common/languages/languageConfiguration'; +import { IAutoClosingPair, StandardAutoClosingPairConditional, LanguageConfiguration } from '../languageConfiguration.js'; export class CharacterPairSupport { diff --git a/src/vs/editor/common/languages/supports/electricCharacter.ts b/src/vs/editor/common/languages/supports/electricCharacter.ts index 0aa80d23e..23a78745a 100644 --- a/src/vs/editor/common/languages/supports/electricCharacter.ts +++ b/src/vs/editor/common/languages/supports/electricCharacter.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { ScopedLineTokens, ignoreBracketsInToken } from 'vs/editor/common/languages/supports'; -import { BracketsUtils, RichEditBrackets } from 'vs/editor/common/languages/supports/richEditBrackets'; +import { distinct } from '../../../../base/common/arrays.js'; +import { ScopedLineTokens, ignoreBracketsInToken } from '../supports.js'; +import { BracketsUtils, RichEditBrackets } from './richEditBrackets.js'; /** * Interface used to support electric characters diff --git a/src/vs/editor/common/languages/supports/indentRules.ts b/src/vs/editor/common/languages/supports/indentRules.ts index 6bb319dbd..09b70e31a 100644 --- a/src/vs/editor/common/languages/supports/indentRules.ts +++ b/src/vs/editor/common/languages/supports/indentRules.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IndentationRule } from 'vs/editor/common/languages/languageConfiguration'; +import { IndentationRule } from '../languageConfiguration.js'; export const enum IndentConsts { INCREASE_MASK = 0b00000001, diff --git a/src/vs/editor/common/languages/supports/indentationLineProcessor.ts b/src/vs/editor/common/languages/supports/indentationLineProcessor.ts index 919cb3cd4..762c13e4e 100644 --- a/src/vs/editor/common/languages/supports/indentationLineProcessor.ts +++ b/src/vs/editor/common/languages/supports/indentationLineProcessor.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { createScopedLineTokens, ScopedLineTokens } from 'vs/editor/common/languages/supports'; -import { IVirtualModel } from 'vs/editor/common/languages/autoIndent'; -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { IndentRulesSupport } from 'vs/editor/common/languages/supports/indentRules'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { Position } from 'vs/editor/common/core/position'; +import * as strings from '../../../../base/common/strings.js'; +import { Range } from '../../core/range.js'; +import { ITextModel } from '../../model.js'; +import { ILanguageConfigurationService } from '../languageConfigurationRegistry.js'; +import { createScopedLineTokens, ScopedLineTokens } from '../supports.js'; +import { IVirtualModel } from '../autoIndent.js'; +import { IViewLineTokens, LineTokens } from '../../tokens/lineTokens.js'; +import { IndentRulesSupport } from './indentRules.js'; +import { StandardTokenType } from '../../encodedTokenAttributes.js'; +import { Position } from '../../core/position.js'; /** * This class is a wrapper class around {@link IndentRulesSupport}. diff --git a/src/vs/editor/common/languages/supports/inplaceReplaceSupport.ts b/src/vs/editor/common/languages/supports/inplaceReplaceSupport.ts index 93f2e892f..f4443b24b 100644 --- a/src/vs/editor/common/languages/supports/inplaceReplaceSupport.ts +++ b/src/vs/editor/common/languages/supports/inplaceReplaceSupport.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IRange } from 'vs/editor/common/core/range'; -import { IInplaceReplaceSupportResult } from 'vs/editor/common/languages'; +import { IRange } from '../../core/range.js'; +import { IInplaceReplaceSupportResult } from '../../languages.js'; export class BasicInplaceReplace { diff --git a/src/vs/editor/common/languages/supports/languageBracketsConfiguration.ts b/src/vs/editor/common/languages/supports/languageBracketsConfiguration.ts index 4989395b2..f3f1205f1 100644 --- a/src/vs/editor/common/languages/supports/languageBracketsConfiguration.ts +++ b/src/vs/editor/common/languages/supports/languageBracketsConfiguration.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CachedFunction } from 'vs/base/common/cache'; -import { RegExpOptions } from 'vs/base/common/strings'; -import { LanguageConfiguration } from 'vs/editor/common/languages/languageConfiguration'; -import { createBracketOrRegExp } from 'vs/editor/common/languages/supports/richEditBrackets'; +import { CachedFunction } from '../../../../base/common/cache.js'; +import { RegExpOptions } from '../../../../base/common/strings.js'; +import { LanguageConfiguration } from '../languageConfiguration.js'; +import { createBracketOrRegExp } from './richEditBrackets.js'; /** * Captures all bracket related configurations for a single language. diff --git a/src/vs/editor/common/languages/supports/onEnter.ts b/src/vs/editor/common/languages/supports/onEnter.ts index 595258619..322ae2d29 100644 --- a/src/vs/editor/common/languages/supports/onEnter.ts +++ b/src/vs/editor/common/languages/supports/onEnter.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import * as strings from 'vs/base/common/strings'; -import { CharacterPair, EnterAction, IndentAction, OnEnterRule } from 'vs/editor/common/languages/languageConfiguration'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import * as strings from '../../../../base/common/strings.js'; +import { CharacterPair, EnterAction, IndentAction, OnEnterRule } from '../languageConfiguration.js'; +import { EditorAutoIndentStrategy } from '../../config/editorOptions.js'; export interface IOnEnterSupportOptions { brackets?: CharacterPair[]; diff --git a/src/vs/editor/common/languages/supports/richEditBrackets.ts b/src/vs/editor/common/languages/supports/richEditBrackets.ts index abb308504..c6436e60e 100644 --- a/src/vs/editor/common/languages/supports/richEditBrackets.ts +++ b/src/vs/editor/common/languages/supports/richEditBrackets.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import * as stringBuilder from 'vs/editor/common/core/stringBuilder'; -import { Range } from 'vs/editor/common/core/range'; -import { CharacterPair } from 'vs/editor/common/languages/languageConfiguration'; +import * as strings from '../../../../base/common/strings.js'; +import * as stringBuilder from '../../core/stringBuilder.js'; +import { Range } from '../../core/range.js'; +import { CharacterPair } from '../languageConfiguration.js'; interface InternalBracket { open: string[]; diff --git a/src/vs/editor/common/languages/supports/tokenization.ts b/src/vs/editor/common/languages/supports/tokenization.ts index 7fa14b20a..f6322a09d 100644 --- a/src/vs/editor/common/languages/supports/tokenization.ts +++ b/src/vs/editor/common/languages/supports/tokenization.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color } from 'vs/base/common/color'; -import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; +import { Color } from '../../../../base/common/color.js'; +import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts } from '../../encodedTokenAttributes.js'; export interface ITokenThemeRule { token: string; diff --git a/src/vs/editor/common/languages/textToHtmlTokenizer.ts b/src/vs/editor/common/languages/textToHtmlTokenizer.ts index 66651f254..b0745eda9 100644 --- a/src/vs/editor/common/languages/textToHtmlTokenizer.ts +++ b/src/vs/editor/common/languages/textToHtmlTokenizer.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { LanguageId } from 'vs/editor/common/encodedTokenAttributes'; -import { NullState, nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; -import { ILanguageService } from 'vs/editor/common/languages/language'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { IViewLineTokens, LineTokens } from '../tokens/lineTokens.js'; +import { ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from '../languages.js'; +import { LanguageId } from '../encodedTokenAttributes.js'; +import { NullState, nullTokenizeEncoded } from './nullTokenize.js'; +import { ILanguageService } from './language.js'; export type IReducedTokenizationSupport = Omit; diff --git a/src/vs/editor/common/model.ts b/src/vs/editor/common/model.ts index fb48c38b1..640d69408 100644 --- a/src/vs/editor/common/model.ts +++ b/src/vs/editor/common/model.ts @@ -3,26 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { equals } from 'vs/base/common/objects'; -import { ThemeColor } from 'vs/base/common/themables'; -import { URI } from 'vs/base/common/uri'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { TextChange } from 'vs/editor/common/core/textChange'; -import { WordCharacterClassifier } from 'vs/editor/common/core/wordCharacterClassifier'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { FormattingOptions } from 'vs/editor/common/languages'; -import { ILanguageSelection } from 'vs/editor/common/languages/language'; -import { IBracketPairsTextModelPart } from 'vs/editor/common/textModelBracketPairs'; -import { IModelContentChange, IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent, InternalModelContentChangeEvent, ModelInjectedTextChangedEvent } from 'vs/editor/common/textModelEvents'; -import { IGuidesTextModelPart } from 'vs/editor/common/textModelGuides'; -import { ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; -import { UndoRedoGroup } from 'vs/platform/undoRedo/common/undoRedo'; +import { Event } from '../../base/common/event.js'; +import { IMarkdownString } from '../../base/common/htmlContent.js'; +import { IDisposable } from '../../base/common/lifecycle.js'; +import { equals } from '../../base/common/objects.js'; +import { ThemeColor } from '../../base/common/themables.js'; +import { URI } from '../../base/common/uri.js'; +import { ISingleEditOperation } from './core/editOperation.js'; +import { IPosition, Position } from './core/position.js'; +import { IRange, Range } from './core/range.js'; +import { Selection } from './core/selection.js'; +import { TextChange } from './core/textChange.js'; +import { WordCharacterClassifier } from './core/wordCharacterClassifier.js'; +import { IWordAtPosition } from './core/wordHelper.js'; +import { FormattingOptions } from './languages.js'; +import { ILanguageSelection } from './languages/language.js'; +import { IBracketPairsTextModelPart } from './textModelBracketPairs.js'; +import { IModelContentChange, IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent, InternalModelContentChangeEvent, ModelInjectedTextChangedEvent } from './textModelEvents.js'; +import { IGuidesTextModelPart } from './textModelGuides.js'; +import { ITokenizationTextModelPart } from './tokenizationTextModelPart.js'; +import { UndoRedoGroup } from '../../platform/undoRedo/common/undoRedo.js'; +import { TokenArray } from './tokens/tokenArray.js'; /** * Vertical Lane in the overview ruler of the editor. @@ -286,6 +287,11 @@ export interface InjectedTextOptions { */ readonly content: string; + /** + * @internal + */ + readonly tokens?: TokenArray | null; + /** * If set, the decoration will be rendered inline with the text with this CSS class name. */ diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl.ts index 3d3fe2e36..546daf83f 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CallbackIterable, compareBy } from 'vs/base/common/arrays'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, IReference, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ILanguageConfigurationService, LanguageConfigurationServiceChangeEvent } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ignoreBracketsInToken } from 'vs/editor/common/languages/supports'; -import { LanguageBracketsConfiguration } from 'vs/editor/common/languages/supports/languageBracketsConfiguration'; -import { BracketsUtils, RichEditBracket, RichEditBrackets } from 'vs/editor/common/languages/supports/richEditBrackets'; -import { BracketPairsTree } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { BracketInfo, BracketPairInfo, BracketPairWithMinIndentationInfo, IBracketPairsTextModelPart, IFoundBracket } from 'vs/editor/common/textModelBracketPairs'; -import { IModelContentChangedEvent, IModelLanguageChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { CallbackIterable, compareBy } from '../../../../base/common/arrays.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, IReference, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { IPosition, Position } from '../../core/position.js'; +import { Range } from '../../core/range.js'; +import { ILanguageConfigurationService, LanguageConfigurationServiceChangeEvent } from '../../languages/languageConfigurationRegistry.js'; +import { ignoreBracketsInToken } from '../../languages/supports.js'; +import { LanguageBracketsConfiguration } from '../../languages/supports/languageBracketsConfiguration.js'; +import { BracketsUtils, RichEditBracket, RichEditBrackets } from '../../languages/supports/richEditBrackets.js'; +import { BracketPairsTree } from './bracketPairsTree/bracketPairsTree.js'; +import { TextModel } from '../textModel.js'; +import { BracketInfo, BracketPairInfo, BracketPairWithMinIndentationInfo, IBracketPairsTextModelPart, IFoundBracket } from '../../textModelBracketPairs.js'; +import { IModelContentChangedEvent, IModelLanguageChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from '../../textModelEvents.js'; +import { LineTokens } from '../../tokens/lineTokens.js'; export class BracketPairsTextModelPart extends Disposable implements IBracketPairsTextModelPart { private readonly bracketPairsTree = this._register(new MutableDisposable>()); diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts index e304dd1fa..a5141b516 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BugIndicatingError } from 'vs/base/common/errors'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { BracketKind } from 'vs/editor/common/languages/supports/languageBracketsConfiguration'; -import { ITextModel } from 'vs/editor/common/model'; -import { Length, lengthAdd, lengthGetLineCount, lengthToObj, lengthZero } from './length'; -import { SmallImmutableSet } from './smallImmutableSet'; -import { OpeningBracketId } from './tokenizer'; +import { BugIndicatingError } from '../../../../../base/common/errors.js'; +import { CursorColumns } from '../../../core/cursorColumns.js'; +import { BracketKind } from '../../../languages/supports/languageBracketsConfiguration.js'; +import { ITextModel } from '../../../model.js'; +import { Length, lengthAdd, lengthGetLineCount, lengthToObj, lengthZero } from './length.js'; +import { SmallImmutableSet } from './smallImmutableSet.js'; +import { OpeningBracketId } from './tokenizer.js'; export const enum AstNodeKind { Text = 0, diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts index 1f95f84df..d5560fdd2 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Length, lengthAdd, lengthDiffNonNegative, lengthLessThanEqual, lengthOfString, lengthToObj, positionToLength, toLength } from './length'; -import { TextLength } from 'vs/editor/common/core/textLength'; -import { IModelContentChange } from 'vs/editor/common/textModelEvents'; +import { Range } from '../../../core/range.js'; +import { Length, lengthAdd, lengthDiffNonNegative, lengthLessThanEqual, lengthOfString, lengthToObj, positionToLength, toLength } from './length.js'; +import { TextLength } from '../../../core/textLength.js'; +import { IModelContentChange } from '../../../textModelEvents.js'; export class TextEditInfo { public static fromModelContentChanges(changes: IModelContentChange[]): TextEditInfo[] { diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts index acb25d8bf..42a40e997 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { BracketInfo, BracketPairWithMinIndentationInfo, IFoundBracket } from 'vs/editor/common/textModelBracketPairs'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { IModelContentChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { AstNode, AstNodeKind } from './ast'; -import { TextEditInfo } from './beforeEditPositionMapper'; -import { LanguageAgnosticBracketTokens } from './brackets'; -import { Length, lengthAdd, lengthGreaterThanEqual, lengthLessThan, lengthLessThanEqual, lengthsToRange, lengthZero, positionToLength, toLength } from './length'; -import { parseDocument } from './parser'; -import { DenseKeyProvider } from './smallImmutableSet'; -import { FastTokenizer, TextBufferTokenizer } from './tokenizer'; -import { BackgroundTokenizationState } from 'vs/editor/common/tokenizationTextModelPart'; -import { Position } from 'vs/editor/common/core/position'; -import { CallbackIterable } from 'vs/base/common/arrays'; -import { combineTextEditInfos } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos'; -import { ClosingBracketKind, OpeningBracketKind } from 'vs/editor/common/languages/supports/languageBracketsConfiguration'; +import { Emitter } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { Range } from '../../../core/range.js'; +import { ITextModel } from '../../../model.js'; +import { BracketInfo, BracketPairWithMinIndentationInfo, IFoundBracket } from '../../../textModelBracketPairs.js'; +import { TextModel } from '../../textModel.js'; +import { IModelContentChangedEvent, IModelTokensChangedEvent } from '../../../textModelEvents.js'; +import { ResolvedLanguageConfiguration } from '../../../languages/languageConfigurationRegistry.js'; +import { AstNode, AstNodeKind } from './ast.js'; +import { TextEditInfo } from './beforeEditPositionMapper.js'; +import { LanguageAgnosticBracketTokens } from './brackets.js'; +import { Length, lengthAdd, lengthGreaterThanEqual, lengthLessThan, lengthLessThanEqual, lengthsToRange, lengthZero, positionToLength, toLength } from './length.js'; +import { parseDocument } from './parser.js'; +import { DenseKeyProvider } from './smallImmutableSet.js'; +import { FastTokenizer, TextBufferTokenizer } from './tokenizer.js'; +import { BackgroundTokenizationState } from '../../../tokenizationTextModelPart.js'; +import { Position } from '../../../core/position.js'; +import { CallbackIterable } from '../../../../../base/common/arrays.js'; +import { combineTextEditInfos } from './combineTextEditInfos.js'; +import { ClosingBracketKind, OpeningBracketKind } from '../../../languages/supports/languageBracketsConfiguration.js'; export class BracketPairsTree extends Disposable { private readonly didChangeEmitter = new Emitter(); diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.ts index b4b31932e..c0445ee91 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.ts @@ -2,13 +2,13 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BracketKind } from 'vs/editor/common/languages/supports/languageBracketsConfiguration'; -import { BracketAstNode } from './ast'; -import { toLength } from './length'; -import { DenseKeyProvider, identityKeyProvider, SmallImmutableSet } from './smallImmutableSet'; -import { OpeningBracketId, Token, TokenKind } from './tokenizer'; +import { escapeRegExpCharacters } from '../../../../../base/common/strings.js'; +import { ResolvedLanguageConfiguration } from '../../../languages/languageConfigurationRegistry.js'; +import { BracketKind } from '../../../languages/supports/languageBracketsConfiguration.js'; +import { BracketAstNode } from './ast.js'; +import { toLength } from './length.js'; +import { DenseKeyProvider, identityKeyProvider, SmallImmutableSet } from './smallImmutableSet.js'; +import { OpeningBracketId, Token, TokenKind } from './tokenizer.js'; export class BracketTokens { static createFromLanguage(configuration: ResolvedLanguageConfiguration, denseKeyProvider: DenseKeyProvider): BracketTokens { diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.ts index 29cf5a652..d522d0916 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ArrayQueue } from 'vs/base/common/arrays'; -import { TextEditInfo } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper'; -import { Length, lengthAdd, lengthDiffNonNegative, lengthEquals, lengthIsZero, lengthToObj, lengthZero, sumLengths } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; +import { ArrayQueue } from '../../../../../base/common/arrays.js'; +import { TextEditInfo } from './beforeEditPositionMapper.js'; +import { Length, lengthAdd, lengthDiffNonNegative, lengthEquals, lengthIsZero, lengthToObj, lengthZero, sumLengths } from './length.js'; export function combineTextEditInfos(textEditInfoFirst: TextEditInfo[], textEditInfoSecond: TextEditInfo[]): TextEditInfo[] { if (textEditInfoFirst.length === 0) { diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.ts index aab404264..eacd35a9a 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AstNode, AstNodeKind, ListAstNode } from './ast'; +import { AstNode, AstNodeKind, ListAstNode } from './ast.js'; /** * Concatenates a list of (2,3) AstNode's into a single (2,3) AstNode. diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts index d41a62233..b858a7d4d 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { splitLines } from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { TextLength } from 'vs/editor/common/core/textLength'; +import { splitLines } from '../../../../../base/common/strings.js'; +import { Position } from '../../../core/position.js'; +import { Range } from '../../../core/range.js'; +import { TextLength } from '../../../core/textLength.js'; /** * The end must be greater than or equal to the start. diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/nodeReader.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/nodeReader.ts index 4d15eb517..e71df26d5 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/nodeReader.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/nodeReader.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AstNode } from './ast'; -import { lengthAdd, lengthZero, Length, lengthLessThan } from './length'; +import { AstNode } from './ast.js'; +import { lengthAdd, lengthZero, Length, lengthLessThan } from './length.js'; /** * Allows to efficiently find a longest child at a given offset in a fixed node. diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts index cdf202699..5ae84a106 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AstNode, AstNodeKind, BracketAstNode, InvalidBracketAstNode, ListAstNode, PairAstNode, TextAstNode } from './ast'; -import { BeforeEditPositionMapper, TextEditInfo } from './beforeEditPositionMapper'; -import { SmallImmutableSet } from './smallImmutableSet'; -import { lengthIsZero, lengthLessThan } from './length'; -import { concat23Trees, concat23TreesOfSameHeight } from './concat23Trees'; -import { NodeReader } from './nodeReader'; -import { OpeningBracketId, Tokenizer, TokenKind } from './tokenizer'; +import { AstNode, AstNodeKind, BracketAstNode, InvalidBracketAstNode, ListAstNode, PairAstNode, TextAstNode } from './ast.js'; +import { BeforeEditPositionMapper, TextEditInfo } from './beforeEditPositionMapper.js'; +import { SmallImmutableSet } from './smallImmutableSet.js'; +import { lengthIsZero, lengthLessThan } from './length.js'; +import { concat23Trees, concat23TreesOfSameHeight } from './concat23Trees.js'; +import { NodeReader } from './nodeReader.js'; +import { OpeningBracketId, Tokenizer, TokenKind } from './tokenizer.js'; /** * Non incrementally built ASTs are immutable. diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.ts index 54c9daaa9..ae8cce61d 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { NotSupportedError } from 'vs/base/common/errors'; -import { StandardTokenType, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { BracketAstNode, TextAstNode } from './ast'; -import { BracketTokens, LanguageAgnosticBracketTokens } from './brackets'; -import { Length, lengthAdd, lengthDiff, lengthGetColumnCountIfZeroLineCount, lengthToObj, lengthZero, toLength } from './length'; -import { SmallImmutableSet } from './smallImmutableSet'; +import { NotSupportedError } from '../../../../../base/common/errors.js'; +import { StandardTokenType, TokenMetadata } from '../../../encodedTokenAttributes.js'; +import { IViewLineTokens } from '../../../tokens/lineTokens.js'; +import { BracketAstNode, TextAstNode } from './ast.js'; +import { BracketTokens, LanguageAgnosticBracketTokens } from './brackets.js'; +import { Length, lengthAdd, lengthDiff, lengthGetColumnCountIfZeroLineCount, lengthToObj, lengthZero, toLength } from './length.js'; +import { SmallImmutableSet } from './smallImmutableSet.js'; export interface Tokenizer { readonly offset: Length; diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.ts index 0f9c341a4..2b431cb64 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color } from 'vs/base/common/color'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Range } from 'vs/editor/common/core/range'; -import { BracketPairColorizationOptions, IModelDecoration } from 'vs/editor/common/model'; -import { BracketInfo } from 'vs/editor/common/textModelBracketPairs'; -import { DecorationProvider } from 'vs/editor/common/model/decorationProvider'; -import { TextModel } from 'vs/editor/common/model/textModel'; +import { Color } from '../../../../base/common/color.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Range } from '../../core/range.js'; +import { BracketPairColorizationOptions, IModelDecoration } from '../../model.js'; +import { BracketInfo } from '../../textModelBracketPairs.js'; +import { DecorationProvider } from '../decorationProvider.js'; +import { TextModel } from '../textModel.js'; import { editorBracketHighlightingForeground1, editorBracketHighlightingForeground2, editorBracketHighlightingForeground3, editorBracketHighlightingForeground4, editorBracketHighlightingForeground5, editorBracketHighlightingForeground6, editorBracketHighlightingUnexpectedBracketForeground -} from 'vs/editor/common/core/editorColorRegistry'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { IModelOptionsChangedEvent } from 'vs/editor/common/textModelEvents'; +} from '../../core/editorColorRegistry.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { IModelOptionsChangedEvent } from '../../textModelEvents.js'; export class ColorizedBracketPairsDecorationProvider extends Disposable implements DecorationProvider { private colorizationOptions: BracketPairColorizationOptions; diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/fixBrackets.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/fixBrackets.ts index d9db75567..e35608b5b 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/fixBrackets.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/fixBrackets.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { AstNode, AstNodeKind } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast'; -import { LanguageAgnosticBracketTokens } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets'; -import { Length, lengthAdd, lengthGetColumnCountIfZeroLineCount, lengthZero } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; -import { parseDocument } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser'; -import { DenseKeyProvider } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet'; -import { ITokenizerSource, TextBufferTokenizer } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { ILanguageConfigurationService } from '../../languages/languageConfigurationRegistry.js'; +import { AstNode, AstNodeKind } from './bracketPairsTree/ast.js'; +import { LanguageAgnosticBracketTokens } from './bracketPairsTree/brackets.js'; +import { Length, lengthAdd, lengthGetColumnCountIfZeroLineCount, lengthZero } from './bracketPairsTree/length.js'; +import { parseDocument } from './bracketPairsTree/parser.js'; +import { DenseKeyProvider } from './bracketPairsTree/smallImmutableSet.js'; +import { ITokenizerSource, TextBufferTokenizer } from './bracketPairsTree/tokenizer.js'; +import { IViewLineTokens } from '../../tokens/lineTokens.js'; export function fixBracketsInLine(tokens: IViewLineTokens, languageConfigurationService: ILanguageConfigurationService): string { const denseKeyProvider = new DenseKeyProvider(); diff --git a/src/vs/editor/common/model/decorationProvider.ts b/src/vs/editor/common/model/decorationProvider.ts index af8452a61..0cb68740e 100644 --- a/src/vs/editor/common/model/decorationProvider.ts +++ b/src/vs/editor/common/model/decorationProvider.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration } from 'vs/editor/common/model'; +import { Event } from '../../../base/common/event.js'; +import { Range } from '../core/range.js'; +import { IModelDecoration } from '../model.js'; export interface DecorationProvider { /** diff --git a/src/vs/editor/common/model/editStack.ts b/src/vs/editor/common/model/editStack.ts index 8c9f1c4d6..b7a5fe537 100644 --- a/src/vs/editor/common/model/editStack.ts +++ b/src/vs/editor/common/model/editStack.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Selection } from 'vs/editor/common/core/selection'; -import { EndOfLineSequence, ICursorStateComputer, IValidEditOperation, ITextModel } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { IUndoRedoService, IResourceUndoRedoElement, UndoRedoElementType, IWorkspaceUndoRedoElement, UndoRedoGroup } from 'vs/platform/undoRedo/common/undoRedo'; -import { URI } from 'vs/base/common/uri'; -import { TextChange, compressConsecutiveTextChanges } from 'vs/editor/common/core/textChange'; -import * as buffer from 'vs/base/common/buffer'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { basename } from 'vs/base/common/resources'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; +import * as nls from '../../../nls.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { Selection } from '../core/selection.js'; +import { EndOfLineSequence, ICursorStateComputer, IValidEditOperation, ITextModel } from '../model.js'; +import { TextModel } from './textModel.js'; +import { IUndoRedoService, IResourceUndoRedoElement, UndoRedoElementType, IWorkspaceUndoRedoElement, UndoRedoGroup } from '../../../platform/undoRedo/common/undoRedo.js'; +import { URI } from '../../../base/common/uri.js'; +import { TextChange, compressConsecutiveTextChanges } from '../core/textChange.js'; +import * as buffer from '../../../base/common/buffer.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { basename } from '../../../base/common/resources.js'; +import { ISingleEditOperation } from '../core/editOperation.js'; function uriGetComparisonKey(resource: URI): string { return resource.toString(); diff --git a/src/vs/editor/common/model/fixedArray.ts b/src/vs/editor/common/model/fixedArray.ts index 1d57ce291..1ebfe07cb 100644 --- a/src/vs/editor/common/model/fixedArray.ts +++ b/src/vs/editor/common/model/fixedArray.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { arrayInsert } from 'vs/base/common/arrays'; +import { arrayInsert } from '../../../base/common/arrays.js'; /** * An array that avoids being sparse by always diff --git a/src/vs/editor/common/model/guidesTextModelPart.ts b/src/vs/editor/common/model/guidesTextModelPart.ts index 7963063d0..157717fa9 100644 --- a/src/vs/editor/common/model/guidesTextModelPart.ts +++ b/src/vs/editor/common/model/guidesTextModelPart.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findLast } from 'vs/base/common/arraysFind'; -import * as strings from 'vs/base/common/strings'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import type { TextModel } from 'vs/editor/common/model/textModel'; -import { TextModelPart } from 'vs/editor/common/model/textModelPart'; -import { computeIndentLevel } from 'vs/editor/common/model/utils'; -import { ILanguageConfigurationService, ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BracketGuideOptions, HorizontalGuidesState, IActiveIndentGuideInfo, IGuidesTextModelPart, IndentGuide, IndentGuideHorizontalLine } from 'vs/editor/common/textModelGuides'; -import { BugIndicatingError } from 'vs/base/common/errors'; +import { findLast } from '../../../base/common/arraysFind.js'; +import * as strings from '../../../base/common/strings.js'; +import { CursorColumns } from '../core/cursorColumns.js'; +import { IPosition, Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import type { TextModel } from './textModel.js'; +import { TextModelPart } from './textModelPart.js'; +import { computeIndentLevel } from './utils.js'; +import { ILanguageConfigurationService, ResolvedLanguageConfiguration } from '../languages/languageConfigurationRegistry.js'; +import { BracketGuideOptions, HorizontalGuidesState, IActiveIndentGuideInfo, IGuidesTextModelPart, IndentGuide, IndentGuideHorizontalLine } from '../textModelGuides.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; export class GuidesTextModelPart extends TextModelPart implements IGuidesTextModelPart { constructor( diff --git a/src/vs/editor/common/model/indentationGuesser.ts b/src/vs/editor/common/model/indentationGuesser.ts index bd32bfa27..ba6a7f640 100644 --- a/src/vs/editor/common/model/indentationGuesser.ts +++ b/src/vs/editor/common/model/indentationGuesser.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { ITextBuffer } from 'vs/editor/common/model'; +import { CharCode } from '../../../base/common/charCode.js'; +import { ITextBuffer } from '../model.js'; class SpacesDiffResult { public spacesDiff: number = 0; diff --git a/src/vs/editor/common/model/intervalTree.ts b/src/vs/editor/common/model/intervalTree.ts index ff5d9105d..99809d0f9 100644 --- a/src/vs/editor/common/model/intervalTree.ts +++ b/src/vs/editor/common/model/intervalTree.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { TrackedRangeStickiness, TrackedRangeStickiness as ActualTrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; +import { Range } from '../core/range.js'; +import { TrackedRangeStickiness, TrackedRangeStickiness as ActualTrackedRangeStickiness } from '../model.js'; +import { ModelDecorationOptions } from './textModel.js'; // // The red-black tree is based on the "Introduction to Algorithms" by Cormen, Leiserson and Rivest. diff --git a/src/vs/editor/common/model/mirrorTextModel.ts b/src/vs/editor/common/model/mirrorTextModel.ts index 19356007c..59482286e 100644 --- a/src/vs/editor/common/model/mirrorTextModel.ts +++ b/src/vs/editor/common/model/mirrorTextModel.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { splitLines } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { IModelContentChange } from 'vs/editor/common/textModelEvents'; -import { PrefixSumComputer } from 'vs/editor/common/model/prefixSumComputer'; +import { splitLines } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { Position } from '../core/position.js'; +import { IRange } from '../core/range.js'; +import { IModelContentChange } from '../textModelEvents.js'; +import { PrefixSumComputer } from './prefixSumComputer.js'; export interface IModelChangedEvent { /** diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts index 24f90651f..0d52df0cc 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { FindMatch, ITextSnapshot, SearchData } from 'vs/editor/common/model'; -import { NodeColor, SENTINEL, TreeNode, fixInsert, leftest, rbDelete, righttest, updateTreeMetadata } from 'vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase'; -import { Searcher, createFindMatch, isValidMatch } from 'vs/editor/common/model/textModelSearch'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { Position } from '../../core/position.js'; +import { Range } from '../../core/range.js'; +import { FindMatch, ITextSnapshot, SearchData } from '../../model.js'; +import { NodeColor, SENTINEL, TreeNode, fixInsert, leftest, rbDelete, righttest, updateTreeMetadata } from './rbTreeBase.js'; +import { Searcher, createFindMatch, isValidMatch } from '../textModelSearch.js'; // const lfRegex = new RegExp(/\r\n|\r|\n/g); const AverageBufferSize = 65535; diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts index a369298c0..42d1995e3 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import * as strings from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ApplyEditsResult, EndOfLinePreference, FindMatch, IInternalModelContentChange, ISingleEditOperationIdentifier, ITextBuffer, ITextSnapshot, ValidAnnotatedEditOperation, IValidEditOperation, SearchData } from 'vs/editor/common/model'; -import { PieceTreeBase, StringBuffer } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase'; -import { countEOL, StringEOL } from 'vs/editor/common/core/eolCounter'; -import { TextChange } from 'vs/editor/common/core/textChange'; -import { Disposable } from 'vs/base/common/lifecycle'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import * as strings from '../../../../base/common/strings.js'; +import { Position } from '../../core/position.js'; +import { Range } from '../../core/range.js'; +import { ApplyEditsResult, EndOfLinePreference, FindMatch, IInternalModelContentChange, ISingleEditOperationIdentifier, ITextBuffer, ITextSnapshot, ValidAnnotatedEditOperation, IValidEditOperation, SearchData } from '../../model.js'; +import { PieceTreeBase, StringBuffer } from './pieceTreeBase.js'; +import { countEOL, StringEOL } from '../../core/eolCounter.js'; +import { TextChange } from '../../core/textChange.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; export interface IValidatedEditOperation { sortIndex: number; diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.ts index 824a5674a..3ee4d8799 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import * as strings from 'vs/base/common/strings'; -import { DefaultEndOfLine, ITextBuffer, ITextBufferBuilder, ITextBufferFactory } from 'vs/editor/common/model'; -import { StringBuffer, createLineStarts, createLineStartsFast } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase'; -import { PieceTreeTextBuffer } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import * as strings from '../../../../base/common/strings.js'; +import { DefaultEndOfLine, ITextBuffer, ITextBufferBuilder, ITextBufferFactory } from '../../model.js'; +import { StringBuffer, createLineStarts, createLineStartsFast } from './pieceTreeBase.js'; +import { PieceTreeTextBuffer } from './pieceTreeTextBuffer.js'; class PieceTreeTextBufferFactory implements ITextBufferFactory { diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.ts index 1d6301b12..7dfd9d837 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Piece, PieceTreeBase } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase'; +import { Piece, PieceTreeBase } from './pieceTreeBase.js'; export class TreeNode { parent: TreeNode; diff --git a/src/vs/editor/common/model/prefixSumComputer.ts b/src/vs/editor/common/model/prefixSumComputer.ts index 0f3c18471..08376d50d 100644 --- a/src/vs/editor/common/model/prefixSumComputer.ts +++ b/src/vs/editor/common/model/prefixSumComputer.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { arrayInsert } from 'vs/base/common/arrays'; -import { toUint32 } from 'vs/base/common/uint'; +import { arrayInsert } from '../../../base/common/arrays.js'; +import { toUint32 } from '../../../base/common/uint.js'; export class PrefixSumComputer { diff --git a/src/vs/editor/common/model/textModel.ts b/src/vs/editor/common/model/textModel.ts index c5556c15a..0313e5c20 100644 --- a/src/vs/editor/common/model/textModel.ts +++ b/src/vs/editor/common/model/textModel.ts @@ -3,49 +3,50 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ArrayQueue, pushMany } from 'vs/base/common/arrays'; -import { VSBuffer, VSBufferReadableStream } from 'vs/base/common/buffer'; -import { Color } from 'vs/base/common/color'; -import { BugIndicatingError, illegalArgument, onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable, IDisposable, MutableDisposable, combinedDisposable } from 'vs/base/common/lifecycle'; -import { listenStream } from 'vs/base/common/stream'; -import * as strings from 'vs/base/common/strings'; -import { ThemeColor } from 'vs/base/common/themables'; -import { Constants } from 'vs/base/common/uint'; -import { URI } from 'vs/base/common/uri'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { countEOL } from 'vs/editor/common/core/eolCounter'; -import { normalizeIndentation } from 'vs/editor/common/core/indentation'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { TextChange } from 'vs/editor/common/core/textChange'; -import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/core/textModelDefaults'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { FormattingOptions } from 'vs/editor/common/languages'; -import { ILanguageSelection, ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import * as model from 'vs/editor/common/model'; -import { BracketPairsTextModelPart } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl'; -import { ColorizedBracketPairsDecorationProvider } from 'vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider'; -import { EditStack } from 'vs/editor/common/model/editStack'; -import { GuidesTextModelPart } from 'vs/editor/common/model/guidesTextModelPart'; -import { guessIndentation } from 'vs/editor/common/model/indentationGuesser'; -import { IntervalNode, IntervalTree, recomputeMaxEnd } from 'vs/editor/common/model/intervalTree'; -import { PieceTreeTextBuffer } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer'; -import { PieceTreeTextBufferBuilder } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder'; -import { SearchParams, TextModelSearch } from 'vs/editor/common/model/textModelSearch'; -import { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart'; -import { AttachedViews } from 'vs/editor/common/model/tokens'; -import { IBracketPairsTextModelPart } from 'vs/editor/common/textModelBracketPairs'; -import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelOptionsChangedEvent, InternalModelContentChangeEvent, LineInjectedText, ModelInjectedTextChangedEvent, ModelRawChange, ModelRawContentChangedEvent, ModelRawEOLChanged, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from 'vs/editor/common/textModelEvents'; -import { IGuidesTextModelPart } from 'vs/editor/common/textModelGuides'; -import { ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import { IUndoRedoService, ResourceEditStackSnapshot, UndoRedoGroup } from 'vs/platform/undoRedo/common/undoRedo'; +import { ArrayQueue, pushMany } from '../../../base/common/arrays.js'; +import { VSBuffer, VSBufferReadableStream } from '../../../base/common/buffer.js'; +import { Color } from '../../../base/common/color.js'; +import { BugIndicatingError, illegalArgument, onUnexpectedError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { Disposable, IDisposable, MutableDisposable, combinedDisposable } from '../../../base/common/lifecycle.js'; +import { listenStream } from '../../../base/common/stream.js'; +import * as strings from '../../../base/common/strings.js'; +import { ThemeColor } from '../../../base/common/themables.js'; +import { Constants } from '../../../base/common/uint.js'; +import { URI } from '../../../base/common/uri.js'; +import { ISingleEditOperation } from '../core/editOperation.js'; +import { countEOL } from '../core/eolCounter.js'; +import { normalizeIndentation } from '../core/indentation.js'; +import { IPosition, Position } from '../core/position.js'; +import { IRange, Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { TextChange } from '../core/textChange.js'; +import { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js'; +import { IWordAtPosition } from '../core/wordHelper.js'; +import { FormattingOptions } from '../languages.js'; +import { ILanguageSelection, ILanguageService } from '../languages/language.js'; +import { ILanguageConfigurationService } from '../languages/languageConfigurationRegistry.js'; +import * as model from '../model.js'; +import { BracketPairsTextModelPart } from './bracketPairsTextModelPart/bracketPairsImpl.js'; +import { ColorizedBracketPairsDecorationProvider } from './bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.js'; +import { EditStack } from './editStack.js'; +import { GuidesTextModelPart } from './guidesTextModelPart.js'; +import { guessIndentation } from './indentationGuesser.js'; +import { IntervalNode, IntervalTree, recomputeMaxEnd } from './intervalTree.js'; +import { PieceTreeTextBuffer } from './pieceTreeTextBuffer/pieceTreeTextBuffer.js'; +import { PieceTreeTextBufferBuilder } from './pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js'; +import { SearchParams, TextModelSearch } from './textModelSearch.js'; +import { TokenizationTextModelPart } from './tokenizationTextModelPart.js'; +import { AttachedViews } from './tokens.js'; +import { IBracketPairsTextModelPart } from '../textModelBracketPairs.js'; +import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelOptionsChangedEvent, InternalModelContentChangeEvent, LineInjectedText, ModelInjectedTextChangedEvent, ModelRawChange, ModelRawContentChangedEvent, ModelRawEOLChanged, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from '../textModelEvents.js'; +import { IGuidesTextModelPart } from '../textModelGuides.js'; +import { ITokenizationTextModelPart } from '../tokenizationTextModelPart.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { IColorTheme } from '../../../platform/theme/common/themeService.js'; +import { IUndoRedoService, ResourceEditStackSnapshot, UndoRedoGroup } from '../../../platform/undoRedo/common/undoRedo.js'; +import { TokenArray } from '../tokens/tokenArray.js'; export function createTextBufferFactory(text: string): model.ITextBufferFactory { const builder = new PieceTreeTextBufferBuilder(); @@ -2268,6 +2269,7 @@ export class ModelDecorationInjectedTextOptions implements model.InjectedTextOpt } public readonly content: string; + public readonly tokens: TokenArray | null; readonly inlineClassName: string | null; readonly inlineClassNameAffectsLetterSpacing: boolean; readonly attachedData: unknown | null; @@ -2275,6 +2277,7 @@ export class ModelDecorationInjectedTextOptions implements model.InjectedTextOpt private constructor(options: model.InjectedTextOptions) { this.content = options.content || ''; + this.tokens = options.tokens ?? null; this.inlineClassName = options.inlineClassName || null; this.inlineClassNameAffectsLetterSpacing = options.inlineClassNameAffectsLetterSpacing || false; this.attachedData = options.attachedData || null; diff --git a/src/vs/editor/common/model/textModelPart.ts b/src/vs/editor/common/model/textModelPart.ts index ef061c2ba..d1b2bebc8 100644 --- a/src/vs/editor/common/model/textModelPart.ts +++ b/src/vs/editor/common/model/textModelPart.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; +import { Disposable } from '../../../base/common/lifecycle.js'; export class TextModelPart extends Disposable { private _isDisposed = false; diff --git a/src/vs/editor/common/model/textModelSearch.ts b/src/vs/editor/common/model/textModelSearch.ts index 81f6cbc5e..ae259f035 100644 --- a/src/vs/editor/common/model/textModelSearch.ts +++ b/src/vs/editor/common/model/textModelSearch.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { WordCharacterClass, WordCharacterClassifier, getMapForWordSeparators } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { EndOfLinePreference, FindMatch, SearchData } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { WordCharacterClass, WordCharacterClassifier, getMapForWordSeparators } from '../core/wordCharacterClassifier.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { EndOfLinePreference, FindMatch, SearchData } from '../model.js'; +import { TextModel } from './textModel.js'; const LIMIT_FIND_COUNT = 999; diff --git a/src/vs/editor/common/model/textModelText.ts b/src/vs/editor/common/model/textModelText.ts index 0a603fa1e..0a4d6de53 100644 --- a/src/vs/editor/common/model/textModelText.ts +++ b/src/vs/editor/common/model/textModelText.ts @@ -3,20 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { AbstractText } from 'vs/editor/common/core/textEdit'; -import { TextLength } from 'vs/editor/common/core/textLength'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../core/range.js'; +import { AbstractText } from '../core/textEdit.js'; +import { TextLength } from '../core/textLength.js'; +import { ITextModel } from '../model.js'; export class TextModelText extends AbstractText { constructor(private readonly _textModel: ITextModel) { super(); } - getValueOfRange(range: Range): string { + override getValueOfRange(range: Range): string { return this._textModel.getValueInRange(range); } + override getLineLength(lineNumber: number): number { + return this._textModel.getLineLength(lineNumber); + } + get length(): TextLength { const lastLineNumber = this._textModel.getLineCount(); const lastLineLen = this._textModel.getLineLength(lastLineNumber); diff --git a/src/vs/editor/common/model/textModelTokens.ts b/src/vs/editor/common/model/textModelTokens.ts index fb1b7364d..85068d389 100644 --- a/src/vs/editor/common/model/textModelTokens.ts +++ b/src/vs/editor/common/model/textModelTokens.ts @@ -3,22 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IdleDeadline, runWhenGlobalIdle } from 'vs/base/common/async'; -import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; -import { setTimeout0 } from 'vs/base/common/platform'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { countEOL } from 'vs/editor/common/core/eolCounter'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Position } from 'vs/editor/common/core/position'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport } from 'vs/editor/common/languages'; -import { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; -import { ITextModel } from 'vs/editor/common/model'; -import { FixedArray } from 'vs/editor/common/model/fixedArray'; -import { IModelContentChange } from 'vs/editor/common/textModelEvents'; -import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { IdleDeadline, runWhenGlobalIdle } from '../../../base/common/async.js'; +import { BugIndicatingError, onUnexpectedError } from '../../../base/common/errors.js'; +import { setTimeout0 } from '../../../base/common/platform.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { countEOL } from '../core/eolCounter.js'; +import { LineRange } from '../core/lineRange.js'; +import { OffsetRange } from '../core/offsetRange.js'; +import { Position } from '../core/position.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport } from '../languages.js'; +import { nullTokenizeEncoded } from '../languages/nullTokenize.js'; +import { ITextModel } from '../model.js'; +import { FixedArray } from './fixedArray.js'; +import { IModelContentChange } from '../textModelEvents.js'; +import { ITokenizeLineWithEditResult, LineEditWithAdditionalLines } from '../tokenizationTextModelPart.js'; +import { ContiguousMultilineTokensBuilder } from '../tokens/contiguousMultilineTokensBuilder.js'; +import { LineTokens } from '../tokens/lineTokens.js'; const enum Constants { CHEAP_TOKENIZATION_LENGTH_LIMIT = 2048 @@ -101,18 +102,14 @@ export class TokenizerWithStateStoreAndTextModel } /** assumes state is up to date */ - public tokenizeLineWithEdit(position: Position, length: number, newText: string): LineTokens | null { - const lineNumber = position.lineNumber; - const column = position.column; - + public tokenizeLineWithEdit(lineNumber: number, edit: LineEditWithAdditionalLines): ITokenizeLineWithEditResult { const lineStartState = this.getStartState(lineNumber); if (!lineStartState) { - return null; + return { mainLineTokens: null, additionalLines: null }; } const curLineContent = this._textModel.getLineContent(lineNumber); - const newLineContent = curLineContent.substring(0, column - 1) - + newText + curLineContent.substring(column - 1 + length); + const newLineContent = edit.lineEdit.apply(curLineContent); const languageId = this._textModel.getLanguageIdAtPosition(lineNumber, 0); const result = safeTokenize( @@ -124,8 +121,19 @@ export class TokenizerWithStateStoreAndTextModel lineStartState ); - const lineTokens = new LineTokens(result.tokens, newLineContent, this._languageIdCodec); - return lineTokens; + let additionalLines: LineTokens[] | null = null; + if (edit.additionalLines) { + additionalLines = []; + let state = result.endState; + for (const line of edit.additionalLines) { + const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, line, true, state); + additionalLines.push(new LineTokens(r.tokens, line, this._languageIdCodec)); + state = r.endState; + } + } + + const mainLineTokens = new LineTokens(result.tokens, newLineContent, this._languageIdCodec); + return { mainLineTokens, additionalLines }; } public hasAccurateTokensForLine(lineNumber: number): boolean { diff --git a/src/vs/editor/common/model/tokenizationTextModelPart.ts b/src/vs/editor/common/model/tokenizationTextModelPart.ts index 47a665657..ae4bc09c8 100644 --- a/src/vs/editor/common/model/tokenizationTextModelPart.ts +++ b/src/vs/editor/common/model/tokenizationTextModelPart.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableMap, DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle'; -import { countEOL } from 'vs/editor/common/core/eolCounter'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IWordAtPosition, getWordAtText } from 'vs/editor/common/core/wordHelper'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry, TreeSitterTokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService, LanguageConfigurationServiceChangeEvent, ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IAttachedView } from 'vs/editor/common/model'; -import { BracketPairsTextModelPart } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { TextModelPart } from 'vs/editor/common/model/textModelPart'; -import { DefaultBackgroundTokenizer, TokenizerWithStateStoreAndTextModel, TrackingTokenizationStateStore } from 'vs/editor/common/model/textModelTokens'; -import { AbstractTokens, AttachedViewHandler, AttachedViews } from 'vs/editor/common/model/tokens'; -import { TreeSitterTokens } from 'vs/editor/common/model/treeSitterTokens'; -import { ITreeSitterParserService } from 'vs/editor/common/services/treeSitterParserService'; -import { IModelContentChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { BackgroundTokenizationState, ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; -import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; -import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; -import { ContiguousTokensStore } from 'vs/editor/common/tokens/contiguousTokensStore'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; -import { SparseTokensStore } from 'vs/editor/common/tokens/sparseTokensStore'; +import { CharCode } from '../../../base/common/charCode.js'; +import { BugIndicatingError, onUnexpectedError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableMap, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { countEOL } from '../core/eolCounter.js'; +import { LineRange } from '../core/lineRange.js'; +import { IPosition, Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { IWordAtPosition, getWordAtText } from '../core/wordHelper.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry, TreeSitterTokenizationRegistry } from '../languages.js'; +import { ILanguageService } from '../languages/language.js'; +import { ILanguageConfigurationService, LanguageConfigurationServiceChangeEvent, ResolvedLanguageConfiguration } from '../languages/languageConfigurationRegistry.js'; +import { IAttachedView } from '../model.js'; +import { BracketPairsTextModelPart } from './bracketPairsTextModelPart/bracketPairsImpl.js'; +import { TextModel } from './textModel.js'; +import { TextModelPart } from './textModelPart.js'; +import { DefaultBackgroundTokenizer, TokenizerWithStateStoreAndTextModel, TrackingTokenizationStateStore } from './textModelTokens.js'; +import { AbstractTokens, AttachedViewHandler, AttachedViews } from './tokens.js'; +import { TreeSitterTokens } from './treeSitterTokens.js'; +import { ITreeSitterParserService } from '../services/treeSitterParserService.js'; +import { IModelContentChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelTokensChangedEvent } from '../textModelEvents.js'; +import { BackgroundTokenizationState, ITokenizationTextModelPart, ITokenizeLineWithEditResult, LineEditWithAdditionalLines } from '../tokenizationTextModelPart.js'; +import { ContiguousMultilineTokens } from '../tokens/contiguousMultilineTokens.js'; +import { ContiguousMultilineTokensBuilder } from '../tokens/contiguousMultilineTokensBuilder.js'; +import { ContiguousTokensStore } from '../tokens/contiguousTokensStore.js'; +import { LineTokens } from '../tokens/lineTokens.js'; +import { SparseMultilineTokens } from '../tokens/sparseMultilineTokens.js'; +import { SparseTokensStore } from '../tokens/sparseTokensStore.js'; export class TokenizationTextModelPart extends TextModelPart implements ITokenizationTextModelPart { private readonly _semanticTokens: SparseTokensStore = new SparseTokensStore(this._languageService.languageIdCodec); @@ -208,8 +208,8 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz return this._tokens.getTokenTypeIfInsertingCharacter(lineNumber, column, character); } - public tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null { - return this._tokens.tokenizeLineWithEdit(position, length, newText); + public tokenizeLineWithEdit(lineNumber: number, edit: LineEditWithAdditionalLines): ITokenizeLineWithEditResult { + return this._tokens.tokenizeLineWithEdit(lineNumber, edit); } // #endregion @@ -654,14 +654,12 @@ class GrammarTokens extends AbstractTokens { return this._tokenizer.getTokenTypeIfInsertingCharacter(position, character); } - public tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null { + public tokenizeLineWithEdit(lineNumber: number, edit: LineEditWithAdditionalLines): ITokenizeLineWithEditResult { if (!this._tokenizer) { - return null; + return { mainLineTokens: null, additionalLines: null }; } - - const validatedPosition = this._textModel.validatePosition(position); - this.forceTokenization(validatedPosition.lineNumber); - return this._tokenizer.tokenizeLineWithEdit(validatedPosition, length, newText); + this.forceTokenization(lineNumber); + return this._tokenizer.tokenizeLineWithEdit(lineNumber, edit); } public get hasTokens(): boolean { diff --git a/src/vs/editor/common/model/tokens.ts b/src/vs/editor/common/model/tokens.ts index da46f267c..0e4ed5648 100644 --- a/src/vs/editor/common/model/tokens.ts +++ b/src/vs/editor/common/model/tokens.ts @@ -3,19 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals } from 'vs/base/common/arrays'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { IPosition } from 'vs/editor/common/core/position'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { IAttachedView } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { IModelContentChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { BackgroundTokenizationState } from 'vs/editor/common/tokenizationTextModelPart'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { equals } from '../../../base/common/arrays.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { LineRange } from '../core/lineRange.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { ILanguageIdCodec } from '../languages.js'; +import { IAttachedView } from '../model.js'; +import { TextModel } from './textModel.js'; +import { IModelContentChangedEvent, IModelTokensChangedEvent } from '../textModelEvents.js'; +import { BackgroundTokenizationState, ITokenizeLineWithEditResult, LineEditWithAdditionalLines } from '../tokenizationTextModelPart.js'; +import { LineTokens } from '../tokens/lineTokens.js'; /** * @internal @@ -132,7 +131,7 @@ export abstract class AbstractTokens extends Disposable { public abstract getTokenTypeIfInsertingCharacter(lineNumber: number, column: number, character: string): StandardTokenType; - public abstract tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null; + public abstract tokenizeLineWithEdit(lineNumber: number, edit: LineEditWithAdditionalLines): ITokenizeLineWithEditResult; public abstract get hasTokens(): boolean; } diff --git a/src/vs/editor/common/model/treeSitterTokens.ts b/src/vs/editor/common/model/treeSitterTokens.ts index 2da4bdc84..43ab00f0f 100644 --- a/src/vs/editor/common/model/treeSitterTokens.ts +++ b/src/vs/editor/common/model/treeSitterTokens.ts @@ -3,18 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILanguageIdCodec, ITreeSitterTokenizationSupport, TreeSitterTokenizationRegistry } from 'vs/editor/common/languages'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ITreeSitterParserService } from 'vs/editor/common/services/treeSitterParserService'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { AbstractTokens } from 'vs/editor/common/model/tokens'; -import { IPosition } from 'vs/editor/common/core/position'; +import { ILanguageIdCodec, ITreeSitterTokenizationSupport, TreeSitterTokenizationRegistry } from '../languages.js'; +import { LineTokens } from '../tokens/lineTokens.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; +import { TextModel } from './textModel.js'; +import { ITreeSitterParserService } from '../services/treeSitterParserService.js'; +import { IModelContentChangedEvent } from '../textModelEvents.js'; +import { AbstractTokens } from './tokens.js'; +import { ITokenizeLineWithEditResult, LineEditWithAdditionalLines } from '../tokenizationTextModelPart.js'; +import { IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; export class TreeSitterTokens extends AbstractTokens { private _tokenizationSupport: ITreeSitterTokenizationSupport | null = null; private _lastLanguageId: string | undefined; + private readonly _tokensChangedListener: MutableDisposable = this._register(new MutableDisposable()); constructor(private readonly _treeSitterService: ITreeSitterParserService, languageIdCodec: ILanguageIdCodec, @@ -30,6 +32,11 @@ export class TreeSitterTokens extends AbstractTokens { if (!this._tokenizationSupport || this._lastLanguageId !== newLanguage) { this._lastLanguageId = newLanguage; this._tokenizationSupport = TreeSitterTokenizationRegistry.get(newLanguage); + this._tokensChangedListener.value = this._tokenizationSupport?.onDidChangeTokens((e) => { + if (e.textModel === this._textModel) { + this._onDidChangeTokens.fire(e.changes); + } + }); } } @@ -88,9 +95,9 @@ export class TreeSitterTokens extends AbstractTokens { // TODO @alexr00 implement once we have custom parsing and don't just feed in the whole text model value return StandardTokenType.Other; } - public override tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null { + public override tokenizeLineWithEdit(lineNumber: number, edit: LineEditWithAdditionalLines): ITokenizeLineWithEditResult { // TODO @alexr00 understand what this is for and implement - return null; + return { mainLineTokens: null, additionalLines: null }; } public override get hasTokens(): boolean { // TODO @alexr00 once we have a token store, implement properly diff --git a/src/vs/editor/common/model/utils.ts b/src/vs/editor/common/model/utils.ts index 96148dfde..5fde2c377 100644 --- a/src/vs/editor/common/model/utils.ts +++ b/src/vs/editor/common/model/utils.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; +import { CharCode } from '../../../base/common/charCode.js'; /** * Returns: diff --git a/src/vs/editor/common/modelLineProjectionData.ts b/src/vs/editor/common/modelLineProjectionData.ts index 78d14ef17..f35a4adc6 100644 --- a/src/vs/editor/common/modelLineProjectionData.ts +++ b/src/vs/editor/common/modelLineProjectionData.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assertNever } from 'vs/base/common/assert'; -import { WrappingIndent } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { Position } from 'vs/editor/common/core/position'; -import { InjectedTextCursorStops, InjectedTextOptions, PositionAffinity } from 'vs/editor/common/model'; -import { LineInjectedText } from 'vs/editor/common/textModelEvents'; +import { assertNever } from '../../base/common/assert.js'; +import { WrappingIndent } from './config/editorOptions.js'; +import { FontInfo } from './config/fontInfo.js'; +import { Position } from './core/position.js'; +import { InjectedTextCursorStops, InjectedTextOptions, PositionAffinity } from './model.js'; +import { LineInjectedText } from './textModelEvents.js'; /** * *input*: diff --git a/src/vs/editor/common/services/editorBaseApi.ts b/src/vs/editor/common/services/editorBaseApi.ts index 3a27abbaf..6fbc1c4df 100644 --- a/src/vs/editor/common/services/editorBaseApi.ts +++ b/src/vs/editor/common/services/editorBaseApi.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { KeyChord, KeyMod as ConstKeyMod } from 'vs/base/common/keyCodes'; -import { URI } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Token } from 'vs/editor/common/languages'; -import * as standaloneEnums from 'vs/editor/common/standalone/standaloneEnums'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { KeyChord, KeyMod as ConstKeyMod } from '../../../base/common/keyCodes.js'; +import { URI } from '../../../base/common/uri.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { Token } from '../languages.js'; +import * as standaloneEnums from '../standalone/standaloneEnums.js'; export class KeyMod { public static readonly CtrlCmd: number = ConstKeyMod.CtrlCmd; diff --git a/src/vs/editor/common/services/editorSimpleWorker.esm.ts b/src/vs/editor/common/services/editorSimpleWorker.esm.ts index 5f659c76f..8d0e18738 100644 --- a/src/vs/editor/common/services/editorSimpleWorker.esm.ts +++ b/src/vs/editor/common/services/editorSimpleWorker.esm.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { create } from 'vs/editor/common/services/editorSimpleWorker'; -import { bootstrapSimpleEditorWorker } from './editorWorkerBootstrap'; +import { create } from './editorSimpleWorker.js'; +import { bootstrapSimpleEditorWorker } from './editorWorkerBootstrap.js'; bootstrapSimpleEditorWorker(create); diff --git a/src/vs/editor/common/services/editorSimpleWorker.ts b/src/vs/editor/common/services/editorSimpleWorker.ts index 4bf19b0d2..ff8bbb854 100644 --- a/src/vs/editor/common/services/editorSimpleWorker.ts +++ b/src/vs/editor/common/services/editorSimpleWorker.ts @@ -3,40 +3,40 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { stringDiff } from 'vs/base/common/diff/diff'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IRequestHandler, IWorkerServer } from 'vs/base/common/worker/simpleWorker'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; -import { IMirrorTextModel, IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; -import { IColorInformation, IInplaceReplaceSupportResult, ILink, TextEdit } from 'vs/editor/common/languages'; -import { computeLinks } from 'vs/editor/common/languages/linkComputer'; -import { BasicInplaceReplace } from 'vs/editor/common/languages/supports/inplaceReplaceSupport'; -import { DiffAlgorithmName, IDiffComputationResult, ILineChange, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; -import { createMonacoBaseAPI } from 'vs/editor/common/services/editorBaseApi'; -import { EditorWorkerHost } from './editorWorkerHost'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { UnicodeTextModelHighlighter, UnicodeHighlighterOptions } from 'vs/editor/common/services/unicodeTextModelHighlighter'; -import { DiffComputer, IChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { ILinesDiffComputer, ILinesDiffComputerOptions } from 'vs/editor/common/diff/linesDiffComputer'; -import { DetailedLineRangeMapping } from '../diff/rangeMapping'; -import { linesDiffComputers } from 'vs/editor/common/diff/linesDiffComputers'; -import { createProxyObject, getAllMethodNames } from 'vs/base/common/objects'; -import { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { AppResourcePath, FileAccess } from 'vs/base/common/network'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { computeDefaultDocumentColors } from 'vs/editor/common/languages/defaultDocumentColorsComputer'; -import { FindSectionHeaderOptions, SectionHeader, findSectionHeaders } from 'vs/editor/common/services/findSectionHeaders'; -import { IRawModelData, IWorkerTextModelSyncChannelServer } from './textModelSync/textModelSync.protocol'; -import { ICommonModel, WorkerTextModelSyncServer } from 'vs/editor/common/services/textModelSync/textModelSync.impl'; +import { stringDiff } from '../../../base/common/diff/diff.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IRequestHandler, IWorkerServer } from '../../../base/common/worker/simpleWorker.js'; +import { Position } from '../core/position.js'; +import { IRange, Range } from '../core/range.js'; +import { EndOfLineSequence, ITextModel } from '../model.js'; +import { IMirrorTextModel, IModelChangedEvent } from '../model/mirrorTextModel.js'; +import { IColorInformation, IInplaceReplaceSupportResult, ILink, TextEdit } from '../languages.js'; +import { computeLinks } from '../languages/linkComputer.js'; +import { BasicInplaceReplace } from '../languages/supports/inplaceReplaceSupport.js'; +import { DiffAlgorithmName, IDiffComputationResult, ILineChange, IUnicodeHighlightsResult } from './editorWorker.js'; +import { createMonacoBaseAPI } from './editorBaseApi.js'; +import { EditorWorkerHost } from './editorWorkerHost.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { UnicodeTextModelHighlighter, UnicodeHighlighterOptions } from './unicodeTextModelHighlighter.js'; +import { DiffComputer, IChange } from '../diff/legacyLinesDiffComputer.js'; +import { ILinesDiffComputer, ILinesDiffComputerOptions } from '../diff/linesDiffComputer.js'; +import { DetailedLineRangeMapping } from '../diff/rangeMapping.js'; +import { linesDiffComputers } from '../diff/linesDiffComputers.js'; +import { createProxyObject, getAllMethodNames } from '../../../base/common/objects.js'; +import { IDocumentDiffProviderOptions } from '../diff/documentDiffProvider.js'; +import { AppResourcePath, FileAccess } from '../../../base/common/network.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { computeDefaultDocumentColors } from '../languages/defaultDocumentColorsComputer.js'; +import { FindSectionHeaderOptions, SectionHeader, findSectionHeaders } from './findSectionHeaders.js'; +import { IRawModelData, IWorkerTextModelSyncChannelServer } from './textModelSync/textModelSync.protocol.js'; +import { ICommonModel, WorkerTextModelSyncServer } from './textModelSync/textModelSync.impl.js'; // ESM-comment-begin -const isESM = false; +// const isESM = false; // ESM-comment-end // ESM-uncomment-begin -// const isESM = true; +const isESM = true; // ESM-uncomment-end export interface IMirrorModel extends IMirrorTextModel { diff --git a/src/vs/editor/common/services/editorWorker.ts b/src/vs/editor/common/services/editorWorker.ts index 74fe752bb..c7b03cd78 100644 --- a/src/vs/editor/common/services/editorWorker.ts +++ b/src/vs/editor/common/services/editorWorker.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IRange } from 'vs/editor/common/core/range'; -import { IDocumentDiff, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { IChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { IColorInformation, IInplaceReplaceSupportResult, TextEdit } from 'vs/editor/common/languages'; -import { UnicodeHighlighterOptions } from 'vs/editor/common/services/unicodeTextModelHighlighter'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import type { BaseEditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker'; -import { SectionHeader, FindSectionHeaderOptions } from 'vs/editor/common/services/findSectionHeaders'; +import { URI } from '../../../base/common/uri.js'; +import { IRange } from '../core/range.js'; +import { IDocumentDiff, IDocumentDiffProviderOptions } from '../diff/documentDiffProvider.js'; +import { IChange } from '../diff/legacyLinesDiffComputer.js'; +import { IColorInformation, IInplaceReplaceSupportResult, TextEdit } from '../languages.js'; +import { UnicodeHighlighterOptions } from './unicodeTextModelHighlighter.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import type { BaseEditorSimpleWorker } from './editorSimpleWorker.js'; +import { SectionHeader, FindSectionHeaderOptions } from './findSectionHeaders.js'; export const IEditorWorkerService = createDecorator('editorWorkerService'); diff --git a/src/vs/editor/common/services/editorWorkerBootstrap.ts b/src/vs/editor/common/services/editorWorkerBootstrap.ts index 160942a1d..f754fe8fd 100644 --- a/src/vs/editor/common/services/editorWorkerBootstrap.ts +++ b/src/vs/editor/common/services/editorWorkerBootstrap.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IWorkerServer, SimpleWorkerServer } from 'vs/base/common/worker/simpleWorker'; -import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker'; -import { EditorWorkerHost } from 'vs/editor/common/services/editorWorkerHost'; +import { IWorkerServer, SimpleWorkerServer } from '../../../base/common/worker/simpleWorker.js'; +import { EditorSimpleWorker } from './editorSimpleWorker.js'; +import { EditorWorkerHost } from './editorWorkerHost.js'; type MessageEvent = { data: any; diff --git a/src/vs/editor/common/services/editorWorkerHost.ts b/src/vs/editor/common/services/editorWorkerHost.ts index 30ceed183..54751e1ce 100644 --- a/src/vs/editor/common/services/editorWorkerHost.ts +++ b/src/vs/editor/common/services/editorWorkerHost.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IWorkerServer, IWorkerClient } from 'vs/base/common/worker/simpleWorker'; +import { IWorkerServer, IWorkerClient } from '../../../base/common/worker/simpleWorker.js'; export abstract class EditorWorkerHost { public static CHANNEL_NAME = 'editorWorkerHost'; diff --git a/src/vs/editor/common/services/findSectionHeaders.ts b/src/vs/editor/common/services/findSectionHeaders.ts index 8e03723d0..9c80a3a22 100644 --- a/src/vs/editor/common/services/findSectionHeaders.ts +++ b/src/vs/editor/common/services/findSectionHeaders.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IRange } from 'vs/editor/common/core/range'; -import { FoldingRules } from 'vs/editor/common/languages/languageConfiguration'; +import { IRange } from '../core/range.js'; +import { FoldingRules } from '../languages/languageConfiguration.js'; export interface ISectionHeaderFinderTarget { getLineCount(): number; diff --git a/src/vs/editor/common/services/getIconClasses.ts b/src/vs/editor/common/services/getIconClasses.ts index 1f3bea995..61fd63dc8 100644 --- a/src/vs/editor/common/services/getIconClasses.ts +++ b/src/vs/editor/common/services/getIconClasses.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Schemas } from 'vs/base/common/network'; -import { DataUri } from 'vs/base/common/resources'; -import { URI, URI as uri } from 'vs/base/common/uri'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelService } from 'vs/editor/common/services/model'; -import { FileKind } from 'vs/platform/files/common/files'; -import { ThemeIcon } from 'vs/base/common/themables'; +import { Schemas } from '../../../base/common/network.js'; +import { DataUri } from '../../../base/common/resources.js'; +import { URI, URI as uri } from '../../../base/common/uri.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js'; +import { ILanguageService } from '../languages/language.js'; +import { IModelService } from './model.js'; +import { FileKind } from '../../../platform/files/common/files.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; const fileIconDirectoryRegex = /(?:\/|^)(?:([^\/]+)\/)?([^\/]+)$/; diff --git a/src/vs/editor/common/services/languageFeatureDebounce.ts b/src/vs/editor/common/services/languageFeatureDebounce.ts index 5f82d301a..f4a2b3b4d 100644 --- a/src/vs/editor/common/services/languageFeatureDebounce.ts +++ b/src/vs/editor/common/services/languageFeatureDebounce.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { doHash } from 'vs/base/common/hash'; -import { LRUCache } from 'vs/base/common/map'; -import { clamp, MovingAverage, SlidingWindowAverage } from 'vs/base/common/numbers'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { matchesScheme } from 'vs/base/common/network'; +import { doHash } from '../../../base/common/hash.js'; +import { LRUCache } from '../../../base/common/map.js'; +import { clamp, MovingAverage, SlidingWindowAverage } from '../../../base/common/numbers.js'; +import { LanguageFeatureRegistry } from '../languageFeatureRegistry.js'; +import { ITextModel } from '../model.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { matchesScheme } from '../../../base/common/network.js'; export const ILanguageFeatureDebounceService = createDecorator('ILanguageFeatureDebounceService'); diff --git a/src/vs/editor/common/services/languageFeatures.ts b/src/vs/editor/common/services/languageFeatures.ts index 205d1b86f..13977f1c1 100644 --- a/src/vs/editor/common/services/languageFeatures.ts +++ b/src/vs/editor/common/services/languageFeatures.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LanguageFeatureRegistry, NotebookInfoResolver } from 'vs/editor/common/languageFeatureRegistry'; -import { CodeActionProvider, CodeLensProvider, CompletionItemProvider, DeclarationProvider, DefinitionProvider, DocumentColorProvider, DocumentFormattingEditProvider, DocumentHighlightProvider, DocumentDropEditProvider, DocumentPasteEditProvider, DocumentRangeFormattingEditProvider, DocumentRangeSemanticTokensProvider, DocumentSemanticTokensProvider, DocumentSymbolProvider, EvaluatableExpressionProvider, FoldingRangeProvider, HoverProvider, ImplementationProvider, InlayHintsProvider, InlineCompletionsProvider, InlineValuesProvider, LinkedEditingRangeProvider, LinkProvider, MappedEditsProvider, MultiDocumentHighlightProvider, NewSymbolNamesProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, SelectionRangeProvider, SignatureHelpProvider, TypeDefinitionProvider, InlineEditProvider } from 'vs/editor/common/languages'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { LanguageFeatureRegistry, NotebookInfoResolver } from '../languageFeatureRegistry.js'; +import { CodeActionProvider, CodeLensProvider, CompletionItemProvider, DeclarationProvider, DefinitionProvider, DocumentColorProvider, DocumentFormattingEditProvider, DocumentHighlightProvider, DocumentDropEditProvider, DocumentPasteEditProvider, DocumentRangeFormattingEditProvider, DocumentRangeSemanticTokensProvider, DocumentSemanticTokensProvider, DocumentSymbolProvider, EvaluatableExpressionProvider, FoldingRangeProvider, HoverProvider, ImplementationProvider, InlayHintsProvider, InlineCompletionsProvider, InlineValuesProvider, LinkedEditingRangeProvider, LinkProvider, MappedEditsProvider, MultiDocumentHighlightProvider, NewSymbolNamesProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, SelectionRangeProvider, SignatureHelpProvider, TypeDefinitionProvider, InlineEditProvider } from '../languages.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export const ILanguageFeaturesService = createDecorator('ILanguageFeaturesService'); diff --git a/src/vs/editor/common/services/languageFeaturesService.ts b/src/vs/editor/common/services/languageFeaturesService.ts index 2b1384ba0..5c8d6de69 100644 --- a/src/vs/editor/common/services/languageFeaturesService.ts +++ b/src/vs/editor/common/services/languageFeaturesService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { LanguageFeatureRegistry, NotebookInfo, NotebookInfoResolver } from 'vs/editor/common/languageFeatureRegistry'; -import { CodeActionProvider, CodeLensProvider, CompletionItemProvider, DocumentPasteEditProvider, DeclarationProvider, DefinitionProvider, DocumentColorProvider, DocumentFormattingEditProvider, MultiDocumentHighlightProvider, DocumentHighlightProvider, DocumentDropEditProvider, DocumentRangeFormattingEditProvider, DocumentRangeSemanticTokensProvider, DocumentSemanticTokensProvider, DocumentSymbolProvider, EvaluatableExpressionProvider, FoldingRangeProvider, HoverProvider, ImplementationProvider, InlayHintsProvider, InlineCompletionsProvider, InlineValuesProvider, LinkedEditingRangeProvider, LinkProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, SelectionRangeProvider, SignatureHelpProvider, TypeDefinitionProvider, MappedEditsProvider, NewSymbolNamesProvider, InlineEditProvider } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { URI } from '../../../base/common/uri.js'; +import { LanguageFeatureRegistry, NotebookInfo, NotebookInfoResolver } from '../languageFeatureRegistry.js'; +import { CodeActionProvider, CodeLensProvider, CompletionItemProvider, DocumentPasteEditProvider, DeclarationProvider, DefinitionProvider, DocumentColorProvider, DocumentFormattingEditProvider, MultiDocumentHighlightProvider, DocumentHighlightProvider, DocumentDropEditProvider, DocumentRangeFormattingEditProvider, DocumentRangeSemanticTokensProvider, DocumentSemanticTokensProvider, DocumentSymbolProvider, EvaluatableExpressionProvider, FoldingRangeProvider, HoverProvider, ImplementationProvider, InlayHintsProvider, InlineCompletionsProvider, InlineValuesProvider, LinkedEditingRangeProvider, LinkProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, SelectionRangeProvider, SignatureHelpProvider, TypeDefinitionProvider, MappedEditsProvider, NewSymbolNamesProvider, InlineEditProvider } from '../languages.js'; +import { ILanguageFeaturesService } from './languageFeatures.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; export class LanguageFeaturesService implements ILanguageFeaturesService { diff --git a/src/vs/editor/common/services/languageService.ts b/src/vs/editor/common/services/languageService.ts index f0a7f8350..dffe6ea3d 100644 --- a/src/vs/editor/common/services/languageService.ts +++ b/src/vs/editor/common/services/languageService.ts @@ -3,15 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { LanguagesRegistry } from 'vs/editor/common/services/languagesRegistry'; -import { ILanguageNameIdPair, ILanguageSelection, ILanguageService, ILanguageIcon, ILanguageExtensionPoint } from 'vs/editor/common/languages/language'; -import { firstOrDefault } from 'vs/base/common/arrays'; -import { ILanguageIdCodec, TokenizationRegistry } from 'vs/editor/common/languages'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { IObservable, observableFromEvent } from 'vs/base/common/observable'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { LanguagesRegistry } from './languagesRegistry.js'; +import { ILanguageNameIdPair, ILanguageSelection, ILanguageService, ILanguageIcon, ILanguageExtensionPoint } from '../languages/language.js'; +import { ILanguageIdCodec, TokenizationRegistry } from '../languages.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js'; +import { IObservable, observableFromEvent } from '../../../base/common/observable.js'; export class LanguageService extends Disposable implements ILanguageService { public _serviceBrand: undefined; @@ -96,7 +95,7 @@ export class LanguageService extends Disposable implements ILanguageService { public guessLanguageIdByFilepathOrFirstLine(resource: URI | null, firstLine?: string): string | null { const languageIds = this._registry.guessLanguageIdByFilepathOrFirstLine(resource, firstLine); - return firstOrDefault(languageIds, null); + return languageIds.at(0) ?? null; } public createById(languageId: string | null | undefined): ILanguageSelection { diff --git a/src/vs/editor/common/services/languagesAssociations.ts b/src/vs/editor/common/services/languagesAssociations.ts index ac7eb2b56..2bfe45a87 100644 --- a/src/vs/editor/common/services/languagesAssociations.ts +++ b/src/vs/editor/common/services/languagesAssociations.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ParsedPattern, parse } from 'vs/base/common/glob'; -import { Mimes } from 'vs/base/common/mime'; -import { Schemas } from 'vs/base/common/network'; -import { basename, posix } from 'vs/base/common/path'; -import { DataUri } from 'vs/base/common/resources'; -import { startsWithUTF8BOM } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; +import { ParsedPattern, parse } from '../../../base/common/glob.js'; +import { Mimes } from '../../../base/common/mime.js'; +import { Schemas } from '../../../base/common/network.js'; +import { basename, posix } from '../../../base/common/path.js'; +import { DataUri } from '../../../base/common/resources.js'; +import { startsWithUTF8BOM } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js'; export interface ILanguageAssociation { readonly id: string; diff --git a/src/vs/editor/common/services/languagesRegistry.ts b/src/vs/editor/common/services/languagesRegistry.ts index 9216a6255..3ea71cff4 100644 --- a/src/vs/editor/common/services/languagesRegistry.ts +++ b/src/vs/editor/common/services/languagesRegistry.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { compareIgnoreCase, regExpLeadsToEndlessLoop } from 'vs/base/common/strings'; -import { clearPlatformLanguageAssociations, getLanguageIds, registerPlatformLanguageAssociation } from 'vs/editor/common/services/languagesAssociations'; -import { URI } from 'vs/base/common/uri'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { LanguageId } from 'vs/editor/common/encodedTokenAttributes'; -import { ModesRegistry, PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ILanguageExtensionPoint, ILanguageNameIdPair, ILanguageIcon } from 'vs/editor/common/languages/language'; -import { Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { compareIgnoreCase, regExpLeadsToEndlessLoop } from '../../../base/common/strings.js'; +import { clearPlatformLanguageAssociations, getLanguageIds, registerPlatformLanguageAssociation } from './languagesAssociations.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILanguageIdCodec } from '../languages.js'; +import { LanguageId } from '../encodedTokenAttributes.js'; +import { ModesRegistry, PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js'; +import { ILanguageExtensionPoint, ILanguageNameIdPair, ILanguageIcon } from '../languages/language.js'; +import { Extensions, IConfigurationRegistry } from '../../../platform/configuration/common/configurationRegistry.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; const hasOwnProperty = Object.prototype.hasOwnProperty; const NULL_LANGUAGE_ID = 'vs.editor.nullLanguage'; diff --git a/src/vs/editor/common/services/markerDecorations.ts b/src/vs/editor/common/services/markerDecorations.ts index 221f72379..8b315075c 100644 --- a/src/vs/editor/common/services/markerDecorations.ts +++ b/src/vs/editor/common/services/markerDecorations.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITextModel, IModelDecoration } from 'vs/editor/common/model'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IMarker } from 'vs/platform/markers/common/markers'; -import { Event } from 'vs/base/common/event'; -import { Range } from 'vs/editor/common/core/range'; -import { URI } from 'vs/base/common/uri'; +import { ITextModel, IModelDecoration } from '../model.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IMarker } from '../../../platform/markers/common/markers.js'; +import { Event } from '../../../base/common/event.js'; +import { Range } from '../core/range.js'; +import { URI } from '../../../base/common/uri.js'; export const IMarkerDecorationsService = createDecorator('markerDecorationsService'); diff --git a/src/vs/editor/common/services/markerDecorationsService.ts b/src/vs/editor/common/services/markerDecorationsService.ts index de2c54e9e..7cbd80e89 100644 --- a/src/vs/editor/common/services/markerDecorationsService.ts +++ b/src/vs/editor/common/services/markerDecorationsService.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMarkerService, IMarker, MarkerSeverity, MarkerTag } from 'vs/platform/markers/common/markers'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IModelDeltaDecoration, ITextModel, IModelDecorationOptions, TrackedRangeStickiness, OverviewRulerLane, IModelDecoration, MinimapPosition, IModelDecorationMinimapOptions } from 'vs/editor/common/model'; -import { ClassName } from 'vs/editor/common/model/intervalTree'; -import { themeColorFromId } from 'vs/platform/theme/common/themeService'; -import { ThemeColor } from 'vs/base/common/themables'; -import { overviewRulerWarning, overviewRulerInfo, overviewRulerError } from 'vs/editor/common/core/editorColorRegistry'; -import { IModelService } from 'vs/editor/common/services/model'; -import { Range } from 'vs/editor/common/core/range'; -import { IMarkerDecorationsService } from 'vs/editor/common/services/markerDecorations'; -import { Schemas } from 'vs/base/common/network'; -import { Emitter, Event } from 'vs/base/common/event'; -import { minimapInfo, minimapWarning, minimapError } from 'vs/platform/theme/common/colorRegistry'; -import { BidirectionalMap, ResourceMap } from 'vs/base/common/map'; -import { diffSets } from 'vs/base/common/collections'; +import { IMarkerService, IMarker, MarkerSeverity, MarkerTag } from '../../../platform/markers/common/markers.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IModelDeltaDecoration, ITextModel, IModelDecorationOptions, TrackedRangeStickiness, OverviewRulerLane, IModelDecoration, MinimapPosition, IModelDecorationMinimapOptions } from '../model.js'; +import { ClassName } from '../model/intervalTree.js'; +import { themeColorFromId } from '../../../platform/theme/common/themeService.js'; +import { ThemeColor } from '../../../base/common/themables.js'; +import { overviewRulerWarning, overviewRulerInfo, overviewRulerError } from '../core/editorColorRegistry.js'; +import { IModelService } from './model.js'; +import { Range } from '../core/range.js'; +import { IMarkerDecorationsService } from './markerDecorations.js'; +import { Schemas } from '../../../base/common/network.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { minimapInfo, minimapWarning, minimapError } from '../../../platform/theme/common/colorRegistry.js'; +import { BidirectionalMap, ResourceMap } from '../../../base/common/map.js'; +import { diffSets } from '../../../base/common/collections.js'; export class MarkerDecorationsService extends Disposable implements IMarkerDecorationsService { diff --git a/src/vs/editor/common/services/model.ts b/src/vs/editor/common/services/model.ts index 173553996..d7eda7d89 100644 --- a/src/vs/editor/common/services/model.ts +++ b/src/vs/editor/common/services/model.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { ITextBufferFactory, ITextModel, ITextModelCreationOptions } from 'vs/editor/common/model'; -import { ILanguageSelection } from 'vs/editor/common/languages/language'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { DocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider } from 'vs/editor/common/languages'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { ITextBufferFactory, ITextModel, ITextModelCreationOptions } from '../model.js'; +import { ILanguageSelection } from '../languages/language.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { DocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider } from '../languages.js'; export const IModelService = createDecorator('modelService'); diff --git a/src/vs/editor/common/services/modelService.ts b/src/vs/editor/common/services/modelService.ts index 00019d6f9..c0293db83 100644 --- a/src/vs/editor/common/services/modelService.ts +++ b/src/vs/editor/common/services/modelService.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { DefaultEndOfLine, EndOfLinePreference, EndOfLineSequence, ITextBuffer, ITextBufferFactory, ITextModel, ITextModelCreationOptions } from 'vs/editor/common/model'; -import { TextModel, createTextBuffer } from 'vs/editor/common/model/textModel'; -import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/core/textModelDefaults'; -import { IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ILanguageSelection } from 'vs/editor/common/languages/language'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IUndoRedoService, ResourceEditStackSnapshot } from 'vs/platform/undoRedo/common/undoRedo'; -import { StringSHA1 } from 'vs/base/common/hash'; -import { isEditStackElement } from 'vs/editor/common/model/editStack'; -import { Schemas } from 'vs/base/common/network'; -import { equals } from 'vs/base/common/objects'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import * as platform from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { EditOperation, ISingleEditOperation } from '../core/editOperation.js'; +import { Range } from '../core/range.js'; +import { DefaultEndOfLine, EndOfLinePreference, EndOfLineSequence, ITextBuffer, ITextBufferFactory, ITextModel, ITextModelCreationOptions } from '../model.js'; +import { TextModel, createTextBuffer } from '../model/textModel.js'; +import { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js'; +import { IModelLanguageChangedEvent } from '../textModelEvents.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js'; +import { ILanguageSelection } from '../languages/language.js'; +import { IModelService } from './model.js'; +import { ITextResourcePropertiesService } from './textResourceConfiguration.js'; +import { IConfigurationChangeEvent, IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { IUndoRedoService, ResourceEditStackSnapshot } from '../../../platform/undoRedo/common/undoRedo.js'; +import { StringSHA1 } from '../../../base/common/hash.js'; +import { isEditStackElement } from '../model/editStack.js'; +import { Schemas } from '../../../base/common/network.js'; +import { equals } from '../../../base/common/objects.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; function MODEL_ID(resource: URI): string { return resource.toString(); diff --git a/src/vs/editor/common/services/modelUndoRedoParticipant.ts b/src/vs/editor/common/services/modelUndoRedoParticipant.ts index c199b6bb7..ffb0760eb 100644 --- a/src/vs/editor/common/services/modelUndoRedoParticipant.ts +++ b/src/vs/editor/common/services/modelUndoRedoParticipant.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; -import { IUndoRedoDelegate, MultiModelEditStackElement } from 'vs/editor/common/model/editStack'; +import { IModelService } from './model.js'; +import { ITextModelService } from './resolverService.js'; +import { Disposable, IDisposable, dispose } from '../../../base/common/lifecycle.js'; +import { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js'; +import { IUndoRedoDelegate, MultiModelEditStackElement } from '../model/editStack.js'; export class ModelUndoRedoParticipant extends Disposable implements IUndoRedoDelegate { constructor( diff --git a/src/vs/editor/common/services/resolverService.ts b/src/vs/editor/common/services/resolverService.ts index d8eac79e3..348f4b341 100644 --- a/src/vs/editor/common/services/resolverService.ts +++ b/src/vs/editor/common/services/resolverService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IDisposable, IReference } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ITextModel, ITextSnapshot } from 'vs/editor/common/model'; -import { IResolvableEditorModel } from 'vs/platform/editor/common/editor'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IDisposable, IReference } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { ITextModel, ITextSnapshot } from '../model.js'; +import { IResolvableEditorModel } from '../../../platform/editor/common/editor.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export const ITextModelService = createDecorator('textModelService'); diff --git a/src/vs/editor/common/services/semanticTokensDto.ts b/src/vs/editor/common/services/semanticTokensDto.ts index 652ae69b6..4fd9cc888 100644 --- a/src/vs/editor/common/services/semanticTokensDto.ts +++ b/src/vs/editor/common/services/semanticTokensDto.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import * as platform from 'vs/base/common/platform'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import * as platform from '../../../base/common/platform.js'; export interface IFullSemanticTokensDto { id: number; diff --git a/src/vs/editor/common/services/semanticTokensProviderStyling.ts b/src/vs/editor/common/services/semanticTokensProviderStyling.ts index 1bb2e0d6e..ca9026d66 100644 --- a/src/vs/editor/common/services/semanticTokensProviderStyling.ts +++ b/src/vs/editor/common/services/semanticTokensProviderStyling.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SemanticTokensLegend, SemanticTokens } from 'vs/editor/common/languages'; -import { FontStyle, MetadataConsts, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ILogService, LogLevel } from 'vs/platform/log/common/log'; -import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; -import { ILanguageService } from 'vs/editor/common/languages/language'; +import { SemanticTokensLegend, SemanticTokens } from '../languages.js'; +import { FontStyle, MetadataConsts, TokenMetadata } from '../encodedTokenAttributes.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { ILogService, LogLevel } from '../../../platform/log/common/log.js'; +import { SparseMultilineTokens } from '../tokens/sparseMultilineTokens.js'; +import { ILanguageService } from '../languages/language.js'; const enum SemanticTokensProviderStylingConstants { NO_STYLING = 0b01111111111111111111111111111111 diff --git a/src/vs/editor/common/services/semanticTokensStyling.ts b/src/vs/editor/common/services/semanticTokensStyling.ts index 935c9aed5..6ee050718 100644 --- a/src/vs/editor/common/services/semanticTokensStyling.ts +++ b/src/vs/editor/common/services/semanticTokensStyling.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { DocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider } from 'vs/editor/common/languages'; -import { SemanticTokensProviderStyling } from 'vs/editor/common/services/semanticTokensProviderStyling'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { DocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider } from '../languages.js'; +import { SemanticTokensProviderStyling } from './semanticTokensProviderStyling.js'; export const ISemanticTokensStylingService = createDecorator('semanticTokensStylingService'); diff --git a/src/vs/editor/common/services/semanticTokensStylingService.ts b/src/vs/editor/common/services/semanticTokensStylingService.ts index 8aba1f0a6..5479905c4 100644 --- a/src/vs/editor/common/services/semanticTokensStylingService.ts +++ b/src/vs/editor/common/services/semanticTokensStylingService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { DocumentTokensProvider } from 'vs/editor/common/services/model'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { SemanticTokensProviderStyling } from 'vs/editor/common/services/semanticTokensProviderStyling'; -import { ISemanticTokensStylingService } from 'vs/editor/common/services/semanticTokensStyling'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ILanguageService } from '../languages/language.js'; +import { DocumentTokensProvider } from './model.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { SemanticTokensProviderStyling } from './semanticTokensProviderStyling.js'; +import { ISemanticTokensStylingService } from './semanticTokensStyling.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; export class SemanticTokensStylingService extends Disposable implements ISemanticTokensStylingService { diff --git a/src/vs/editor/common/services/textModelSync/textModelSync.impl.ts b/src/vs/editor/common/services/textModelSync/textModelSync.impl.ts index dc68d6664..77bb17bec 100644 --- a/src/vs/editor/common/services/textModelSync/textModelSync.impl.ts +++ b/src/vs/editor/common/services/textModelSync/textModelSync.impl.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IntervalTimer } from 'vs/base/common/async'; -import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IWorkerClient, IWorkerServer } from 'vs/base/common/worker/simpleWorker'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ensureValidWordDefinition, getWordAtText, IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { IDocumentColorComputerTarget } from 'vs/editor/common/languages/defaultDocumentColorsComputer'; -import { ILinkComputerTarget } from 'vs/editor/common/languages/linkComputer'; -import { MirrorTextModel as BaseMirrorModel, IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; -import { IMirrorModel, IWordRange } from 'vs/editor/common/services/editorSimpleWorker'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IRawModelData, IWorkerTextModelSyncChannelServer } from 'vs/editor/common/services/textModelSync/textModelSync.protocol'; +import { IntervalTimer } from '../../../../base/common/async.js'; +import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IWorkerClient, IWorkerServer } from '../../../../base/common/worker/simpleWorker.js'; +import { IPosition, Position } from '../../core/position.js'; +import { IRange, Range } from '../../core/range.js'; +import { ensureValidWordDefinition, getWordAtText, IWordAtPosition } from '../../core/wordHelper.js'; +import { IDocumentColorComputerTarget } from '../../languages/defaultDocumentColorsComputer.js'; +import { ILinkComputerTarget } from '../../languages/linkComputer.js'; +import { MirrorTextModel as BaseMirrorModel, IModelChangedEvent } from '../../model/mirrorTextModel.js'; +import { IMirrorModel, IWordRange } from '../editorSimpleWorker.js'; +import { IModelService } from '../model.js'; +import { IRawModelData, IWorkerTextModelSyncChannelServer } from './textModelSync.protocol.js'; /** * Stop syncing a model to the worker if it was not needed for 1 min. diff --git a/src/vs/editor/common/services/textModelSync/textModelSync.protocol.ts b/src/vs/editor/common/services/textModelSync/textModelSync.protocol.ts index 5ffbf6a0c..a9100cd50 100644 --- a/src/vs/editor/common/services/textModelSync/textModelSync.protocol.ts +++ b/src/vs/editor/common/services/textModelSync/textModelSync.protocol.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; +import { IModelChangedEvent } from '../../model/mirrorTextModel.js'; export interface IWorkerTextModelSyncChannelServer { $acceptNewModel(data: IRawModelData): void; diff --git a/src/vs/editor/common/services/textResourceConfiguration.ts b/src/vs/editor/common/services/textResourceConfiguration.ts index 0921cba71..f2edf685f 100644 --- a/src/vs/editor/common/services/textResourceConfiguration.ts +++ b/src/vs/editor/common/services/textResourceConfiguration.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { IPosition } from 'vs/editor/common/core/position'; -import { ConfigurationTarget, IConfigurationValue } from 'vs/platform/configuration/common/configuration'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { IPosition } from '../core/position.js'; +import { ConfigurationTarget, IConfigurationValue } from '../../../platform/configuration/common/configuration.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export const ITextResourceConfigurationService = createDecorator('textResourceConfigurationService'); diff --git a/src/vs/editor/common/services/textResourceConfigurationService.ts b/src/vs/editor/common/services/textResourceConfigurationService.ts index 39390cbd0..567eac5b8 100644 --- a/src/vs/editor/common/services/textResourceConfigurationService.ts +++ b/src/vs/editor/common/services/textResourceConfigurationService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextResourceConfigurationService, ITextResourceConfigurationChangeEvent } from 'vs/editor/common/services/textResourceConfiguration'; -import { IConfigurationService, ConfigurationTarget, IConfigurationValue, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IPosition, Position } from '../core/position.js'; +import { ILanguageService } from '../languages/language.js'; +import { IModelService } from './model.js'; +import { ITextResourceConfigurationService, ITextResourceConfigurationChangeEvent } from './textResourceConfiguration.js'; +import { IConfigurationService, ConfigurationTarget, IConfigurationValue, IConfigurationChangeEvent } from '../../../platform/configuration/common/configuration.js'; export class TextResourceConfigurationService extends Disposable implements ITextResourceConfigurationService { diff --git a/src/vs/editor/common/services/treeSitterParserService.ts b/src/vs/editor/common/services/treeSitterParserService.ts index aed18b37d..a52b8f942 100644 --- a/src/vs/editor/common/services/treeSitterParserService.ts +++ b/src/vs/editor/common/services/treeSitterParserService.ts @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import type { Parser } from '@vscode/tree-sitter-wasm'; -import { Event } from 'vs/base/common/event'; -import { ITextModel } from 'vs/editor/common/model'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { ITextModel } from '../model.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { Range } from '../core/range.js'; export const EDITOR_EXPERIMENTAL_PREFER_TREESITTER = 'editor.experimental.preferTreeSitter'; @@ -17,6 +18,7 @@ export interface ITreeSitterParserService { onDidAddLanguage: Event<{ id: string; language: Parser.Language }>; getOrInitLanguage(languageId: string): Parser.Language | undefined; getParseResult(textModel: ITextModel): ITreeSitterParseResult | undefined; + onDidUpdateTree: Event<{ textModel: ITextModel; ranges: Range[] }>; } export interface ITreeSitterParseResult { diff --git a/src/vs/editor/common/services/treeViewsDndService.ts b/src/vs/editor/common/services/treeViewsDndService.ts index 6130072bf..e7b3ebb9d 100644 --- a/src/vs/editor/common/services/treeViewsDndService.ts +++ b/src/vs/editor/common/services/treeViewsDndService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { ITreeViewsDnDService as ITreeViewsDnDServiceCommon, TreeViewsDnDService } from 'vs/editor/common/services/treeViewsDnd'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { VSDataTransfer } from '../../../base/common/dataTransfer.js'; +import { ITreeViewsDnDService as ITreeViewsDnDServiceCommon, TreeViewsDnDService } from './treeViewsDnd.js'; export interface ITreeViewsDnDService extends ITreeViewsDnDServiceCommon { } export const ITreeViewsDnDService = createDecorator('treeViewsDndService'); diff --git a/src/vs/editor/common/services/unicodeTextModelHighlighter.ts b/src/vs/editor/common/services/unicodeTextModelHighlighter.ts index 86103738c..d9e86c3e6 100644 --- a/src/vs/editor/common/services/unicodeTextModelHighlighter.ts +++ b/src/vs/editor/common/services/unicodeTextModelHighlighter.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Searcher } from 'vs/editor/common/model/textModelSearch'; -import * as strings from 'vs/base/common/strings'; -import { IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; -import { assertNever } from 'vs/base/common/assert'; -import { DEFAULT_WORD_REGEXP, getWordAtText } from 'vs/editor/common/core/wordHelper'; +import { IRange, Range } from '../core/range.js'; +import { Searcher } from '../model/textModelSearch.js'; +import * as strings from '../../../base/common/strings.js'; +import { IUnicodeHighlightsResult } from './editorWorker.js'; +import { assertNever } from '../../../base/common/assert.js'; +import { DEFAULT_WORD_REGEXP, getWordAtText } from '../core/wordHelper.js'; export class UnicodeTextModelHighlighter { public static computeUnicodeHighlights(model: IUnicodeCharacterSearcherTarget, options: UnicodeHighlighterOptions, range?: IRange): IUnicodeHighlightsResult { diff --git a/src/vs/editor/common/standalone/standaloneEnums.ts b/src/vs/editor/common/standalone/standaloneEnums.ts index 7cd16daae..600112188 100644 --- a/src/vs/editor/common/standalone/standaloneEnums.ts +++ b/src/vs/editor/common/standalone/standaloneEnums.ts @@ -210,120 +210,122 @@ export enum EditorOption { domReadOnly = 34, dragAndDrop = 35, dropIntoEditor = 36, - emptySelectionClipboard = 37, - experimentalWhitespaceRendering = 38, - extraEditorClassName = 39, - fastScrollSensitivity = 40, - find = 41, - fixedOverflowWidgets = 42, - folding = 43, - foldingStrategy = 44, - foldingHighlight = 45, - foldingImportsByDefault = 46, - foldingMaximumRegions = 47, - unfoldOnClickAfterEndOfLine = 48, - fontFamily = 49, - fontInfo = 50, - fontLigatures = 51, - fontSize = 52, - fontWeight = 53, - fontVariations = 54, - formatOnPaste = 55, - formatOnType = 56, - glyphMargin = 57, - gotoLocation = 58, - hideCursorInOverviewRuler = 59, - hover = 60, - inDiffEditor = 61, - inlineSuggest = 62, - inlineEdit = 63, - letterSpacing = 64, - lightbulb = 65, - lineDecorationsWidth = 66, - lineHeight = 67, - lineNumbers = 68, - lineNumbersMinChars = 69, - linkedEditing = 70, - links = 71, - matchBrackets = 72, - minimap = 73, - mouseStyle = 74, - mouseWheelScrollSensitivity = 75, - mouseWheelZoom = 76, - multiCursorMergeOverlapping = 77, - multiCursorModifier = 78, - multiCursorPaste = 79, - multiCursorLimit = 80, - occurrencesHighlight = 81, - overviewRulerBorder = 82, - overviewRulerLanes = 83, - padding = 84, - pasteAs = 85, - parameterHints = 86, - peekWidgetDefaultFocus = 87, - placeholder = 88, - definitionLinkOpensInPeek = 89, - quickSuggestions = 90, - quickSuggestionsDelay = 91, - readOnly = 92, - readOnlyMessage = 93, - renameOnType = 94, - renderControlCharacters = 95, - renderFinalNewline = 96, - renderLineHighlight = 97, - renderLineHighlightOnlyWhenFocus = 98, - renderValidationDecorations = 99, - renderWhitespace = 100, - revealHorizontalRightPadding = 101, - roundedSelection = 102, - rulers = 103, - scrollbar = 104, - scrollBeyondLastColumn = 105, - scrollBeyondLastLine = 106, - scrollPredominantAxis = 107, - selectionClipboard = 108, - selectionHighlight = 109, - selectOnLineNumbers = 110, - showFoldingControls = 111, - showUnused = 112, - snippetSuggestions = 113, - smartSelect = 114, - smoothScrolling = 115, - stickyScroll = 116, - stickyTabStops = 117, - stopRenderingLineAfter = 118, - suggest = 119, - suggestFontSize = 120, - suggestLineHeight = 121, - suggestOnTriggerCharacters = 122, - suggestSelection = 123, - tabCompletion = 124, - tabIndex = 125, - unicodeHighlighting = 126, - unusualLineTerminators = 127, - useShadowDOM = 128, - useTabStops = 129, - wordBreak = 130, - wordSegmenterLocales = 131, - wordSeparators = 132, - wordWrap = 133, - wordWrapBreakAfterCharacters = 134, - wordWrapBreakBeforeCharacters = 135, - wordWrapColumn = 136, - wordWrapOverride1 = 137, - wordWrapOverride2 = 138, - wrappingIndent = 139, - wrappingStrategy = 140, - showDeprecated = 141, - inlayHints = 142, - editorClassName = 143, - pixelRatio = 144, - tabFocusMode = 145, - layoutInfo = 146, - wrappingInfo = 147, - defaultColorDecorators = 148, - colorDecoratorsActivatedOn = 149, - inlineCompletionsAccessibilityVerbose = 150 + experimentalEditContextEnabled = 37, + emptySelectionClipboard = 38, + experimentalGpuAcceleration = 39, + experimentalWhitespaceRendering = 40, + extraEditorClassName = 41, + fastScrollSensitivity = 42, + find = 43, + fixedOverflowWidgets = 44, + folding = 45, + foldingStrategy = 46, + foldingHighlight = 47, + foldingImportsByDefault = 48, + foldingMaximumRegions = 49, + unfoldOnClickAfterEndOfLine = 50, + fontFamily = 51, + fontInfo = 52, + fontLigatures = 53, + fontSize = 54, + fontWeight = 55, + fontVariations = 56, + formatOnPaste = 57, + formatOnType = 58, + glyphMargin = 59, + gotoLocation = 60, + hideCursorInOverviewRuler = 61, + hover = 62, + inDiffEditor = 63, + inlineSuggest = 64, + inlineEdit = 65, + letterSpacing = 66, + lightbulb = 67, + lineDecorationsWidth = 68, + lineHeight = 69, + lineNumbers = 70, + lineNumbersMinChars = 71, + linkedEditing = 72, + links = 73, + matchBrackets = 74, + minimap = 75, + mouseStyle = 76, + mouseWheelScrollSensitivity = 77, + mouseWheelZoom = 78, + multiCursorMergeOverlapping = 79, + multiCursorModifier = 80, + multiCursorPaste = 81, + multiCursorLimit = 82, + occurrencesHighlight = 83, + overviewRulerBorder = 84, + overviewRulerLanes = 85, + padding = 86, + pasteAs = 87, + parameterHints = 88, + peekWidgetDefaultFocus = 89, + placeholder = 90, + definitionLinkOpensInPeek = 91, + quickSuggestions = 92, + quickSuggestionsDelay = 93, + readOnly = 94, + readOnlyMessage = 95, + renameOnType = 96, + renderControlCharacters = 97, + renderFinalNewline = 98, + renderLineHighlight = 99, + renderLineHighlightOnlyWhenFocus = 100, + renderValidationDecorations = 101, + renderWhitespace = 102, + revealHorizontalRightPadding = 103, + roundedSelection = 104, + rulers = 105, + scrollbar = 106, + scrollBeyondLastColumn = 107, + scrollBeyondLastLine = 108, + scrollPredominantAxis = 109, + selectionClipboard = 110, + selectionHighlight = 111, + selectOnLineNumbers = 112, + showFoldingControls = 113, + showUnused = 114, + snippetSuggestions = 115, + smartSelect = 116, + smoothScrolling = 117, + stickyScroll = 118, + stickyTabStops = 119, + stopRenderingLineAfter = 120, + suggest = 121, + suggestFontSize = 122, + suggestLineHeight = 123, + suggestOnTriggerCharacters = 124, + suggestSelection = 125, + tabCompletion = 126, + tabIndex = 127, + unicodeHighlighting = 128, + unusualLineTerminators = 129, + useShadowDOM = 130, + useTabStops = 131, + wordBreak = 132, + wordSegmenterLocales = 133, + wordSeparators = 134, + wordWrap = 135, + wordWrapBreakAfterCharacters = 136, + wordWrapBreakBeforeCharacters = 137, + wordWrapColumn = 138, + wordWrapOverride1 = 139, + wordWrapOverride2 = 140, + wrappingIndent = 141, + wrappingStrategy = 142, + showDeprecated = 143, + inlayHints = 144, + editorClassName = 145, + pixelRatio = 146, + tabFocusMode = 147, + layoutInfo = 148, + wrappingInfo = 149, + defaultColorDecorators = 150, + colorDecoratorsActivatedOn = 151, + inlineCompletionsAccessibilityVerbose = 152 } /** diff --git a/src/vs/editor/common/standaloneStrings.ts b/src/vs/editor/common/standaloneStrings.ts index 458c72474..a90add968 100644 --- a/src/vs/editor/common/standaloneStrings.ts +++ b/src/vs/editor/common/standaloneStrings.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../nls.js'; export namespace AccessibilityHelpNLS { export const accessibilityHelpTitle = nls.localize('accessibilityHelpTitle', "Accessibility Help"); diff --git a/src/vs/editor/common/textModelBracketPairs.ts b/src/vs/editor/common/textModelBracketPairs.ts index 8d916800b..03fc83cff 100644 --- a/src/vs/editor/common/textModelBracketPairs.ts +++ b/src/vs/editor/common/textModelBracketPairs.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CallbackIterable } from 'vs/base/common/arrays'; -import { Event } from 'vs/base/common/event'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ClosingBracketKind, OpeningBracketKind } from 'vs/editor/common/languages/supports/languageBracketsConfiguration'; -import { PairAstNode } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast'; +import { CallbackIterable } from '../../base/common/arrays.js'; +import { Event } from '../../base/common/event.js'; +import { IPosition } from './core/position.js'; +import { IRange, Range } from './core/range.js'; +import { ClosingBracketKind, OpeningBracketKind } from './languages/supports/languageBracketsConfiguration.js'; +import { PairAstNode } from './model/bracketPairsTextModelPart/bracketPairsTree/ast.js'; export interface IBracketPairsTextModelPart { /** diff --git a/src/vs/editor/common/textModelEvents.ts b/src/vs/editor/common/textModelEvents.ts index 7d63afec8..768563c4b 100644 --- a/src/vs/editor/common/textModelEvents.ts +++ b/src/vs/editor/common/textModelEvents.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IRange } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IModelDecoration, InjectedTextOptions } from 'vs/editor/common/model'; +import { IRange } from './core/range.js'; +import { Selection } from './core/selection.js'; +import { IModelDecoration, InjectedTextOptions } from './model.js'; /** * An event describing that the current language associated with a model has changed. diff --git a/src/vs/editor/common/textModelGuides.ts b/src/vs/editor/common/textModelGuides.ts index 01789ed6b..a109109e4 100644 --- a/src/vs/editor/common/textModelGuides.ts +++ b/src/vs/editor/common/textModelGuides.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPosition } from 'vs/editor/common/core/position'; +import { IPosition } from './core/position.js'; export interface IGuidesTextModelPart { /** diff --git a/src/vs/editor/common/tokenizationRegistry.ts b/src/vs/editor/common/tokenizationRegistry.ts index 15ad1b851..d6c0c2f39 100644 --- a/src/vs/editor/common/tokenizationRegistry.ts +++ b/src/vs/editor/common/tokenizationRegistry.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ITokenizationRegistry, ITokenizationSupportChangedEvent, ILazyTokenizationSupport } from 'vs/editor/common/languages'; -import { ColorId } from 'vs/editor/common/encodedTokenAttributes'; +import { Color } from '../../base/common/color.js'; +import { Emitter, Event } from '../../base/common/event.js'; +import { Disposable, IDisposable, toDisposable } from '../../base/common/lifecycle.js'; +import { ITokenizationRegistry, ITokenizationSupportChangedEvent, ILazyTokenizationSupport } from './languages.js'; +import { ColorId } from './encodedTokenAttributes.js'; export class TokenizationRegistry implements ITokenizationRegistry { diff --git a/src/vs/editor/common/tokenizationTextModelPart.ts b/src/vs/editor/common/tokenizationTextModelPart.ts index 07eb06f9f..25e7569b2 100644 --- a/src/vs/editor/common/tokenizationTextModelPart.ts +++ b/src/vs/editor/common/tokenizationTextModelPart.ts @@ -3,11 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; +import { OffsetEdit } from './core/offsetEdit.js'; +import { OffsetRange } from './core/offsetRange.js'; +import { Range } from './core/range.js'; +import { StandardTokenType } from './encodedTokenAttributes.js'; +import { LineTokens } from './tokens/lineTokens.js'; +import { SparseMultilineTokens } from './tokens/sparseMultilineTokens.js'; /** * Provides tokenization related functionality of the text model. @@ -86,7 +87,7 @@ export interface ITokenizationTextModelPart { /** * @internal */ - tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null; + tokenizeLineWithEdit(lineNumber: number, edit: LineEditWithAdditionalLines): ITokenizeLineWithEditResult; getLanguageId(): string; getLanguageIdAtPosition(lineNumber: number, column: number): string; @@ -96,6 +97,32 @@ export interface ITokenizationTextModelPart { readonly backgroundTokenizationState: BackgroundTokenizationState; } +export class LineEditWithAdditionalLines { + public static replace(range: OffsetRange, text: string): LineEditWithAdditionalLines { + return new LineEditWithAdditionalLines( + OffsetEdit.replace(range, text), + null, + ); + } + + constructor( + /** + * The edit for the main line. + */ + readonly lineEdit: OffsetEdit, + + /** + * Full lines appended after the main line. + */ + readonly additionalLines: string[] | null, + ) { } +} + +export interface ITokenizeLineWithEditResult { + readonly mainLineTokens: LineTokens | null; + readonly additionalLines: LineTokens[] | null; +} + export const enum BackgroundTokenizationState { InProgress = 1, Completed = 2, diff --git a/src/vs/editor/common/tokens/contiguousMultilineTokens.ts b/src/vs/editor/common/tokens/contiguousMultilineTokens.ts index f4d267fba..3e3e8886f 100644 --- a/src/vs/editor/common/tokens/contiguousMultilineTokens.ts +++ b/src/vs/editor/common/tokens/contiguousMultilineTokens.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { readUInt32BE, writeUInt32BE } from 'vs/base/common/buffer'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { countEOL } from 'vs/editor/common/core/eolCounter'; -import { ContiguousTokensEditing } from 'vs/editor/common/tokens/contiguousTokensEditing'; -import { LineRange } from 'vs/editor/common/core/lineRange'; +import * as arrays from '../../../base/common/arrays.js'; +import { readUInt32BE, writeUInt32BE } from '../../../base/common/buffer.js'; +import { Position } from '../core/position.js'; +import { IRange } from '../core/range.js'; +import { countEOL } from '../core/eolCounter.js'; +import { ContiguousTokensEditing } from './contiguousTokensEditing.js'; +import { LineRange } from '../core/lineRange.js'; /** * Represents contiguous tokens over a contiguous range of lines. diff --git a/src/vs/editor/common/tokens/contiguousMultilineTokensBuilder.ts b/src/vs/editor/common/tokens/contiguousMultilineTokensBuilder.ts index 0c46da70b..f2b34cc9c 100644 --- a/src/vs/editor/common/tokens/contiguousMultilineTokensBuilder.ts +++ b/src/vs/editor/common/tokens/contiguousMultilineTokensBuilder.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { readUInt32BE, writeUInt32BE } from 'vs/base/common/buffer'; -import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; +import { readUInt32BE, writeUInt32BE } from '../../../base/common/buffer.js'; +import { ContiguousMultilineTokens } from './contiguousMultilineTokens.js'; export class ContiguousMultilineTokensBuilder { diff --git a/src/vs/editor/common/tokens/contiguousTokensEditing.ts b/src/vs/editor/common/tokens/contiguousTokensEditing.ts index 1ccb5b5ba..28d444a2d 100644 --- a/src/vs/editor/common/tokens/contiguousTokensEditing.ts +++ b/src/vs/editor/common/tokens/contiguousTokensEditing.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { LineTokens } from './lineTokens.js'; export const EMPTY_LINE_TOKENS = (new Uint32Array(0)).buffer; diff --git a/src/vs/editor/common/tokens/contiguousTokensStore.ts b/src/vs/editor/common/tokens/contiguousTokensStore.ts index 02b47bfd4..4134eee85 100644 --- a/src/vs/editor/common/tokens/contiguousTokensStore.ts +++ b/src/vs/editor/common/tokens/contiguousTokensStore.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { ContiguousTokensEditing, EMPTY_LINE_TOKENS, toUint32Array } from 'vs/editor/common/tokens/contiguousTokensEditing'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; -import { ITextModel } from 'vs/editor/common/model'; -import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; +import * as arrays from '../../../base/common/arrays.js'; +import { Position } from '../core/position.js'; +import { IRange } from '../core/range.js'; +import { ContiguousTokensEditing, EMPTY_LINE_TOKENS, toUint32Array } from './contiguousTokensEditing.js'; +import { LineTokens } from './lineTokens.js'; +import { ILanguageIdCodec } from '../languages.js'; +import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts, TokenMetadata } from '../encodedTokenAttributes.js'; +import { ITextModel } from '../model.js'; +import { ContiguousMultilineTokens } from './contiguousMultilineTokens.js'; /** * Represents contiguous tokens in a text model. diff --git a/src/vs/editor/common/tokens/lineTokens.ts b/src/vs/editor/common/tokens/lineTokens.ts index 67cdf8150..6409d662d 100644 --- a/src/vs/editor/common/tokens/lineTokens.ts +++ b/src/vs/editor/common/tokens/lineTokens.ts @@ -3,10 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { FontStyle, ColorId, StandardTokenType, MetadataConsts, TokenMetadata, ITokenPresentation } from 'vs/editor/common/encodedTokenAttributes'; -import { IPosition } from 'vs/editor/common/core/position'; -import { ITextModel } from 'vs/editor/common/model'; +import { ILanguageIdCodec } from '../languages.js'; +import { FontStyle, ColorId, StandardTokenType, MetadataConsts, TokenMetadata, ITokenPresentation } from '../encodedTokenAttributes.js'; +import { IPosition } from '../core/position.js'; +import { ITextModel } from '../model.js'; +import { OffsetRange } from '../core/offsetRange.js'; +import { TokenArray, TokenArrayBuilder } from './tokenArray.js'; + export interface IViewLineTokens { languageIdCodec: ILanguageIdCodec; @@ -27,20 +30,6 @@ export interface IViewLineTokens { } export class LineTokens implements IViewLineTokens { - _lineTokensBrand: void = undefined; - - private readonly _tokens: Uint32Array; - private readonly _tokensCount: number; - private readonly _text: string; - - public readonly languageIdCodec: ILanguageIdCodec; - - public static defaultTokenMetadata = ( - (FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET) - | (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET) - | (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET) - ) >>> 0; - public static createEmpty(lineContent: string, decoder: ILanguageIdCodec): LineTokens { const defaultMetadata = LineTokens.defaultTokenMetadata; @@ -63,6 +52,54 @@ export class LineTokens implements IViewLineTokens { return new LineTokens(new Uint32Array(tokens), fullText, decoder); } + public static convertToEndOffset(tokens: Uint32Array, lineTextLength: number): void { + const tokenCount = (tokens.length >>> 1); + const lastTokenIndex = tokenCount - 1; + for (let tokenIndex = 0; tokenIndex < lastTokenIndex; tokenIndex++) { + tokens[tokenIndex << 1] = tokens[(tokenIndex + 1) << 1]; + } + tokens[lastTokenIndex << 1] = lineTextLength; + } + + public static findIndexInTokensArray(tokens: Uint32Array, desiredIndex: number): number { + if (tokens.length <= 2) { + return 0; + } + + let low = 0; + let high = (tokens.length >>> 1) - 1; + + while (low < high) { + + const mid = low + Math.floor((high - low) / 2); + const endOffset = tokens[(mid << 1)]; + + if (endOffset === desiredIndex) { + return mid + 1; + } else if (endOffset < desiredIndex) { + low = mid + 1; + } else if (endOffset > desiredIndex) { + high = mid; + } + } + + return low; + } + + _lineTokensBrand: void = undefined; + + private readonly _tokens: Uint32Array; + private readonly _tokensCount: number; + private readonly _text: string; + + public readonly languageIdCodec: ILanguageIdCodec; + + public static defaultTokenMetadata = ( + (FontStyle.None << MetadataConsts.FONT_STYLE_OFFSET) + | (ColorId.DefaultForeground << MetadataConsts.FOREGROUND_OFFSET) + | (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET) + ) >>> 0; + constructor(tokens: Uint32Array, text: string, decoder: ILanguageIdCodec) { this._tokens = tokens; this._tokensCount = (this._tokens.length >>> 1); @@ -166,40 +203,6 @@ export class LineTokens implements IViewLineTokens { return new SliceLineTokens(this, startOffset, endOffset, deltaOffset); } - public static convertToEndOffset(tokens: Uint32Array, lineTextLength: number): void { - const tokenCount = (tokens.length >>> 1); - const lastTokenIndex = tokenCount - 1; - for (let tokenIndex = 0; tokenIndex < lastTokenIndex; tokenIndex++) { - tokens[tokenIndex << 1] = tokens[(tokenIndex + 1) << 1]; - } - tokens[lastTokenIndex << 1] = lineTextLength; - } - - public static findIndexInTokensArray(tokens: Uint32Array, desiredIndex: number): number { - if (tokens.length <= 2) { - return 0; - } - - let low = 0; - let high = (tokens.length >>> 1) - 1; - - while (low < high) { - - const mid = low + Math.floor((high - low) / 2); - const endOffset = tokens[(mid << 1)]; - - if (endOffset === desiredIndex) { - return mid + 1; - } else if (endOffset < desiredIndex) { - low = mid + 1; - } else if (endOffset > desiredIndex) { - high = mid; - } - } - - return low; - } - /** * @pure * @param insertTokens Must be sorted by offset. @@ -247,6 +250,23 @@ export class LineTokens implements IViewLineTokens { return new LineTokens(new Uint32Array(newTokens), text, this.languageIdCodec); } + public getTokensInRange(range: OffsetRange): TokenArray { + const builder = new TokenArrayBuilder(); + + const startTokenIndex = this.findTokenIndexAtOffset(range.start); + const endTokenIndex = this.findTokenIndexAtOffset(range.endExclusive); + + for (let tokenIndex = startTokenIndex; tokenIndex <= endTokenIndex; tokenIndex++) { + const tokenRange = new OffsetRange(this.getStartOffset(tokenIndex), this.getEndOffset(tokenIndex)); + const length = tokenRange.intersectionLength(range); + if (length > 0) { + builder.add(length, this.getMetadata(tokenIndex)); + } + } + + return builder.build(); + } + public getTokenText(tokenIndex: number): string { const startOffset = this.getStartOffset(tokenIndex); const endOffset = this.getEndOffset(tokenIndex); diff --git a/src/vs/editor/common/tokens/sparseMultilineTokens.ts b/src/vs/editor/common/tokens/sparseMultilineTokens.ts index e46f9aeca..50887a06a 100644 --- a/src/vs/editor/common/tokens/sparseMultilineTokens.ts +++ b/src/vs/editor/common/tokens/sparseMultilineTokens.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { CharCode } from '../../../base/common/charCode.js'; +import { Position } from '../core/position.js'; +import { IRange, Range } from '../core/range.js'; +import { countEOL } from '../core/eolCounter.js'; /** * Represents sparse tokens over a contiguous range of lines. diff --git a/src/vs/editor/common/tokens/sparseTokensStore.ts b/src/vs/editor/common/tokens/sparseTokensStore.ts index 90a1f3ab8..dd89936c9 100644 --- a/src/vs/editor/common/tokens/sparseTokensStore.ts +++ b/src/vs/editor/common/tokens/sparseTokensStore.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; +import * as arrays from '../../../base/common/arrays.js'; +import { IRange, Range } from '../core/range.js'; +import { LineTokens } from './lineTokens.js'; +import { SparseMultilineTokens } from './sparseMultilineTokens.js'; +import { ILanguageIdCodec } from '../languages.js'; +import { MetadataConsts } from '../encodedTokenAttributes.js'; /** * Represents sparse tokens in a text model. diff --git a/src/vs/editor/common/tokens/tokenArray.ts b/src/vs/editor/common/tokens/tokenArray.ts new file mode 100644 index 000000000..1b6891f22 --- /dev/null +++ b/src/vs/editor/common/tokens/tokenArray.ts @@ -0,0 +1,79 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { OffsetRange } from '../core/offsetRange.js'; + +/** + * This class represents a sequence of tokens. + * Conceptually, each token has a length and a metadata number. + * A token array might be used to annotate a string with metadata. + * Use {@link TokenArrayBuilder} to efficiently create a token array. + * + * TODO: Make this class more efficient (e.g. by using a Int32Array). +*/ +export class TokenArray { + public static create(tokenInfo: TokenInfo[]): TokenArray { + return new TokenArray(tokenInfo); + } + + private constructor( + private readonly _tokenInfo: TokenInfo[], + ) { } + + public forEach(cb: (range: OffsetRange, tokenInfo: TokenInfo) => void): void { + let lengthSum = 0; + for (const tokenInfo of this._tokenInfo) { + const range = new OffsetRange(lengthSum, lengthSum + tokenInfo.length); + cb(range, tokenInfo); + lengthSum += tokenInfo.length; + } + } + + public slice(range: OffsetRange): TokenArray { + const result: TokenInfo[] = []; + let lengthSum = 0; + for (const tokenInfo of this._tokenInfo) { + const tokenStart = lengthSum; + const tokenEndEx = tokenStart + tokenInfo.length; + if (tokenEndEx > range.start) { + if (tokenStart >= range.endExclusive) { + break; + } + + const deltaBefore = Math.max(0, range.start - tokenStart); + const deltaAfter = Math.max(0, tokenEndEx - range.endExclusive); + + result.push(new TokenInfo(tokenInfo.length - deltaBefore - deltaAfter, tokenInfo.metadata)); + } + + lengthSum += tokenInfo.length; + } + return TokenArray.create(result); + } +} + +export type TokenMetadata = number; + +export class TokenInfo { + constructor( + public readonly length: number, + public readonly metadata: TokenMetadata, + ) { } +} + +/** + * TODO: Make this class more efficient (e.g. by using a Int32Array). +*/ +export class TokenArrayBuilder { + private readonly _tokens: TokenInfo[] = []; + + public add(length: number, metadata: TokenMetadata): void { + this._tokens.push(new TokenInfo(length, metadata)); + } + + public build(): TokenArray { + return TokenArray.create(this._tokens); + } +} diff --git a/src/vs/editor/common/viewEventHandler.ts b/src/vs/editor/common/viewEventHandler.ts index a80b59c50..952bfdd1d 100644 --- a/src/vs/editor/common/viewEventHandler.ts +++ b/src/vs/editor/common/viewEventHandler.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import * as viewEvents from 'vs/editor/common/viewEvents'; +import { Disposable } from '../../base/common/lifecycle.js'; +import * as viewEvents from './viewEvents.js'; export class ViewEventHandler extends Disposable { diff --git a/src/vs/editor/common/viewEvents.ts b/src/vs/editor/common/viewEvents.ts index f607afe73..ce107651b 100644 --- a/src/vs/editor/common/viewEvents.ts +++ b/src/vs/editor/common/viewEvents.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ScrollEvent } from 'vs/base/common/scrollable'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { IModelDecorationsChangedEvent } from 'vs/editor/common/textModelEvents'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; +import { ScrollEvent } from '../../base/common/scrollable.js'; +import { ConfigurationChangedEvent, EditorOption } from './config/editorOptions.js'; +import { Range } from './core/range.js'; +import { Selection } from './core/selection.js'; +import { CursorChangeReason } from './cursorEvents.js'; +import { ScrollType } from './editorCommon.js'; +import { IModelDecorationsChangedEvent } from './textModelEvents.js'; +import { IColorTheme } from '../../platform/theme/common/themeService.js'; export const enum ViewEventType { ViewCompositionStart, diff --git a/src/vs/editor/common/viewLayout/lineDecorations.ts b/src/vs/editor/common/viewLayout/lineDecorations.ts index 381e8cfb4..c60796818 100644 --- a/src/vs/editor/common/viewLayout/lineDecorations.ts +++ b/src/vs/editor/common/viewLayout/lineDecorations.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { Constants } from 'vs/base/common/uint'; -import { LinePartMetadata } from 'vs/editor/common/viewLayout/linePart'; -import { InlineDecoration, InlineDecorationType } from 'vs/editor/common/viewModel'; +import * as strings from '../../../base/common/strings.js'; +import { Constants } from '../../../base/common/uint.js'; +import { LinePartMetadata } from './linePart.js'; +import { InlineDecoration, InlineDecorationType } from '../viewModel.js'; export class LineDecoration { _lineDecorationBrand: void = undefined; diff --git a/src/vs/editor/common/viewLayout/linesLayout.ts b/src/vs/editor/common/viewLayout/linesLayout.ts index 71bf9d5b9..f7988abdd 100644 --- a/src/vs/editor/common/viewLayout/linesLayout.ts +++ b/src/vs/editor/common/viewLayout/linesLayout.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorWhitespace, IPartialViewLinesViewportData, IViewWhitespaceViewportData, IWhitespaceChangeAccessor } from 'vs/editor/common/viewModel'; -import * as strings from 'vs/base/common/strings'; +import { IEditorWhitespace, IPartialViewLinesViewportData, IViewWhitespaceViewportData, IWhitespaceChangeAccessor } from '../viewModel.js'; +import * as strings from '../../../base/common/strings.js'; interface IPendingChange { id: string; newAfterLineNumber: number; newHeight: number } interface IPendingRemove { id: string } diff --git a/src/vs/editor/common/viewLayout/viewLayout.ts b/src/vs/editor/common/viewLayout/viewLayout.ts index e6209088e..767a308db 100644 --- a/src/vs/editor/common/viewLayout/viewLayout.ts +++ b/src/vs/editor/common/viewLayout/viewLayout.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event, Emitter } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { IScrollPosition, ScrollEvent, Scrollable, ScrollbarVisibility, INewScrollPosition } from 'vs/base/common/scrollable'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { LinesLayout } from 'vs/editor/common/viewLayout/linesLayout'; -import { IEditorWhitespace, IPartialViewLinesViewportData, IViewLayout, IViewWhitespaceViewportData, IWhitespaceChangeAccessor, Viewport } from 'vs/editor/common/viewModel'; -import { ContentSizeChangedEvent } from 'vs/editor/common/viewModelEventDispatcher'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { IScrollPosition, ScrollEvent, Scrollable, ScrollbarVisibility, INewScrollPosition } from '../../../base/common/scrollable.js'; +import { ConfigurationChangedEvent, EditorOption } from '../config/editorOptions.js'; +import { ScrollType } from '../editorCommon.js'; +import { IEditorConfiguration } from '../config/editorConfiguration.js'; +import { LinesLayout } from './linesLayout.js'; +import { IEditorWhitespace, IPartialViewLinesViewportData, IViewLayout, IViewWhitespaceViewportData, IWhitespaceChangeAccessor, Viewport } from '../viewModel.js'; +import { ContentSizeChangedEvent } from '../viewModelEventDispatcher.js'; const SMOOTH_SCROLLING_TIME = 125; diff --git a/src/vs/editor/common/viewLayout/viewLineRenderer.ts b/src/vs/editor/common/viewLayout/viewLineRenderer.ts index 0e94382f9..b19b34e04 100644 --- a/src/vs/editor/common/viewLayout/viewLineRenderer.ts +++ b/src/vs/editor/common/viewLayout/viewLineRenderer.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { LineDecoration, LineDecorationsNormalizer } from 'vs/editor/common/viewLayout/lineDecorations'; -import { InlineDecorationType } from 'vs/editor/common/viewModel'; -import { LinePart, LinePartMetadata } from 'vs/editor/common/viewLayout/linePart'; +import * as nls from '../../../nls.js'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { IViewLineTokens } from '../tokens/lineTokens.js'; +import { StringBuilder } from '../core/stringBuilder.js'; +import { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js'; +import { InlineDecorationType } from '../viewModel.js'; +import { LinePart, LinePartMetadata } from './linePart.js'; export const enum RenderWhitespace { None = 0, diff --git a/src/vs/editor/common/viewLayout/viewLinesViewportData.ts b/src/vs/editor/common/viewLayout/viewLinesViewportData.ts index 6e072c526..91eaceca8 100644 --- a/src/vs/editor/common/viewLayout/viewLinesViewportData.ts +++ b/src/vs/editor/common/viewLayout/viewLinesViewportData.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IPartialViewLinesViewportData, IViewModel, IViewWhitespaceViewportData, ViewLineRenderingData, ViewModelDecoration } from 'vs/editor/common/viewModel'; +import { Range } from '../core/range.js'; +import { Selection } from '../core/selection.js'; +import { IPartialViewLinesViewportData, IViewModel, IViewWhitespaceViewportData, ViewLineRenderingData, ViewModelDecoration } from '../viewModel.js'; /** * Contains all data needed to render at a specific viewport. diff --git a/src/vs/editor/common/viewModel.ts b/src/vs/editor/common/viewModel.ts index 3ff0d5f09..444bac5d6 100644 --- a/src/vs/editor/common/viewModel.ts +++ b/src/vs/editor/common/viewModel.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { IScrollPosition, Scrollable } from 'vs/base/common/scrollable'; -import * as strings from 'vs/base/common/strings'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { CursorConfiguration, CursorState, EditOperationType, IColumnSelectData, ICursorSimpleModel, PartialCursorState } from 'vs/editor/common/cursorCommon'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { INewScrollPosition, ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorTheme } from 'vs/editor/common/editorTheme'; -import { EndOfLinePreference, IGlyphMarginLanesModel, IModelDecorationOptions, ITextModel, PositionAffinity } from 'vs/editor/common/model'; -import { ILineBreaksComputer, InjectedText } from 'vs/editor/common/modelLineProjectionData'; -import { BracketGuideOptions, IActiveIndentGuideInfo, IndentGuide } from 'vs/editor/common/textModelGuides'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import { VerticalRevealType } from 'vs/editor/common/viewEvents'; +import * as arrays from '../../base/common/arrays.js'; +import { IScrollPosition, Scrollable } from '../../base/common/scrollable.js'; +import * as strings from '../../base/common/strings.js'; +import { IPosition, Position } from './core/position.js'; +import { Range } from './core/range.js'; +import { CursorConfiguration, CursorState, EditOperationType, IColumnSelectData, ICursorSimpleModel, PartialCursorState } from './cursorCommon.js'; +import { CursorChangeReason } from './cursorEvents.js'; +import { INewScrollPosition, ScrollType } from './editorCommon.js'; +import { EditorTheme } from './editorTheme.js'; +import { EndOfLinePreference, IGlyphMarginLanesModel, IModelDecorationOptions, ITextModel, PositionAffinity } from './model.js'; +import { ILineBreaksComputer, InjectedText } from './modelLineProjectionData.js'; +import { BracketGuideOptions, IActiveIndentGuideInfo, IndentGuide } from './textModelGuides.js'; +import { IViewLineTokens } from './tokens/lineTokens.js'; +import { ViewEventHandler } from './viewEventHandler.js'; +import { VerticalRevealType } from './viewEvents.js'; export interface IViewModel extends ICursorSimpleModel { diff --git a/src/vs/editor/common/viewModel/glyphLanesModel.ts b/src/vs/editor/common/viewModel/glyphLanesModel.ts index c63c9b24f..3efbb9e7c 100644 --- a/src/vs/editor/common/viewModel/glyphLanesModel.ts +++ b/src/vs/editor/common/viewModel/glyphLanesModel.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { GlyphMarginLane, IGlyphMarginLanesModel } from 'vs/editor/common/model'; +import { Range } from '../core/range.js'; +import { GlyphMarginLane, IGlyphMarginLanesModel } from '../model.js'; const MAX_LANE = GlyphMarginLane.Right; diff --git a/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts b/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts index a063d37a0..a0f36078c 100644 --- a/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts +++ b/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, markAsSingleton } from 'vs/base/common/lifecycle'; -import { RGBA8 } from 'vs/editor/common/core/rgba'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { ColorId } from 'vs/editor/common/encodedTokenAttributes'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, markAsSingleton } from '../../../base/common/lifecycle.js'; +import { RGBA8 } from '../core/rgba.js'; +import { TokenizationRegistry } from '../languages.js'; +import { ColorId } from '../encodedTokenAttributes.js'; export class MinimapTokensColorTracker extends Disposable { private static _INSTANCE: MinimapTokensColorTracker | null = null; diff --git a/src/vs/editor/common/viewModel/modelLineProjection.ts b/src/vs/editor/common/viewModel/modelLineProjection.ts index e66499cd9..b01a1de28 100644 --- a/src/vs/editor/common/viewModel/modelLineProjection.ts +++ b/src/vs/editor/common/viewModel/modelLineProjection.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { EndOfLinePreference, ITextModel, PositionAffinity } from 'vs/editor/common/model'; -import { LineInjectedText } from 'vs/editor/common/textModelEvents'; -import { InjectedText, ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; -import { SingleLineInlineDecoration, ViewLineData } from 'vs/editor/common/viewModel'; +import { LineTokens } from '../tokens/lineTokens.js'; +import { Position } from '../core/position.js'; +import { IRange } from '../core/range.js'; +import { EndOfLinePreference, ITextModel, PositionAffinity } from '../model.js'; +import { LineInjectedText } from '../textModelEvents.js'; +import { InjectedText, ModelLineProjectionData } from '../modelLineProjectionData.js'; +import { SingleLineInlineDecoration, ViewLineData } from '../viewModel.js'; export interface IModelLineProjection { isVisible(): boolean; @@ -213,11 +213,29 @@ class ModelLineProjection implements IModelLineProjection { let lineWithInjections: LineTokens; if (injectionOffsets) { - lineWithInjections = model.tokenization.getLineTokens(modelLineNumber).withInserted(injectionOffsets.map((offset, idx) => ({ - offset, - text: injectionOptions![idx].content, - tokenMetadata: LineTokens.defaultTokenMetadata - }))); + const tokensToInsert: { offset: number; text: string; tokenMetadata: number }[] = []; + + for (let idx = 0; idx < injectionOffsets.length; idx++) { + const offset = injectionOffsets[idx]; + const tokens = injectionOptions![idx].tokens; + if (tokens) { + tokens.forEach((range, info) => { + tokensToInsert.push({ + offset, + text: range.substring(injectionOptions![idx].content), + tokenMetadata: info.metadata, + }); + }); + } else { + tokensToInsert.push({ + offset, + text: injectionOptions![idx].content, + tokenMetadata: LineTokens.defaultTokenMetadata, + }); + } + } + + lineWithInjections = model.tokenization.getLineTokens(modelLineNumber).withInserted(tokensToInsert); } else { lineWithInjections = model.tokenization.getLineTokens(modelLineNumber); } diff --git a/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts b/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts index 05a54a8ab..434e322b6 100644 --- a/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts +++ b/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { WrappingIndent, IComputedEditorOptions, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CharacterClassifier } from 'vs/editor/common/core/characterClassifier'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { LineInjectedText } from 'vs/editor/common/textModelEvents'; -import { InjectedTextOptions } from 'vs/editor/common/model'; -import { ILineBreaksComputerFactory, ILineBreaksComputer, ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; +import { CharCode } from '../../../base/common/charCode.js'; +import * as strings from '../../../base/common/strings.js'; +import { WrappingIndent, IComputedEditorOptions, EditorOption } from '../config/editorOptions.js'; +import { CharacterClassifier } from '../core/characterClassifier.js'; +import { FontInfo } from '../config/fontInfo.js'; +import { LineInjectedText } from '../textModelEvents.js'; +import { InjectedTextOptions } from '../model.js'; +import { ILineBreaksComputerFactory, ILineBreaksComputer, ModelLineProjectionData } from '../modelLineProjectionData.js'; export class MonospaceLineBreaksComputerFactory implements ILineBreaksComputerFactory { public static create(options: IComputedEditorOptions): MonospaceLineBreaksComputerFactory { diff --git a/src/vs/editor/common/viewModel/viewContext.ts b/src/vs/editor/common/viewModel/viewContext.ts index 1b401b18f..3669ff7e6 100644 --- a/src/vs/editor/common/viewModel/viewContext.ts +++ b/src/vs/editor/common/viewModel/viewContext.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import { IViewLayout, IViewModel } from 'vs/editor/common/viewModel'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import { EditorTheme } from 'vs/editor/common/editorTheme'; +import { IEditorConfiguration } from '../config/editorConfiguration.js'; +import { ViewEventHandler } from '../viewEventHandler.js'; +import { IViewLayout, IViewModel } from '../viewModel.js'; +import { IColorTheme } from '../../../platform/theme/common/themeService.js'; +import { EditorTheme } from '../editorTheme.js'; export class ViewContext { diff --git a/src/vs/editor/common/viewModel/viewModelDecorations.ts b/src/vs/editor/common/viewModel/viewModelDecorations.ts index 4725c9030..553cc7d33 100644 --- a/src/vs/editor/common/viewModel/viewModelDecorations.ts +++ b/src/vs/editor/common/viewModel/viewModelDecorations.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { IModelDecoration, ITextModel, PositionAffinity } from 'vs/editor/common/model'; -import { IViewModelLines } from 'vs/editor/common/viewModel/viewModelLines'; -import { ICoordinatesConverter, InlineDecoration, InlineDecorationType, ViewModelDecoration } from 'vs/editor/common/viewModel'; -import { filterValidationDecorations } from 'vs/editor/common/config/editorOptions'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { IEditorConfiguration } from '../config/editorConfiguration.js'; +import { IModelDecoration, ITextModel, PositionAffinity } from '../model.js'; +import { IViewModelLines } from './viewModelLines.js'; +import { ICoordinatesConverter, InlineDecoration, InlineDecorationType, ViewModelDecoration } from '../viewModel.js'; +import { filterValidationDecorations } from '../config/editorOptions.js'; +import { StandardTokenType } from '../encodedTokenAttributes.js'; export interface IDecorationsViewportData { /** diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 50366d549..96043722d 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ArrayQueue } from 'vs/base/common/arrays'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Color } from 'vs/base/common/color'; -import { Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import { ConfigurationChangedEvent, EditorOption, EDITOR_FONT_DEFAULTS, filterValidationDecorations } from 'vs/editor/common/config/editorOptions'; -import { CursorsController } from 'vs/editor/common/cursor/cursor'; -import { CursorConfiguration, CursorState, EditOperationType, IColumnSelectData, PartialCursorState } from 'vs/editor/common/cursorCommon'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorState, IViewState, ScrollType } from 'vs/editor/common/editorCommon'; -import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { EndOfLinePreference, IAttachedView, ICursorStateComputer, IGlyphMarginLanesModel, IIdentifiedSingleEditOperation, ITextModel, PositionAffinity, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { IActiveIndentGuideInfo, BracketGuideOptions, IndentGuide } from 'vs/editor/common/textModelGuides'; -import { ModelDecorationMinimapOptions, ModelDecorationOptions, ModelDecorationOverviewRulerOptions } from 'vs/editor/common/model/textModel'; -import * as textModelEvents from 'vs/editor/common/textModelEvents'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { ColorId } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { tokenizeLineToHTML } from 'vs/editor/common/languages/textToHtmlTokenizer'; -import { EditorTheme } from 'vs/editor/common/editorTheme'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { ViewLayout } from 'vs/editor/common/viewLayout/viewLayout'; -import { MinimapTokensColorTracker } from 'vs/editor/common/viewModel/minimapTokensColorTracker'; -import { ILineBreaksComputer, ILineBreaksComputerFactory, InjectedText } from 'vs/editor/common/modelLineProjectionData'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import { ICoordinatesConverter, InlineDecoration, IViewModel, IWhitespaceChangeAccessor, MinimapLinesRenderingData, OverviewRulerDecorationsGroup, ViewLineData, ViewLineRenderingData, ViewModelDecoration } from 'vs/editor/common/viewModel'; -import { ViewModelDecorations } from 'vs/editor/common/viewModel/viewModelDecorations'; -import { FocusChangedEvent, HiddenAreasChangedEvent, ModelContentChangedEvent, ModelDecorationsChangedEvent, ModelLanguageChangedEvent, ModelLanguageConfigurationChangedEvent, ModelOptionsChangedEvent, ModelTokensChangedEvent, OutgoingViewModelEvent, ReadOnlyEditAttemptEvent, ScrollChangedEvent, ViewModelEventDispatcher, ViewModelEventsCollector, ViewZonesChangedEvent } from 'vs/editor/common/viewModelEventDispatcher'; -import { IViewModelLines, ViewModelLinesFromModelAsIs, ViewModelLinesFromProjectedModel } from 'vs/editor/common/viewModel/viewModelLines'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { GlyphMarginLanesModel } from 'vs/editor/common/viewModel/glyphLanesModel'; +import { ArrayQueue } from '../../../base/common/arrays.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { Color } from '../../../base/common/color.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import * as platform from '../../../base/common/platform.js'; +import * as strings from '../../../base/common/strings.js'; +import { ConfigurationChangedEvent, EditorOption, EDITOR_FONT_DEFAULTS, filterValidationDecorations } from '../config/editorOptions.js'; +import { CursorsController } from '../cursor/cursor.js'; +import { CursorConfiguration, CursorState, EditOperationType, IColumnSelectData, PartialCursorState } from '../cursorCommon.js'; +import { CursorChangeReason } from '../cursorEvents.js'; +import { IPosition, Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { ISelection, Selection } from '../core/selection.js'; +import { ICommand, ICursorState, IViewState, ScrollType } from '../editorCommon.js'; +import { IEditorConfiguration } from '../config/editorConfiguration.js'; +import { EndOfLinePreference, IAttachedView, ICursorStateComputer, IGlyphMarginLanesModel, IIdentifiedSingleEditOperation, ITextModel, PositionAffinity, TrackedRangeStickiness } from '../model.js'; +import { IActiveIndentGuideInfo, BracketGuideOptions, IndentGuide } from '../textModelGuides.js'; +import { ModelDecorationMinimapOptions, ModelDecorationOptions, ModelDecorationOverviewRulerOptions } from '../model/textModel.js'; +import * as textModelEvents from '../textModelEvents.js'; +import { TokenizationRegistry } from '../languages.js'; +import { ColorId } from '../encodedTokenAttributes.js'; +import { ILanguageConfigurationService } from '../languages/languageConfigurationRegistry.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js'; +import { tokenizeLineToHTML } from '../languages/textToHtmlTokenizer.js'; +import { EditorTheme } from '../editorTheme.js'; +import * as viewEvents from '../viewEvents.js'; +import { ViewLayout } from '../viewLayout/viewLayout.js'; +import { MinimapTokensColorTracker } from './minimapTokensColorTracker.js'; +import { ILineBreaksComputer, ILineBreaksComputerFactory, InjectedText } from '../modelLineProjectionData.js'; +import { ViewEventHandler } from '../viewEventHandler.js'; +import { ICoordinatesConverter, InlineDecoration, IViewModel, IWhitespaceChangeAccessor, MinimapLinesRenderingData, OverviewRulerDecorationsGroup, ViewLineData, ViewLineRenderingData, ViewModelDecoration } from '../viewModel.js'; +import { ViewModelDecorations } from './viewModelDecorations.js'; +import { FocusChangedEvent, HiddenAreasChangedEvent, ModelContentChangedEvent, ModelDecorationsChangedEvent, ModelLanguageChangedEvent, ModelLanguageConfigurationChangedEvent, ModelOptionsChangedEvent, ModelTokensChangedEvent, OutgoingViewModelEvent, ReadOnlyEditAttemptEvent, ScrollChangedEvent, ViewModelEventDispatcher, ViewModelEventsCollector, ViewZonesChangedEvent } from '../viewModelEventDispatcher.js'; +import { IViewModelLines, ViewModelLinesFromModelAsIs, ViewModelLinesFromProjectedModel } from './viewModelLines.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { GlyphMarginLanesModel } from './glyphLanesModel.js'; const USE_IDENTITY_LINES_COLLECTION = true; @@ -476,10 +476,15 @@ export class ViewModel extends Disposable implements IViewModel { private readonly hiddenAreasModel = new HiddenAreasModel(); private previousHiddenAreas: readonly Range[] = []; - public setHiddenAreas(ranges: Range[], source?: unknown): void { + /** + * @param forceUpdate If true, the hidden areas will be updated even if the new ranges are the same as the previous ranges. + * This is because the model might have changed, which resets the hidden areas, but not the last cached value. + * This needs a better fix in the future. + */ + public setHiddenAreas(ranges: Range[], source?: unknown, forceUpdate?: boolean): void { this.hiddenAreasModel.setHiddenAreas(source, ranges); const mergedRanges = this.hiddenAreasModel.getMergedRanges(); - if (mergedRanges === this.previousHiddenAreas) { + if (mergedRanges === this.previousHiddenAreas && !forceUpdate) { return; } diff --git a/src/vs/editor/common/viewModel/viewModelLines.ts b/src/vs/editor/common/viewModel/viewModelLines.ts index bcabeffed..8c1142270 100644 --- a/src/vs/editor/common/viewModel/viewModelLines.ts +++ b/src/vs/editor/common/viewModel/viewModelLines.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { WrappingIndent } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration, IModelDeltaDecoration, ITextModel, PositionAffinity } from 'vs/editor/common/model'; -import { IActiveIndentGuideInfo, BracketGuideOptions, IndentGuide, IndentGuideHorizontalLine } from 'vs/editor/common/textModelGuides'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { LineInjectedText } from 'vs/editor/common/textModelEvents'; -import * as viewEvents from 'vs/editor/common/viewEvents'; -import { createModelLineProjection, IModelLineProjection } from 'vs/editor/common/viewModel/modelLineProjection'; -import { ILineBreaksComputer, ModelLineProjectionData, InjectedText, ILineBreaksComputerFactory } from 'vs/editor/common/modelLineProjectionData'; -import { ConstantTimePrefixSumComputer } from 'vs/editor/common/model/prefixSumComputer'; -import { ICoordinatesConverter, ViewLineData } from 'vs/editor/common/viewModel'; +import * as arrays from '../../../base/common/arrays.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { WrappingIndent } from '../config/editorOptions.js'; +import { FontInfo } from '../config/fontInfo.js'; +import { IPosition, Position } from '../core/position.js'; +import { Range } from '../core/range.js'; +import { IModelDecoration, IModelDeltaDecoration, ITextModel, PositionAffinity } from '../model.js'; +import { IActiveIndentGuideInfo, BracketGuideOptions, IndentGuide, IndentGuideHorizontalLine } from '../textModelGuides.js'; +import { ModelDecorationOptions } from '../model/textModel.js'; +import { LineInjectedText } from '../textModelEvents.js'; +import * as viewEvents from '../viewEvents.js'; +import { createModelLineProjection, IModelLineProjection } from './modelLineProjection.js'; +import { ILineBreaksComputer, ModelLineProjectionData, InjectedText, ILineBreaksComputerFactory } from '../modelLineProjectionData.js'; +import { ConstantTimePrefixSumComputer } from '../model/prefixSumComputer.js'; +import { ICoordinatesConverter, ViewLineData } from '../viewModel.js'; export interface IViewModelLines extends IDisposable { createCoordinatesConverter(): ICoordinatesConverter; diff --git a/src/vs/editor/common/viewModelEventDispatcher.ts b/src/vs/editor/common/viewModelEventDispatcher.ts index 49d467a7a..7fddb8025 100644 --- a/src/vs/editor/common/viewModelEventDispatcher.ts +++ b/src/vs/editor/common/viewModelEventDispatcher.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import { ViewEvent } from 'vs/editor/common/viewEvents'; -import { IContentSizeChangedEvent } from 'vs/editor/common/editorCommon'; -import { Emitter } from 'vs/base/common/event'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; +import { ViewEventHandler } from './viewEventHandler.js'; +import { ViewEvent } from './viewEvents.js'; +import { IContentSizeChangedEvent } from './editorCommon.js'; +import { Emitter } from '../../base/common/event.js'; +import { Selection } from './core/selection.js'; +import { Disposable } from '../../base/common/lifecycle.js'; +import { CursorChangeReason } from './cursorEvents.js'; +import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from './textModelEvents.js'; export class ViewModelEventDispatcher extends Disposable { diff --git a/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts b/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts index ab93153c7..9de6d4735 100644 --- a/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts +++ b/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import 'vs/css!./anchorSelect'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { TrackedRangeStickiness } from 'vs/editor/common/model'; -import { localize } from 'vs/nls'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import './anchorSelect.css'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { TrackedRangeStickiness } from '../../../common/model.js'; +import { localize } from '../../../../nls.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export const SelectionAnchorSet = new RawContextKey('selectionAnchorSet', false); diff --git a/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts b/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts index b3530eaa8..01ba78eef 100644 --- a/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts +++ b/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import 'vs/css!./bracketMatching'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution, IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IModelDeltaDecoration, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import * as nls from 'vs/nls'; -import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { registerColor } from 'vs/platform/theme/common/colorRegistry'; -import { themeColorFromId } from 'vs/platform/theme/common/themeService'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import './bracketMatching.css'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { IModelDeltaDecoration, OverviewRulerLane, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import * as nls from '../../../../nls.js'; +import { MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { registerColor } from '../../../../platform/theme/common/colorRegistry.js'; +import { themeColorFromId } from '../../../../platform/theme/common/themeService.js'; const overviewRulerBracketMatchForeground = registerColor('editorOverviewRuler.bracketMatchForeground', '#A0A0A0', nls.localize('overviewRulerBracketMatchForeground', 'Overview ruler marker color for matching brackets.')); diff --git a/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts b/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts index 7a5f7e106..e9d26789c 100644 --- a/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts +++ b/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BracketMatchingController } from 'vs/editor/contrib/bracketMatching/browser/bracketMatching'; -import { createCodeEditorServices, instantiateTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { BracketMatchingController } from '../../browser/bracketMatching.js'; +import { createCodeEditorServices, instantiateTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { instantiateTextModel } from '../../../../test/common/testTextModel.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('bracket matching', () => { let disposables: DisposableStore; diff --git a/src/vs/editor/contrib/caretOperations/browser/caretOperations.ts b/src/vs/editor/contrib/caretOperations/browser/caretOperations.ts index 9279dedf1..95843f604 100644 --- a/src/vs/editor/contrib/caretOperations/browser/caretOperations.ts +++ b/src/vs/editor/contrib/caretOperations/browser/caretOperations.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { MoveCaretCommand } from 'vs/editor/contrib/caretOperations/browser/moveCaretCommand'; -import * as nls from 'vs/nls'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ICommand } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { MoveCaretCommand } from './moveCaretCommand.js'; +import * as nls from '../../../../nls.js'; class MoveCaretAction extends EditorAction { diff --git a/src/vs/editor/contrib/caretOperations/browser/moveCaretCommand.ts b/src/vs/editor/contrib/caretOperations/browser/moveCaretCommand.ts index 81db0fd62..e3dabdc33 100644 --- a/src/vs/editor/contrib/caretOperations/browser/moveCaretCommand.ts +++ b/src/vs/editor/contrib/caretOperations/browser/moveCaretCommand.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; export class MoveCaretCommand implements ICommand { diff --git a/src/vs/editor/contrib/caretOperations/browser/transpose.ts b/src/vs/editor/contrib/caretOperations/browser/transpose.ts index 50733bd6b..e0fff8255 100644 --- a/src/vs/editor/contrib/caretOperations/browser/transpose.ts +++ b/src/vs/editor/contrib/caretOperations/browser/transpose.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand'; -import { MoveOperations } from 'vs/editor/common/cursor/cursorMoveOperations'; -import { Range } from 'vs/editor/common/core/range'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import * as nls from 'vs/nls'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ReplaceCommand } from '../../../common/commands/replaceCommand.js'; +import { MoveOperations } from '../../../common/cursor/cursorMoveOperations.js'; +import { Range } from '../../../common/core/range.js'; +import { ICommand } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import * as nls from '../../../../nls.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; class TransposeLettersAction extends EditorAction { diff --git a/src/vs/editor/contrib/caretOperations/test/browser/moveCarretCommand.test.ts b/src/vs/editor/contrib/caretOperations/test/browser/moveCarretCommand.test.ts index dc1d31330..254f228ed 100644 --- a/src/vs/editor/contrib/caretOperations/test/browser/moveCarretCommand.test.ts +++ b/src/vs/editor/contrib/caretOperations/test/browser/moveCarretCommand.test.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { MoveCaretCommand } from 'vs/editor/contrib/caretOperations/browser/moveCaretCommand'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { MoveCaretCommand } from '../../browser/moveCaretCommand.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; function testMoveCaretLeftCommand(lines: string[], selection: Selection, expectedLines: string[], expectedSelection: Selection): void { diff --git a/src/vs/editor/contrib/clipboard/browser/clipboard.ts b/src/vs/editor/contrib/clipboard/browser/clipboard.ts index e10b43e1f..de4c9a354 100644 --- a/src/vs/editor/contrib/clipboard/browser/clipboard.ts +++ b/src/vs/editor/contrib/clipboard/browser/clipboard.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as browser from 'vs/base/browser/browser'; -import { getActiveDocument } from 'vs/base/browser/dom'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import * as platform from 'vs/base/common/platform'; -import { CopyOptions, InMemoryClipboardMetadataManager } from 'vs/editor/browser/controller/textAreaInput'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Command, EditorAction, MultiCommand, registerEditorAction } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { CopyPasteController } from 'vs/editor/contrib/dropOrPasteInto/browser/copyPasteController'; -import * as nls from 'vs/nls'; -import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import * as browser from '../../../../base/browser/browser.js'; +import { getActiveDocument } from '../../../../base/browser/dom.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import * as platform from '../../../../base/common/platform.js'; +import * as nls from '../../../../nls.js'; +import { MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { CopyOptions, InMemoryClipboardMetadataManager } from '../../../browser/controller/editContext/clipboardUtils.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { Command, EditorAction, MultiCommand, registerEditorAction } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Handler } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { CopyPasteController } from '../../dropOrPasteInto/browser/copyPasteController.js'; const CLIPBOARD_CONTEXT_MENU_GROUP = '9_cutcopypaste'; @@ -201,7 +201,14 @@ function registerExecCommandImpl(target: MultiCommand | undefined, browserComman if (selection && selection.isEmpty() && !emptySelectionClipboard) { return true; } - focusedEditor.getContainerDomNode().ownerDocument.execCommand(browserCommand); + // TODO this is very ugly. The entire copy/paste/cut system needs a complete refactoring. + if (focusedEditor.getOption(EditorOption.experimentalEditContextEnabled) && browserCommand === 'cut') { + // execCommand(copy) works for edit context, but not execCommand(cut). + focusedEditor.getContainerDomNode().ownerDocument.execCommand('copy'); + focusedEditor.trigger(undefined, Handler.Cut, undefined); + } else { + focusedEditor.getContainerDomNode().ownerDocument.execCommand(browserCommand); + } return true; } return false; @@ -226,10 +233,12 @@ if (PasteAction) { // Only if editor text focus (i.e. not if editor has widget focus). const focusedEditor = codeEditorService.getFocusedCodeEditor(); if (focusedEditor && focusedEditor.hasTextFocus()) { - const result = focusedEditor.getContainerDomNode().ownerDocument.execCommand('paste'); + // execCommand(paste) does not work with edit context + const canDoDocumentExecCommand = !focusedEditor.getOption(EditorOption.experimentalEditContextEnabled); + const result = canDoDocumentExecCommand && focusedEditor.getContainerDomNode().ownerDocument.execCommand('paste'); if (result) { return CopyPasteController.get(focusedEditor)?.finishedPaste() ?? Promise.resolve(); - } else if (platform.isWeb) { + } else if (platform.isWeb || !canDoDocumentExecCommand) { // Use the clipboard service if document.execCommand('paste') was not successful return (async () => { const clipboardText = await clipboardService.readText(); diff --git a/src/vs/editor/contrib/codeAction/browser/codeAction.ts b/src/vs/editor/contrib/codeAction/browser/codeAction.ts index 048d3cb55..84160dcd2 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeAction.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeAction.ts @@ -3,29 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce, equals, isNonEmptyArray } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { illegalArgument, isCancellationError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import * as languages from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IModelService } from 'vs/editor/common/services/model'; -import { TextModelCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import * as nls from 'vs/nls'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IProgress, Progress } from 'vs/platform/progress/common/progress'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource, filtersAction, mayIncludeActionsOfKind } from '../common/types'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; +import { coalesce, equals, isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { illegalArgument, isCancellationError, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IBulkEditService } from '../../../browser/services/bulkEditService.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import * as languages from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IModelService } from '../../../common/services/model.js'; +import { TextModelCancellationTokenSource } from '../../editorState/browser/editorState.js'; +import * as nls from '../../../../nls.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IProgress, Progress } from '../../../../platform/progress/common/progress.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource, filtersAction, mayIncludeActionsOfKind } from '../common/types.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; + + export const codeActionCommandId = 'editor.action.codeAction'; export const quickFixCommandId = 'editor.action.quickFix'; diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts b/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts index ae15cf9ba..a8dbc9753 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { autoFixCommandId, codeActionCommandId, fixAllCommandId, organizeImportsCommandId, quickFixCommandId, refactorCommandId, sourceActionCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import * as nls from 'vs/nls'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { CodeActionAutoApply, CodeActionCommandArgs, CodeActionFilter, CodeActionKind, CodeActionTriggerSource } from '../common/types'; -import { CodeActionController } from './codeActionController'; -import { SUPPORTED_CODE_ACTIONS } from './codeActionModel'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { IJSONSchema } from '../../../../base/common/jsonSchema.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { escapeRegExpCharacters } from '../../../../base/common/strings.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { autoFixCommandId, codeActionCommandId, fixAllCommandId, organizeImportsCommandId, quickFixCommandId, refactorCommandId, sourceActionCommandId } from './codeAction.js'; +import * as nls from '../../../../nls.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { CodeActionAutoApply, CodeActionCommandArgs, CodeActionFilter, CodeActionKind, CodeActionTriggerSource } from '../common/types.js'; +import { CodeActionController } from './codeActionController.js'; +import { SUPPORTED_CODE_ACTIONS } from './codeActionModel.js'; function contextKeyForSupportedActions(kind: HierarchicalKind) { return ContextKeyExpr.regex( diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts b/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts index 1dd22e4c4..ca5a06c98 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { editorConfigurationBaseNode } from 'vs/editor/common/config/editorConfigurationSchema'; -import { AutoFixAction, CodeActionCommand, FixAllAction, OrganizeImportsAction, QuickFixAction, RefactorAction, SourceAction } from 'vs/editor/contrib/codeAction/browser/codeActionCommands'; -import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController'; -import { LightBulbWidget } from 'vs/editor/contrib/codeAction/browser/lightBulbWidget'; -import * as nls from 'vs/nls'; -import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { editorConfigurationBaseNode } from '../../../common/config/editorConfigurationSchema.js'; +import { AutoFixAction, CodeActionCommand, FixAllAction, OrganizeImportsAction, QuickFixAction, RefactorAction, SourceAction } from './codeActionCommands.js'; +import { CodeActionController } from './codeActionController.js'; +import { LightBulbWidget } from './lightBulbWidget.js'; +import * as nls from '../../../../nls.js'; +import { ConfigurationScope, Extensions, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; registerEditorContribution(CodeActionController.ID, CodeActionController, EditorContributionInstantiation.Eventually); registerEditorContribution(LightBulbWidget.ID, LightBulbWidget, EditorContributionInstantiation.Lazy); diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionController.ts b/src/vs/editor/contrib/codeAction/browser/codeActionController.ts index dbbe9a912..3485e0a18 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionController.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionController.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getDomNodePagePosition } from 'vs/base/browser/dom'; -import * as aria from 'vs/base/browser/ui/aria/aria'; -import { IAnchor } from 'vs/base/browser/ui/contextview/contextview'; -import { IAction } from 'vs/base/common/actions'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Color } from 'vs/base/common/color'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Lazy } from 'vs/base/common/lazy'; -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; -import { CodeActionTriggerType } from 'vs/editor/common/languages'; -import { IModelDeltaDecoration } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ApplyCodeActionReason, applyCodeAction } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionKeybindingResolver } from 'vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver'; -import { toMenuItems } from 'vs/editor/contrib/codeAction/browser/codeActionMenu'; -import { LightBulbWidget } from 'vs/editor/contrib/codeAction/browser/lightBulbWidget'; -import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; -import { localize } from 'vs/nls'; -import { IActionListDelegate } from 'vs/platform/actionWidget/browser/actionList'; -import { IActionWidgetService } from 'vs/platform/actionWidget/browser/actionWidget'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { editorFindMatchHighlight, editorFindMatchHighlightBorder } from 'vs/platform/theme/common/colorRegistry'; -import { isHighContrast } from 'vs/platform/theme/common/theme'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { CodeActionAutoApply, CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from 'vs/editor/contrib/codeAction/common/types'; -import { CodeActionModel, CodeActionsState } from 'vs/editor/contrib/codeAction/browser/codeActionModel'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { getDomNodePagePosition } from '../../../../base/browser/dom.js'; +import * as aria from '../../../../base/browser/ui/aria/aria.js'; +import { IAnchor } from '../../../../base/browser/ui/contextview/contextview.js'; +import { IAction } from '../../../../base/common/actions.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Color } from '../../../../base/common/color.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Lazy } from '../../../../base/common/lazy.js'; +import { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IEditorContribution, ScrollType } from '../../../common/editorCommon.js'; +import { CodeActionTriggerType } from '../../../common/languages.js'; +import { IModelDeltaDecoration } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ApplyCodeActionReason, applyCodeAction } from './codeAction.js'; +import { CodeActionKeybindingResolver } from './codeActionKeybindingResolver.js'; +import { toMenuItems } from './codeActionMenu.js'; +import { LightBulbWidget } from './lightBulbWidget.js'; +import { MessageController } from '../../message/browser/messageController.js'; +import { localize } from '../../../../nls.js'; +import { IActionListDelegate } from '../../../../platform/actionWidget/browser/actionList.js'; +import { IActionWidgetService } from '../../../../platform/actionWidget/browser/actionWidget.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IMarkerService } from '../../../../platform/markers/common/markers.js'; +import { IEditorProgressService } from '../../../../platform/progress/common/progress.js'; +import { editorFindMatchHighlight, editorFindMatchHighlightBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { CodeActionAutoApply, CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types.js'; +import { CodeActionModel, CodeActionsState } from './codeActionModel.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; interface IActionShowOptions { readonly includeDisabledActions?: boolean; @@ -180,6 +180,12 @@ export class CodeActionController extends Disposable implements IEditorContribut return; } + + const selection = this._editor.getSelection(); + if (selection?.startLineNumber !== newState.position.lineNumber) { + return; + } + this._lightBulbWidget.value?.update(actions, newState.trigger, newState.position); if (newState.trigger.type === CodeActionTriggerType.Invoke) { diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver.ts b/src/vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver.ts index 088fcfc95..faae3562d 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { Lazy } from 'vs/base/common/lazy'; -import { CodeAction } from 'vs/editor/common/languages'; -import { codeActionCommandId, fixAllCommandId, organizeImportsCommandId, refactorCommandId, sourceActionCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionAutoApply, CodeActionCommandArgs, CodeActionKind } from 'vs/editor/contrib/codeAction/common/types'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { ResolvedKeybinding } from '../../../../base/common/keybindings.js'; +import { Lazy } from '../../../../base/common/lazy.js'; +import { CodeAction } from '../../../common/languages.js'; +import { codeActionCommandId, fixAllCommandId, organizeImportsCommandId, refactorCommandId, sourceActionCommandId } from './codeAction.js'; +import { CodeActionAutoApply, CodeActionCommandArgs, CodeActionKind } from '../common/types.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; interface ResolveCodeActionKeybinding { readonly kind: HierarchicalKind; diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts b/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts index 8763487cb..5384b7a5b 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/base/browser/ui/codicons/codiconStyles'; // The codicon symbol styles are defined here and must be loaded -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { CodeAction } from 'vs/editor/common/languages'; -import { CodeActionItem, CodeActionKind } from 'vs/editor/contrib/codeAction/common/types'; -import 'vs/editor/contrib/symbolIcons/browser/symbolIcons'; // The codicon symbol colors are defined here and must be loaded to get colors -import { localize } from 'vs/nls'; -import { ActionListItemKind, IActionListItem } from 'vs/platform/actionWidget/browser/actionList'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; +import '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { ResolvedKeybinding } from '../../../../base/common/keybindings.js'; +import { CodeAction } from '../../../common/languages.js'; +import { CodeActionItem, CodeActionKind } from '../common/types.js'; +import '../../symbolIcons/browser/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors +import { localize } from '../../../../nls.js'; +import { ActionListItemKind, IActionListItem } from '../../../../platform/actionWidget/browser/actionList.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; interface ActionGroup { readonly kind: HierarchicalKind; diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts b/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts index 07c286599..a909d559e 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, TimeoutTimer } from 'vs/base/common/async'; -import { isCancellationError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption, ShowLightbulbIconMode } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { CodeActionProvider, CodeActionTriggerType } from 'vs/editor/common/languages'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { IEditorProgressService, Progress } from 'vs/platform/progress/common/progress'; -import { CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types'; -import { getCodeActions } from './codeAction'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { CancelablePromise, createCancelablePromise, TimeoutTimer } from '../../../../base/common/async.js'; +import { isCancellationError } from '../../../../base/common/errors.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption, ShowLightbulbIconMode } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Selection } from '../../../common/core/selection.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { CodeActionProvider, CodeActionTriggerType } from '../../../common/languages.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IMarkerService } from '../../../../platform/markers/common/markers.js'; +import { IEditorProgressService, Progress } from '../../../../platform/progress/common/progress.js'; +import { CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types.js'; +import { getCodeActions } from './codeAction.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; export const SUPPORTED_CODE_ACTIONS = new RawContextKey('supportedCodeAction', ''); diff --git a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts index 0395f4216..39dd29629 100644 --- a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts +++ b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Gesture } from 'vs/base/browser/touch'; -import { Codicon } from 'vs/base/common/codicons'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./lightBulbWidget'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { GlyphMarginLane, IModelDecorationsChangeAccessor, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { computeIndentLevel } from 'vs/editor/common/model/utils'; -import { autoFixCommandId, quickFixCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionSet, CodeActionTrigger } from 'vs/editor/contrib/codeAction/common/types'; -import * as nls from 'vs/nls'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { Range } from 'vs/editor/common/core/range'; +import * as dom from '../../../../base/browser/dom.js'; +import { Gesture } from '../../../../base/browser/touch.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import './lightBulbWidget.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { GlyphMarginLane, IModelDecorationsChangeAccessor, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { computeIndentLevel } from '../../../common/model/utils.js'; +import { autoFixCommandId, quickFixCommandId } from './codeAction.js'; +import { CodeActionSet, CodeActionTrigger } from '../common/types.js'; +import * as nls from '../../../../nls.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { Range } from '../../../common/core/range.js'; const GUTTER_LIGHTBULB_ICON = registerIcon('gutter-lightbulb', Codicon.lightBulb, nls.localize('gutterLightbulbWidget', 'Icon which spawns code actions menu from the gutter when there is no space in the editor.')); const GUTTER_LIGHTBULB_AUTO_FIX_ICON = registerIcon('gutter-lightbulb-auto-fix', Codicon.lightbulbAutofix, nls.localize('gutterLightbulbAutoFixWidget', 'Icon which spawns code actions menu from the gutter when there is no space in the editor and a quick fix is available.')); @@ -75,6 +75,14 @@ export class LightBulbWidget extends Disposable implements IContentWidget { private _gutterState: LightBulbState.State = LightBulbState.Hidden; private _iconClasses: string[] = []; + private readonly lightbulbClasses = [ + 'codicon-' + GUTTER_LIGHTBULB_ICON.id, + 'codicon-' + GUTTER_LIGHTBULB_AIFIX_AUTO_FIX_ICON.id, + 'codicon-' + GUTTER_LIGHTBULB_AUTO_FIX_ICON.id, + 'codicon-' + GUTTER_LIGHTBULB_AIFIX_ICON.id, + 'codicon-' + GUTTER_SPARKLE_FILLED_ICON.id + ]; + private _preferredKbLabel?: string; private _quickFixKbLabel?: string; @@ -148,15 +156,8 @@ export class LightBulbWidget extends Disposable implements IContentWidget { })); this._register(this._editor.onMouseDown(async (e: IEditorMouseEvent) => { - const lightbulbClasses = [ - 'codicon-' + GUTTER_LIGHTBULB_ICON.id, - 'codicon-' + GUTTER_LIGHTBULB_AIFIX_AUTO_FIX_ICON.id, - 'codicon-' + GUTTER_LIGHTBULB_AUTO_FIX_ICON.id, - 'codicon-' + GUTTER_LIGHTBULB_AIFIX_ICON.id, - 'codicon-' + GUTTER_SPARKLE_FILLED_ICON.id - ]; - - if (!e.target.element || !lightbulbClasses.some(cls => e.target.element && e.target.element.classList.contains(cls))) { + + if (!e.target.element || !this.lightbulbClasses.some(cls => e.target.element && e.target.element.classList.contains(cls))) { return; } @@ -247,7 +248,9 @@ export class LightBulbWidget extends Disposable implements IContentWidget { let hasDecoration = false; if (currLineDecorations) { for (const decoration of currLineDecorations) { - if (decoration.options.glyphMarginClassName) { + const glyphClass = decoration.options.glyphMarginClassName; + + if (glyphClass && !this.lightbulbClasses.some(className => glyphClass.includes(className))) { hasDecoration = true; break; } @@ -271,7 +274,6 @@ export class LightBulbWidget extends Disposable implements IContentWidget { const currLineEmptyOrIndented = isLineEmptyOrIndented(lineNumber); const notEmpty = !nextLineEmptyOrIndented && !prevLineEmptyOrIndented; - // check above and below. if both are blocked, display lightbulb in the gutter. if (!nextLineEmptyOrIndented && !prevLineEmptyOrIndented && !hasDecoration) { this.gutterState = new LightBulbState.Showing(actions, trigger, atPosition, { @@ -280,7 +282,7 @@ export class LightBulbWidget extends Disposable implements IContentWidget { }); this.renderGutterLightbub(); return this.hide(); - } else if (prevLineEmptyOrIndented || endLine || (notEmpty && !currLineEmptyOrIndented)) { + } else if (prevLineEmptyOrIndented || endLine || (prevLineEmptyOrIndented && !currLineEmptyOrIndented)) { effectiveLineNumber -= 1; } else if (nextLineEmptyOrIndented || (notEmpty && currLineEmptyOrIndented)) { effectiveLineNumber += 1; diff --git a/src/vs/editor/contrib/codeAction/common/types.ts b/src/vs/editor/contrib/codeAction/common/types.ts index febdfda4d..691a0e816 100644 --- a/src/vs/editor/contrib/codeAction/common/types.ts +++ b/src/vs/editor/contrib/codeAction/common/types.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { Position } from 'vs/editor/common/core/position'; -import * as languages from 'vs/editor/common/languages'; -import { ActionSet } from 'vs/platform/actionWidget/common/actionWidget'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { Position } from '../../../common/core/position.js'; +import * as languages from '../../../common/languages.js'; +import { ActionSet } from '../../../../platform/actionWidget/common/actionWidget.js'; export const CodeActionKind = new class { public readonly QuickFix = new HierarchicalKind('quickfix'); diff --git a/src/vs/editor/contrib/codeAction/test/browser/codeAction.test.ts b/src/vs/editor/contrib/codeAction/test/browser/codeAction.test.ts index a98da2b0e..d3265cf48 100644 --- a/src/vs/editor/contrib/codeAction/test/browser/codeAction.test.ts +++ b/src/vs/editor/contrib/codeAction/test/browser/codeAction.test.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import * as languages from 'vs/editor/common/languages'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { getCodeActions } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionItem, CodeActionKind, CodeActionTriggerSource } from 'vs/editor/contrib/codeAction/common/types'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { IMarkerData, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { Progress } from 'vs/platform/progress/common/progress'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { HierarchicalKind } from '../../../../../base/common/hierarchicalKind.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import * as languages from '../../../../common/languages.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { getCodeActions } from '../../browser/codeAction.js'; +import { CodeActionItem, CodeActionKind, CodeActionTriggerSource } from '../../common/types.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { IMarkerData, MarkerSeverity } from '../../../../../platform/markers/common/markers.js'; +import { Progress } from '../../../../../platform/progress/common/progress.js'; function staticCodeActionProvider(...actions: languages.CodeAction[]): languages.CodeActionProvider { return new class implements languages.CodeActionProvider { diff --git a/src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.test.ts b/src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.test.ts index 664a36b2d..0172318d9 100644 --- a/src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.test.ts +++ b/src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { KeyCodeChord } from 'vs/base/common/keybindings'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { organizeImportsCommandId, refactorCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionKeybindingResolver } from 'vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver'; -import { CodeActionKind } from 'vs/editor/contrib/codeAction/common/types'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; -import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding'; +import { KeyCodeChord } from '../../../../../base/common/keybindings.js'; +import { KeyCode } from '../../../../../base/common/keyCodes.js'; +import { OperatingSystem } from '../../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { organizeImportsCommandId, refactorCommandId } from '../../browser/codeAction.js'; +import { CodeActionKeybindingResolver } from '../../browser/codeActionKeybindingResolver.js'; +import { CodeActionKind } from '../../common/types.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { ResolvedKeybindingItem } from '../../../../../platform/keybinding/common/resolvedKeybindingItem.js'; +import { USLayoutResolvedKeybinding } from '../../../../../platform/keybinding/common/usLayoutResolvedKeybinding.js'; suite('CodeActionKeybindingResolver', () => { diff --git a/src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts b/src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts index 5946fb24f..666b185bd 100644 --- a/src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts +++ b/src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { promiseWithResolvers } from 'vs/base/common/async'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import * as languages from 'vs/editor/common/languages'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { CodeActionModel, CodeActionsState } from 'vs/editor/contrib/codeAction/browser/codeActionModel'; -import { createTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { MarkerService } from 'vs/platform/markers/common/markerService'; +import { promiseWithResolvers } from '../../../../../base/common/async.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { assertType } from '../../../../../base/common/types.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import * as languages from '../../../../common/languages.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { CodeActionModel, CodeActionsState } from '../../browser/codeActionModel.js'; +import { createTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { MockContextKeyService } from '../../../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { MarkerService } from '../../../../../platform/markers/common/markerService.js'; const testProvider = { provideCodeActions(): languages.CodeActionList { diff --git a/src/vs/editor/contrib/colorPicker/browser/color.ts b/src/vs/editor/contrib/colorPicker/browser/color.ts index 9cf73f794..e6766ffb7 100644 --- a/src/vs/editor/contrib/colorPicker/browser/color.ts +++ b/src/vs/editor/contrib/colorPicker/browser/color.ts @@ -3,19 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { URI } from 'vs/base/common/uri'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { DocumentColorProvider, IColorInformation, IColorPresentation } from 'vs/editor/common/languages'; -import { IModelService } from 'vs/editor/common/services/model'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DefaultDocumentColorProvider } from 'vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { illegalArgument, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IRange } from '../../../common/core/range.js'; +import { ITextModel } from '../../../common/model.js'; +import { DocumentColorProvider, IColorInformation, IColorPresentation } from '../../../common/languages.js'; +import { IModelService } from '../../../common/services/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { DefaultDocumentColorProvider } from './defaultDocumentColorProvider.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { ServicesAccessor } from '../../../browser/editorExtensions.js'; export async function getColors(colorProviderRegistry: LanguageFeatureRegistry, model: ITextModel, token: CancellationToken, isDefaultColorDecoratorsEnabled: boolean = true): Promise { return _findColorData(new ColorDataCollector(), colorProviderRegistry, model, token, isDefaultColorDecoratorsEnabled); @@ -30,7 +29,7 @@ export interface IColorData { provider: DocumentColorProvider; } -interface IExtColorData { range: IRange; color: [number, number, number, number] } +export interface IExtColorData { range: IRange; color: [number, number, number, number] } interface DataCollector { compute(provider: DocumentColorProvider, model: ITextModel, token: CancellationToken, result: T[]): Promise; @@ -49,7 +48,7 @@ class ColorDataCollector implements DataCollector { } } -class ExtColorDataCollector implements DataCollector { +export class ExtColorDataCollector implements DataCollector { constructor() { } async compute(provider: DocumentColorProvider, model: ITextModel, token: CancellationToken, colors: IExtColorData[]): Promise { const documentColors = await provider.provideDocumentColors(model, token); @@ -63,7 +62,7 @@ class ExtColorDataCollector implements DataCollector { } -class ColorPresentationsCollector implements DataCollector { +export class ColorPresentationsCollector implements DataCollector { constructor(private colorInfo: IColorInformation) { } async compute(provider: DocumentColorProvider, model: ITextModel, _token: CancellationToken, colors: IColorPresentation[]): Promise { const documentColors = await provider.provideColorPresentations(model, this.colorInfo, CancellationToken.None); @@ -74,7 +73,7 @@ class ColorPresentationsCollector implements DataCollector { } } -async function _findColorData(collector: DataCollector, colorProviderRegistry: LanguageFeatureRegistry, model: ITextModel, token: CancellationToken, isDefaultColorDecoratorsEnabled: boolean): Promise { +export async function _findColorData(collector: DataCollector, colorProviderRegistry: LanguageFeatureRegistry, model: ITextModel, token: CancellationToken, isDefaultColorDecoratorsEnabled: boolean): Promise { let validDocumentColorProviderFound = false; let defaultProvider: DefaultDocumentColorProvider | undefined; const colorData: T[] = []; @@ -103,7 +102,7 @@ async function _findColorData; isDefaultColorDecoratorsEnabled: boolean } { +export function _setupColorCommand(accessor: ServicesAccessor, resource: URI): { model: ITextModel; colorProviderRegistry: LanguageFeatureRegistry; isDefaultColorDecoratorsEnabled: boolean } { const { colorProvider: colorProviderRegistry } = accessor.get(ILanguageFeaturesService); const model = accessor.get(IModelService).getModel(resource); if (!model) { @@ -113,22 +112,3 @@ function _setupColorCommand(accessor: ServicesAccessor, resource: URI): { model: return { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled }; } -CommandsRegistry.registerCommand('_executeDocumentColorProvider', function (accessor, ...args) { - const [resource] = args; - if (!(resource instanceof URI)) { - throw illegalArgument(); - } - const { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled } = _setupColorCommand(accessor, resource); - return _findColorData(new ExtColorDataCollector(), colorProviderRegistry, model, CancellationToken.None, isDefaultColorDecoratorsEnabled); -}); - -CommandsRegistry.registerCommand('_executeColorPresentationProvider', function (accessor, ...args) { - const [color, context] = args; - const { uri, range } = context; - if (!(uri instanceof URI) || !Array.isArray(color) || color.length !== 4 || !Range.isIRange(range)) { - throw illegalArgument(); - } - const { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled } = _setupColorCommand(accessor, uri); - const [red, green, blue, alpha] = color; - return _findColorData(new ColorPresentationsCollector({ range: range, color: { red, green, blue, alpha } }), colorProviderRegistry, model, CancellationToken.None, isDefaultColorDecoratorsEnabled); -}); diff --git a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts index 150f23daa..19d9d9d57 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts @@ -3,26 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, TimeoutTimer } from 'vs/base/common/async'; -import { RGBA } from 'vs/base/common/color'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { noBreakWhitespace } from 'vs/base/common/strings'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { DynamicCssRules } from 'vs/editor/browser/editorDom'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { IModelDecoration, IModelDeltaDecoration } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { getColors, IColorData } from 'vs/editor/contrib/colorPicker/browser/color'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { CancelablePromise, createCancelablePromise, TimeoutTimer } from '../../../../base/common/async.js'; +import { RGBA } from '../../../../base/common/color.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { noBreakWhitespace } from '../../../../base/common/strings.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { DynamicCssRules } from '../../../browser/editorDom.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { IModelDecoration, IModelDeltaDecoration } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { getColors, IColorData } from './color.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; export const ColorDecorationInjectedTextMarker = Object.create({}); @@ -288,5 +287,3 @@ export class DecoratorLimitReporter { } } } - -registerEditorContribution(ColorDetector.ID, ColorDetector, EditorContributionInstantiation.AfterFirstRender); diff --git a/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts b/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts deleted file mode 100644 index 32956ec08..000000000 --- a/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts +++ /dev/null @@ -1,277 +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 { AsyncIterableObject } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Color, RGBA } from 'vs/base/common/color'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { DocumentColorProvider, IColorInformation } from 'vs/editor/common/languages'; -import { getColorPresentations, getColors } from 'vs/editor/contrib/colorPicker/browser/color'; -import { ColorDetector } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; -import { ColorPickerModel } from 'vs/editor/contrib/colorPicker/browser/colorPickerModel'; -import { ColorPickerWidget } from 'vs/editor/contrib/colorPicker/browser/colorPickerWidget'; -import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { Dimension } from 'vs/base/browser/dom'; -import * as nls from 'vs/nls'; - -export class ColorHover implements IHoverPart { - - /** - * Force the hover to always be rendered at this specific range, - * even in the case of multiple hover parts. - */ - public readonly forceShowAtRange: boolean = true; - - constructor( - public readonly owner: IEditorHoverParticipant, - public readonly range: Range, - public readonly model: ColorPickerModel, - public readonly provider: DocumentColorProvider - ) { } - - public isValidForHoverAnchor(anchor: HoverAnchor): boolean { - return ( - anchor.type === HoverAnchorType.Range - && this.range.startColumn <= anchor.range.startColumn - && this.range.endColumn >= anchor.range.endColumn - ); - } -} - -export class ColorHoverParticipant implements IEditorHoverParticipant { - - public readonly hoverOrdinal: number = 2; - - private _colorPicker: ColorPickerWidget | undefined; - - constructor( - private readonly _editor: ICodeEditor, - @IThemeService private readonly _themeService: IThemeService, - ) { } - - public computeSync(_anchor: HoverAnchor, _lineDecorations: IModelDecoration[]): ColorHover[] { - return []; - } - - public computeAsync(anchor: HoverAnchor, lineDecorations: IModelDecoration[], token: CancellationToken): AsyncIterableObject { - return AsyncIterableObject.fromPromise(this._computeAsync(anchor, lineDecorations, token)); - } - - private async _computeAsync(_anchor: HoverAnchor, lineDecorations: IModelDecoration[], _token: CancellationToken): Promise { - if (!this._editor.hasModel()) { - return []; - } - const colorDetector = ColorDetector.get(this._editor); - if (!colorDetector) { - return []; - } - for (const d of lineDecorations) { - if (!colorDetector.isColorDecoration(d)) { - continue; - } - - const colorData = colorDetector.getColorData(d.range.getStartPosition()); - if (colorData) { - const colorHover = await _createColorHover(this, this._editor.getModel(), colorData.colorInfo, colorData.provider); - return [colorHover]; - } - - } - return []; - } - - public renderHoverParts(context: IEditorHoverRenderContext, hoverParts: ColorHover[]): IRenderedHoverParts { - const renderedPart = renderHoverParts(this, this._editor, this._themeService, hoverParts, context); - if (!renderedPart) { - return new RenderedHoverParts([]); - } - this._colorPicker = renderedPart.colorPicker; - const renderedHoverPart: IRenderedHoverPart = { - hoverPart: renderedPart.hoverPart, - hoverElement: this._colorPicker.domNode, - dispose() { renderedPart.disposables.dispose(); } - }; - return new RenderedHoverParts([renderedHoverPart]); - } - - public getAccessibleContent(hoverPart: ColorHover): string { - return nls.localize('hoverAccessibilityColorParticipant', 'There is a color picker here.'); - } - - public handleResize(): void { - this._colorPicker?.layout(); - } - - public isColorPickerVisible(): boolean { - return !!this._colorPicker; - } -} - -export class StandaloneColorPickerHover { - constructor( - public readonly owner: StandaloneColorPickerParticipant, - public readonly range: Range, - public readonly model: ColorPickerModel, - public readonly provider: DocumentColorProvider - ) { } -} - -export class StandaloneColorPickerParticipant { - - public readonly hoverOrdinal: number = 2; - private _color: Color | null = null; - - constructor( - private readonly _editor: ICodeEditor, - @IThemeService private readonly _themeService: IThemeService, - ) { } - - public async createColorHover(defaultColorInfo: IColorInformation, defaultColorProvider: DocumentColorProvider, colorProviderRegistry: LanguageFeatureRegistry): Promise<{ colorHover: StandaloneColorPickerHover; foundInEditor: boolean } | null> { - if (!this._editor.hasModel()) { - return null; - } - const colorDetector = ColorDetector.get(this._editor); - if (!colorDetector) { - return null; - } - const colors = await getColors(colorProviderRegistry, this._editor.getModel(), CancellationToken.None); - let foundColorInfo: IColorInformation | null = null; - let foundColorProvider: DocumentColorProvider | null = null; - for (const colorData of colors) { - const colorInfo = colorData.colorInfo; - if (Range.containsRange(colorInfo.range, defaultColorInfo.range)) { - foundColorInfo = colorInfo; - foundColorProvider = colorData.provider; - } - } - const colorInfo = foundColorInfo ?? defaultColorInfo; - const colorProvider = foundColorProvider ?? defaultColorProvider; - const foundInEditor = !!foundColorInfo; - return { colorHover: await _createColorHover(this, this._editor.getModel(), colorInfo, colorProvider), foundInEditor: foundInEditor }; - } - - public async updateEditorModel(colorHoverData: StandaloneColorPickerHover): Promise { - if (!this._editor.hasModel()) { - return; - } - const colorPickerModel = colorHoverData.model; - let range = new Range(colorHoverData.range.startLineNumber, colorHoverData.range.startColumn, colorHoverData.range.endLineNumber, colorHoverData.range.endColumn); - if (this._color) { - await _updateColorPresentations(this._editor.getModel(), colorPickerModel, this._color, range, colorHoverData); - range = _updateEditorModel(this._editor, range, colorPickerModel); - } - } - - public renderHoverParts(context: IEditorHoverRenderContext, hoverParts: StandaloneColorPickerHover[]): { disposables: IDisposable; hoverPart: StandaloneColorPickerHover; colorPicker: ColorPickerWidget } | undefined { - return renderHoverParts(this, this._editor, this._themeService, hoverParts, context); - } - - public set color(color: Color | null) { - this._color = color; - } - - public get color(): Color | null { - return this._color; - } -} - -async function _createColorHover(participant: T, editorModel: ITextModel, colorInfo: IColorInformation, provider: DocumentColorProvider): Promise; -async function _createColorHover(participant: ColorHoverParticipant | StandaloneColorPickerParticipant, editorModel: ITextModel, colorInfo: IColorInformation, provider: DocumentColorProvider): Promise { - const originalText = editorModel.getValueInRange(colorInfo.range); - const { red, green, blue, alpha } = colorInfo.color; - const rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha); - const color = new Color(rgba); - - const colorPresentations = await getColorPresentations(editorModel, colorInfo, provider, CancellationToken.None); - const model = new ColorPickerModel(color, [], 0); - model.colorPresentations = colorPresentations || []; - model.guessColorPresentation(color, originalText); - - if (participant instanceof ColorHoverParticipant) { - return new ColorHover(participant, Range.lift(colorInfo.range), model, provider); - } else { - return new StandaloneColorPickerHover(participant, Range.lift(colorInfo.range), model, provider); - } -} - -function renderHoverParts(participant: ColorHoverParticipant | StandaloneColorPickerParticipant, editor: ICodeEditor, themeService: IThemeService, hoverParts: T[], context: IEditorHoverRenderContext): { hoverPart: T; colorPicker: ColorPickerWidget; disposables: DisposableStore } | undefined { - if (hoverParts.length === 0 || !editor.hasModel()) { - return undefined; - } - if (context.setMinimumDimensions) { - const minimumHeight = editor.getOption(EditorOption.lineHeight) + 8; - context.setMinimumDimensions(new Dimension(302, minimumHeight)); - } - - const disposables = new DisposableStore(); - const colorHover = hoverParts[0]; - const editorModel = editor.getModel(); - const model = colorHover.model; - const colorPicker = disposables.add(new ColorPickerWidget(context.fragment, model, editor.getOption(EditorOption.pixelRatio), themeService, participant instanceof StandaloneColorPickerParticipant)); - - let editorUpdatedByColorPicker = false; - let range = new Range(colorHover.range.startLineNumber, colorHover.range.startColumn, colorHover.range.endLineNumber, colorHover.range.endColumn); - if (participant instanceof StandaloneColorPickerParticipant) { - const color = colorHover.model.color; - participant.color = color; - _updateColorPresentations(editorModel, model, color, range, colorHover); - disposables.add(model.onColorFlushed((color: Color) => { - participant.color = color; - })); - } else { - disposables.add(model.onColorFlushed(async (color: Color) => { - await _updateColorPresentations(editorModel, model, color, range, colorHover); - editorUpdatedByColorPicker = true; - range = _updateEditorModel(editor, range, model); - })); - } - disposables.add(model.onDidChangeColor((color: Color) => { - _updateColorPresentations(editorModel, model, color, range, colorHover); - })); - disposables.add(editor.onDidChangeModelContent((e) => { - if (editorUpdatedByColorPicker) { - editorUpdatedByColorPicker = false; - } else { - context.hide(); - editor.focus(); - } - })); - return { hoverPart: colorHover, colorPicker, disposables }; -} - -function _updateEditorModel(editor: IActiveCodeEditor, range: Range, model: ColorPickerModel): Range { - const textEdits: ISingleEditOperation[] = []; - const edit = model.presentation.textEdit ?? { range, text: model.presentation.label, forceMoveMarkers: false }; - textEdits.push(edit); - - if (model.presentation.additionalTextEdits) { - textEdits.push(...model.presentation.additionalTextEdits); - } - const replaceRange = Range.lift(edit.range); - const trackedRange = editor.getModel()._setTrackedRange(null, replaceRange, TrackedRangeStickiness.GrowsOnlyWhenTypingAfter); - editor.executeEdits('colorpicker', textEdits); - editor.pushUndoStop(); - return editor.getModel()._getTrackedRange(trackedRange) ?? replaceRange; -} - -async function _updateColorPresentations(editorModel: ITextModel, colorPickerModel: ColorPickerModel, color: Color, range: Range, colorHover: ColorHover | StandaloneColorPickerHover) { - const colorPresentations = await getColorPresentations(editorModel, { - range: range, - color: { - red: color.rgba.r / 255, - green: color.rgba.g / 255, - blue: color.rgba.b / 255, - alpha: color.rgba.a - } - }, colorHover.provider, CancellationToken.None); - colorPickerModel.colorPresentations = colorPresentations || []; -} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerContribution.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerContribution.ts new file mode 100644 index 000000000..9bdfa72e6 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerContribution.ts @@ -0,0 +1,53 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { illegalArgument } from '../../../../base/common/errors.js'; +import { URI } from '../../../../base/common/uri.js'; +import { registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { registerEditorFeature } from '../../../common/editorFeatures.js'; +import { IColorPresentation } from '../../../common/languages.js'; +import { HoverParticipantRegistry } from '../../hover/browser/hoverTypes.js'; +import { _findColorData, _setupColorCommand, ColorPresentationsCollector, ExtColorDataCollector, IExtColorData } from './color.js'; +import { ColorDetector } from './colorDetector.js'; +import { DefaultDocumentColorProviderFeature } from './defaultDocumentColorProvider.js'; +import { HoverColorPickerContribution } from './hoverColorPicker/hoverColorPickerContribution.js'; +import { HoverColorPickerParticipant } from './hoverColorPicker/hoverColorPickerParticipant.js'; +import { HideStandaloneColorPicker, InsertColorWithStandaloneColorPicker, ShowOrFocusStandaloneColorPicker } from './standaloneColorPicker/standaloneColorPickerActions.js'; +import { StandaloneColorPickerController } from './standaloneColorPicker/standaloneColorPickerController.js'; +import { Range } from '../../../common/core/range.js'; + +registerEditorAction(HideStandaloneColorPicker); +registerEditorAction(InsertColorWithStandaloneColorPicker); +registerAction2(ShowOrFocusStandaloneColorPicker); + +registerEditorContribution(HoverColorPickerContribution.ID, HoverColorPickerContribution, EditorContributionInstantiation.BeforeFirstInteraction); +registerEditorContribution(StandaloneColorPickerController.ID, StandaloneColorPickerController, EditorContributionInstantiation.AfterFirstRender); +registerEditorContribution(ColorDetector.ID, ColorDetector, EditorContributionInstantiation.AfterFirstRender); +registerEditorFeature(DefaultDocumentColorProviderFeature); + +HoverParticipantRegistry.register(HoverColorPickerParticipant); + +CommandsRegistry.registerCommand('_executeDocumentColorProvider', function (accessor, ...args) { + const [resource] = args; + if (!(resource instanceof URI)) { + throw illegalArgument(); + } + const { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled } = _setupColorCommand(accessor, resource); + return _findColorData(new ExtColorDataCollector(), colorProviderRegistry, model, CancellationToken.None, isDefaultColorDecoratorsEnabled); +}); + +CommandsRegistry.registerCommand('_executeColorPresentationProvider', function (accessor, ...args) { + const [color, context] = args; + const { uri, range } = context; + if (!(uri instanceof URI) || !Array.isArray(color) || color.length !== 4 || !Range.isIRange(range)) { + throw illegalArgument(); + } + const { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled } = _setupColorCommand(accessor, uri); + const [red, green, blue, alpha] = color; + return _findColorData(new ColorPresentationsCollector({ range: range, color: { red, green, blue, alpha } }), colorProviderRegistry, model, CancellationToken.None, isDefaultColorDecoratorsEnabled); +}); diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerModel.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerModel.ts index 0bd8ff1c1..06a0c278e 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorPickerModel.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerModel.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IColorPresentation } from 'vs/editor/common/languages'; +import { Color } from '../../../../base/common/color.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IColorPresentation } from '../../../common/languages.js'; export class ColorPickerModel { diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParticipantUtils.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParticipantUtils.ts new file mode 100644 index 000000000..0975790a5 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParticipantUtils.ts @@ -0,0 +1,66 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { IActiveCodeEditor } from '../../../browser/editorBrowser.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { DocumentColorProvider, IColorInformation } from '../../../common/languages.js'; +import { ITextModel, TrackedRangeStickiness } from '../../../common/model.js'; +import { getColorPresentations } from './color.js'; +import { ColorPickerModel } from './colorPickerModel.js'; +import { Range } from '../../../common/core/range.js'; + +export interface BaseColor { + readonly range: Range; + readonly model: ColorPickerModel; + readonly provider: DocumentColorProvider; +} + +export async function createColorHover(editorModel: ITextModel, colorInfo: IColorInformation, provider: DocumentColorProvider): Promise { + const originalText = editorModel.getValueInRange(colorInfo.range); + const { red, green, blue, alpha } = colorInfo.color; + const rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha); + const color = new Color(rgba); + + const colorPresentations = await getColorPresentations(editorModel, colorInfo, provider, CancellationToken.None); + const model = new ColorPickerModel(color, [], 0); + model.colorPresentations = colorPresentations || []; + model.guessColorPresentation(color, originalText); + + return { + range: Range.lift(colorInfo.range), + model, + provider + }; +} + +export function updateEditorModel(editor: IActiveCodeEditor, range: Range, model: ColorPickerModel): Range { + const textEdits: ISingleEditOperation[] = []; + const edit = model.presentation.textEdit ?? { range, text: model.presentation.label, forceMoveMarkers: false }; + textEdits.push(edit); + + if (model.presentation.additionalTextEdits) { + textEdits.push(...model.presentation.additionalTextEdits); + } + const replaceRange = Range.lift(edit.range); + const trackedRange = editor.getModel()._setTrackedRange(null, replaceRange, TrackedRangeStickiness.GrowsOnlyWhenTypingAfter); + editor.executeEdits('colorpicker', textEdits); + editor.pushUndoStop(); + return editor.getModel()._getTrackedRange(trackedRange) ?? replaceRange; +} + +export async function updateColorPresentations(editorModel: ITextModel, colorPickerModel: ColorPickerModel, color: Color, range: Range, colorHover: BaseColor): Promise { + const colorPresentations = await getColorPresentations(editorModel, { + range: range, + color: { + red: color.rgba.r / 255, + green: color.rgba.g / 255, + blue: color.rgba.b / 255, + alpha: color.rgba.a + } + }, colorHover.provider, CancellationToken.None); + colorPickerModel.colorPresentations = colorPresentations || []; +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerBody.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerBody.ts new file mode 100644 index 000000000..aa8c54288 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerBody.ts @@ -0,0 +1,97 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import '../colorPicker.css'; +import * as dom from '../../../../../base/browser/dom.js'; +import { Color, HSVA } from '../../../../../base/common/color.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; +import { SaturationBox } from './colorPickerSaturationBox.js'; +import { InsertButton } from './colorPickerInsertButton.js'; +import { HueStrip, OpacityStrip, Strip } from './colorPickerStrip.js'; + +const $ = dom.$; + +export class ColorPickerBody extends Disposable { + + private readonly _domNode: HTMLElement; + private readonly _saturationBox: SaturationBox; + private readonly _hueStrip: Strip; + private readonly _opacityStrip: Strip; + private readonly _insertButton: InsertButton | null = null; + + constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number, isStandaloneColorPicker: boolean = false) { + super(); + + this._domNode = $('.colorpicker-body'); + dom.append(container, this._domNode); + + this._saturationBox = new SaturationBox(this._domNode, this.model, this.pixelRatio); + this._register(this._saturationBox); + this._register(this._saturationBox.onDidChange(this.onDidSaturationValueChange, this)); + this._register(this._saturationBox.onColorFlushed(this.flushColor, this)); + + this._opacityStrip = new OpacityStrip(this._domNode, this.model, isStandaloneColorPicker); + this._register(this._opacityStrip); + this._register(this._opacityStrip.onDidChange(this.onDidOpacityChange, this)); + this._register(this._opacityStrip.onColorFlushed(this.flushColor, this)); + + this._hueStrip = new HueStrip(this._domNode, this.model, isStandaloneColorPicker); + this._register(this._hueStrip); + this._register(this._hueStrip.onDidChange(this.onDidHueChange, this)); + this._register(this._hueStrip.onColorFlushed(this.flushColor, this)); + + if (isStandaloneColorPicker) { + this._insertButton = this._register(new InsertButton(this._domNode)); + this._domNode.classList.add('standalone-colorpicker'); + } + } + + private flushColor(): void { + this.model.flushColor(); + } + + private onDidSaturationValueChange({ s, v }: { s: number; v: number }): void { + const hsva = this.model.color.hsva; + this.model.color = new Color(new HSVA(hsva.h, s, v, hsva.a)); + } + + private onDidOpacityChange(a: number): void { + const hsva = this.model.color.hsva; + this.model.color = new Color(new HSVA(hsva.h, hsva.s, hsva.v, a)); + } + + private onDidHueChange(value: number): void { + const hsva = this.model.color.hsva; + const h = (1 - value) * 360; + + this.model.color = new Color(new HSVA(h === 360 ? 0 : h, hsva.s, hsva.v, hsva.a)); + } + + get domNode() { + return this._domNode; + } + + get saturationBox() { + return this._saturationBox; + } + + get opacityStrip() { + return this._opacityStrip; + } + + get hueStrip() { + return this._hueStrip; + } + + get enterButton() { + return this._insertButton; + } + + layout(): void { + this._saturationBox.layout(); + this._opacityStrip.layout(); + this._hueStrip.layout(); + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.ts new file mode 100644 index 000000000..4b8bc2b45 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.ts @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import '../colorPicker.css'; +import * as dom from '../../../../../base/browser/dom.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { localize } from '../../../../../nls.js'; +import { Emitter } from '../../../../../base/common/event.js'; +import { registerIcon } from '../../../../../platform/theme/common/iconRegistry.js'; +import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; + +const $ = dom.$; + +export class CloseButton extends Disposable { + + private _button: HTMLElement; + private readonly _onClicked = this._register(new Emitter()); + public readonly onClicked = this._onClicked.event; + + constructor(container: HTMLElement) { + super(); + this._button = document.createElement('div'); + this._button.classList.add('close-button'); + dom.append(container, this._button); + + const innerDiv = document.createElement('div'); + innerDiv.classList.add('close-button-inner-div'); + dom.append(this._button, innerDiv); + + const closeButton = dom.append(innerDiv, $('.button' + ThemeIcon.asCSSSelector(registerIcon('color-picker-close', Codicon.close, localize('closeIcon', 'Icon to close the color picker'))))); + closeButton.classList.add('close-icon'); + this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { + this._onClicked.fire(); + })); + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.ts new file mode 100644 index 000000000..92cd6c65e --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.ts @@ -0,0 +1,93 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import '../colorPicker.css'; +import * as dom from '../../../../../base/browser/dom.js'; +import { Color } from '../../../../../base/common/color.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; +import { localize } from '../../../../../nls.js'; +import { editorHoverBackground } from '../../../../../platform/theme/common/colorRegistry.js'; +import { IThemeService } from '../../../../../platform/theme/common/themeService.js'; +import { CloseButton } from './colorPickerCloseButton.js'; + +const $ = dom.$; + +export class ColorPickerHeader extends Disposable { + + private readonly _domNode: HTMLElement; + private readonly _pickedColorNode: HTMLElement; + private readonly _pickedColorPresentation: HTMLElement; + private readonly _originalColorNode: HTMLElement; + private readonly _closeButton: CloseButton | null = null; + private backgroundColor: Color; + + constructor(container: HTMLElement, private readonly model: ColorPickerModel, themeService: IThemeService, private showingStandaloneColorPicker: boolean = false) { + super(); + + this._domNode = $('.colorpicker-header'); + dom.append(container, this._domNode); + + this._pickedColorNode = dom.append(this._domNode, $('.picked-color')); + dom.append(this._pickedColorNode, $('span.codicon.codicon-color-mode')); + this._pickedColorPresentation = dom.append(this._pickedColorNode, document.createElement('span')); + this._pickedColorPresentation.classList.add('picked-color-presentation'); + + const tooltip = localize('clickToToggleColorOptions', "Click to toggle color options (rgb/hsl/hex)"); + this._pickedColorNode.setAttribute('title', tooltip); + + this._originalColorNode = dom.append(this._domNode, $('.original-color')); + this._originalColorNode.style.backgroundColor = Color.Format.CSS.format(this.model.originalColor) || ''; + + this.backgroundColor = themeService.getColorTheme().getColor(editorHoverBackground) || Color.white; + this._register(themeService.onDidColorThemeChange(theme => { + this.backgroundColor = theme.getColor(editorHoverBackground) || Color.white; + })); + + this._register(dom.addDisposableListener(this._pickedColorNode, dom.EventType.CLICK, () => this.model.selectNextColorPresentation())); + this._register(dom.addDisposableListener(this._originalColorNode, dom.EventType.CLICK, () => { + this.model.color = this.model.originalColor; + this.model.flushColor(); + })); + this._register(model.onDidChangeColor(this.onDidChangeColor, this)); + this._register(model.onDidChangePresentation(this.onDidChangePresentation, this)); + this._pickedColorNode.style.backgroundColor = Color.Format.CSS.format(model.color) || ''; + this._pickedColorNode.classList.toggle('light', model.color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : model.color.isLighter()); + + this.onDidChangeColor(this.model.color); + + // When the color picker widget is a standalone color picker widget, then add a close button + if (this.showingStandaloneColorPicker) { + this._domNode.classList.add('standalone-colorpicker'); + this._closeButton = this._register(new CloseButton(this._domNode)); + } + } + + public get domNode(): HTMLElement { + return this._domNode; + } + + public get closeButton(): CloseButton | null { + return this._closeButton; + } + + public get pickedColorNode(): HTMLElement { + return this._pickedColorNode; + } + + public get originalColorNode(): HTMLElement { + return this._originalColorNode; + } + + private onDidChangeColor(color: Color): void { + this._pickedColorNode.style.backgroundColor = Color.Format.CSS.format(color) || ''; + this._pickedColorNode.classList.toggle('light', color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : color.isLighter()); + this.onDidChangePresentation(); + } + + private onDidChangePresentation(): void { + this._pickedColorPresentation.textContent = this.model.presentation ? this.model.presentation.label : ''; + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerInsertButton.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerInsertButton.ts new file mode 100644 index 000000000..83c7ec84f --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerInsertButton.ts @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import '../colorPicker.css'; +import * as dom from '../../../../../base/browser/dom.js'; +import { Emitter } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; + +export class InsertButton extends Disposable { + + private _button: HTMLElement; + private readonly _onClicked = this._register(new Emitter()); + public readonly onClicked = this._onClicked.event; + + constructor(container: HTMLElement) { + super(); + this._button = dom.append(container, document.createElement('button')); + this._button.classList.add('insert-button'); + this._button.textContent = 'Insert'; + this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { + this._onClicked.fire(); + })); + } + + public get button(): HTMLElement { + return this._button; + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts new file mode 100644 index 000000000..feb659290 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts @@ -0,0 +1,138 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import '../colorPicker.css'; +import * as dom from '../../../../../base/browser/dom.js'; +import { GlobalPointerMoveMonitor } from '../../../../../base/browser/globalPointerMoveMonitor.js'; +import { Color, HSVA } from '../../../../../base/common/color.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; + +const $ = dom.$; + +export class SaturationBox extends Disposable { + + private readonly _domNode: HTMLElement; + private readonly selection: HTMLElement; + private readonly _canvas: HTMLCanvasElement; + private width!: number; + private height!: number; + + private monitor: GlobalPointerMoveMonitor | null; + private readonly _onDidChange = new Emitter<{ s: number; v: number }>(); + readonly onDidChange: Event<{ s: number; v: number }> = this._onDidChange.event; + + private readonly _onColorFlushed = new Emitter(); + readonly onColorFlushed: Event = this._onColorFlushed.event; + + constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number) { + super(); + + this._domNode = $('.saturation-wrap'); + dom.append(container, this._domNode); + + // Create canvas, draw selected color + this._canvas = document.createElement('canvas'); + this._canvas.className = 'saturation-box'; + dom.append(this._domNode, this._canvas); + + // Add selection circle + this.selection = $('.saturation-selection'); + dom.append(this._domNode, this.selection); + + this.layout(); + + this._register(dom.addDisposableListener(this._domNode, dom.EventType.POINTER_DOWN, e => this.onPointerDown(e))); + this._register(this.model.onDidChangeColor(this.onDidChangeColor, this)); + this.monitor = null; + } + + public get domNode() { + return this._domNode; + } + + public get canvas() { + return this._canvas; + } + + private onPointerDown(e: PointerEvent): void { + if (!e.target || !(e.target instanceof Element)) { + return; + } + this.monitor = this._register(new GlobalPointerMoveMonitor()); + const origin = dom.getDomNodePagePosition(this._domNode); + + if (e.target !== this.selection) { + this.onDidChangePosition(e.offsetX, e.offsetY); + } + + this.monitor.startMonitoring(e.target, e.pointerId, e.buttons, event => this.onDidChangePosition(event.pageX - origin.left, event.pageY - origin.top), () => null); + + const pointerUpListener = dom.addDisposableListener(e.target.ownerDocument, dom.EventType.POINTER_UP, () => { + this._onColorFlushed.fire(); + pointerUpListener.dispose(); + if (this.monitor) { + this.monitor.stopMonitoring(true); + this.monitor = null; + } + }, true); + } + + private onDidChangePosition(left: number, top: number): void { + const s = Math.max(0, Math.min(1, left / this.width)); + const v = Math.max(0, Math.min(1, 1 - (top / this.height))); + + this.paintSelection(s, v); + this._onDidChange.fire({ s, v }); + } + + layout(): void { + this.width = this._domNode.offsetWidth; + this.height = this._domNode.offsetHeight; + this._canvas.width = this.width * this.pixelRatio; + this._canvas.height = this.height * this.pixelRatio; + this.paint(); + + const hsva = this.model.color.hsva; + this.paintSelection(hsva.s, hsva.v); + } + + private paint(): void { + const hsva = this.model.color.hsva; + const saturatedColor = new Color(new HSVA(hsva.h, 1, 1, 1)); + const ctx = this._canvas.getContext('2d')!; + + const whiteGradient = ctx.createLinearGradient(0, 0, this._canvas.width, 0); + whiteGradient.addColorStop(0, 'rgba(255, 255, 255, 1)'); + whiteGradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.5)'); + whiteGradient.addColorStop(1, 'rgba(255, 255, 255, 0)'); + + const blackGradient = ctx.createLinearGradient(0, 0, 0, this._canvas.height); + blackGradient.addColorStop(0, 'rgba(0, 0, 0, 0)'); + blackGradient.addColorStop(1, 'rgba(0, 0, 0, 1)'); + + ctx.rect(0, 0, this._canvas.width, this._canvas.height); + ctx.fillStyle = Color.Format.CSS.format(saturatedColor)!; + ctx.fill(); + ctx.fillStyle = whiteGradient; + ctx.fill(); + ctx.fillStyle = blackGradient; + ctx.fill(); + } + + private paintSelection(s: number, v: number): void { + this.selection.style.left = `${s * this.width}px`; + this.selection.style.top = `${this.height - v * this.height}px`; + } + + private onDidChangeColor(color: Color): void { + if (this.monitor && this.monitor.isMonitoring()) { + return; + } + this.paint(); + const hsva = color.hsva; + this.paintSelection(hsva.s, hsva.v); + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerStrip.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerStrip.ts new file mode 100644 index 000000000..ff72ddf87 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerStrip.ts @@ -0,0 +1,126 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import '../colorPicker.css'; +import * as dom from '../../../../../base/browser/dom.js'; +import { GlobalPointerMoveMonitor } from '../../../../../base/browser/globalPointerMoveMonitor.js'; +import { Color, RGBA } from '../../../../../base/common/color.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; + +const $ = dom.$; + +export abstract class Strip extends Disposable { + + protected domNode: HTMLElement; + protected overlay: HTMLElement; + protected slider: HTMLElement; + private height!: number; + + private readonly _onDidChange = new Emitter(); + readonly onDidChange: Event = this._onDidChange.event; + + private readonly _onColorFlushed = new Emitter(); + readonly onColorFlushed: Event = this._onColorFlushed.event; + + constructor(container: HTMLElement, protected model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { + super(); + if (showingStandaloneColorPicker) { + this.domNode = dom.append(container, $('.standalone-strip')); + this.overlay = dom.append(this.domNode, $('.standalone-overlay')); + } else { + this.domNode = dom.append(container, $('.strip')); + this.overlay = dom.append(this.domNode, $('.overlay')); + } + this.slider = dom.append(this.domNode, $('.slider')); + this.slider.style.top = `0px`; + + this._register(dom.addDisposableListener(this.domNode, dom.EventType.POINTER_DOWN, e => this.onPointerDown(e))); + this._register(model.onDidChangeColor(this.onDidChangeColor, this)); + this.layout(); + } + + layout(): void { + this.height = this.domNode.offsetHeight - this.slider.offsetHeight; + + const value = this.getValue(this.model.color); + this.updateSliderPosition(value); + } + + protected onDidChangeColor(color: Color) { + const value = this.getValue(color); + this.updateSliderPosition(value); + } + + private onPointerDown(e: PointerEvent): void { + if (!e.target || !(e.target instanceof Element)) { + return; + } + const monitor = this._register(new GlobalPointerMoveMonitor()); + const origin = dom.getDomNodePagePosition(this.domNode); + this.domNode.classList.add('grabbing'); + + if (e.target !== this.slider) { + this.onDidChangeTop(e.offsetY); + } + + monitor.startMonitoring(e.target, e.pointerId, e.buttons, event => this.onDidChangeTop(event.pageY - origin.top), () => null); + + const pointerUpListener = dom.addDisposableListener(e.target.ownerDocument, dom.EventType.POINTER_UP, () => { + this._onColorFlushed.fire(); + pointerUpListener.dispose(); + monitor.stopMonitoring(true); + this.domNode.classList.remove('grabbing'); + }, true); + } + + private onDidChangeTop(top: number): void { + const value = Math.max(0, Math.min(1, 1 - (top / this.height))); + + this.updateSliderPosition(value); + this._onDidChange.fire(value); + } + + private updateSliderPosition(value: number): void { + this.slider.style.top = `${(1 - value) * this.height}px`; + } + + protected abstract getValue(color: Color): number; +} + +export class OpacityStrip extends Strip { + + constructor(container: HTMLElement, model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { + super(container, model, showingStandaloneColorPicker); + this.domNode.classList.add('opacity-strip'); + + this.onDidChangeColor(this.model.color); + } + + protected override onDidChangeColor(color: Color): void { + super.onDidChangeColor(color); + const { r, g, b } = color.rgba; + const opaque = new Color(new RGBA(r, g, b, 1)); + const transparent = new Color(new RGBA(r, g, b, 0)); + + this.overlay.style.background = `linear-gradient(to bottom, ${opaque} 0%, ${transparent} 100%)`; + } + + protected getValue(color: Color): number { + return color.hsva.a; + } +} + +export class HueStrip extends Strip { + + constructor(container: HTMLElement, model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { + super(container, model, showingStandaloneColorPicker); + this.domNode.classList.add('hue-strip'); + } + + protected getValue(color: Color): number { + return 1 - (color.hsva.h / 360); + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts deleted file mode 100644 index b911fe5b0..000000000 --- a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts +++ /dev/null @@ -1,499 +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 { PixelRatio } from 'vs/base/browser/pixelRatio'; -import * as dom from 'vs/base/browser/dom'; -import { GlobalPointerMoveMonitor } from 'vs/base/browser/globalPointerMoveMonitor'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { Codicon } from 'vs/base/common/codicons'; -import { Color, HSVA, RGBA } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./colorPicker'; -import { ColorPickerModel } from 'vs/editor/contrib/colorPicker/browser/colorPickerModel'; -import { IEditorHoverColorPickerWidget } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { localize } from 'vs/nls'; -import { editorHoverBackground } from 'vs/platform/theme/common/colorRegistry'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; - -const $ = dom.$; - -export class ColorPickerHeader extends Disposable { - - private readonly _domNode: HTMLElement; - private readonly _pickedColorNode: HTMLElement; - private readonly _pickedColorPresentation: HTMLElement; - private readonly _originalColorNode: HTMLElement; - private readonly _closeButton: CloseButton | null = null; - private backgroundColor: Color; - - constructor(container: HTMLElement, private readonly model: ColorPickerModel, themeService: IThemeService, private showingStandaloneColorPicker: boolean = false) { - super(); - - this._domNode = $('.colorpicker-header'); - dom.append(container, this._domNode); - - this._pickedColorNode = dom.append(this._domNode, $('.picked-color')); - dom.append(this._pickedColorNode, $('span.codicon.codicon-color-mode')); - this._pickedColorPresentation = dom.append(this._pickedColorNode, document.createElement('span')); - this._pickedColorPresentation.classList.add('picked-color-presentation'); - - const tooltip = localize('clickToToggleColorOptions', "Click to toggle color options (rgb/hsl/hex)"); - this._pickedColorNode.setAttribute('title', tooltip); - - this._originalColorNode = dom.append(this._domNode, $('.original-color')); - this._originalColorNode.style.backgroundColor = Color.Format.CSS.format(this.model.originalColor) || ''; - - this.backgroundColor = themeService.getColorTheme().getColor(editorHoverBackground) || Color.white; - this._register(themeService.onDidColorThemeChange(theme => { - this.backgroundColor = theme.getColor(editorHoverBackground) || Color.white; - })); - - this._register(dom.addDisposableListener(this._pickedColorNode, dom.EventType.CLICK, () => this.model.selectNextColorPresentation())); - this._register(dom.addDisposableListener(this._originalColorNode, dom.EventType.CLICK, () => { - this.model.color = this.model.originalColor; - this.model.flushColor(); - })); - this._register(model.onDidChangeColor(this.onDidChangeColor, this)); - this._register(model.onDidChangePresentation(this.onDidChangePresentation, this)); - this._pickedColorNode.style.backgroundColor = Color.Format.CSS.format(model.color) || ''; - this._pickedColorNode.classList.toggle('light', model.color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : model.color.isLighter()); - - this.onDidChangeColor(this.model.color); - - // When the color picker widget is a standalone color picker widget, then add a close button - if (this.showingStandaloneColorPicker) { - this._domNode.classList.add('standalone-colorpicker'); - this._closeButton = this._register(new CloseButton(this._domNode)); - } - } - - public get domNode(): HTMLElement { - return this._domNode; - } - - public get closeButton(): CloseButton | null { - return this._closeButton; - } - - public get pickedColorNode(): HTMLElement { - return this._pickedColorNode; - } - - public get originalColorNode(): HTMLElement { - return this._originalColorNode; - } - - private onDidChangeColor(color: Color): void { - this._pickedColorNode.style.backgroundColor = Color.Format.CSS.format(color) || ''; - this._pickedColorNode.classList.toggle('light', color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : color.isLighter()); - this.onDidChangePresentation(); - } - - private onDidChangePresentation(): void { - this._pickedColorPresentation.textContent = this.model.presentation ? this.model.presentation.label : ''; - } -} - -class CloseButton extends Disposable { - - private _button: HTMLElement; - private readonly _onClicked = this._register(new Emitter()); - public readonly onClicked = this._onClicked.event; - - constructor(container: HTMLElement) { - super(); - this._button = document.createElement('div'); - this._button.classList.add('close-button'); - dom.append(container, this._button); - - const innerDiv = document.createElement('div'); - innerDiv.classList.add('close-button-inner-div'); - dom.append(this._button, innerDiv); - - const closeButton = dom.append(innerDiv, $('.button' + ThemeIcon.asCSSSelector(registerIcon('color-picker-close', Codicon.close, localize('closeIcon', 'Icon to close the color picker'))))); - closeButton.classList.add('close-icon'); - this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { - this._onClicked.fire(); - })); - } -} - -export class ColorPickerBody extends Disposable { - - private readonly _domNode: HTMLElement; - private readonly _saturationBox: SaturationBox; - private readonly _hueStrip: Strip; - private readonly _opacityStrip: Strip; - private readonly _insertButton: InsertButton | null = null; - - constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number, isStandaloneColorPicker: boolean = false) { - super(); - - this._domNode = $('.colorpicker-body'); - dom.append(container, this._domNode); - - this._saturationBox = new SaturationBox(this._domNode, this.model, this.pixelRatio); - this._register(this._saturationBox); - this._register(this._saturationBox.onDidChange(this.onDidSaturationValueChange, this)); - this._register(this._saturationBox.onColorFlushed(this.flushColor, this)); - - this._opacityStrip = new OpacityStrip(this._domNode, this.model, isStandaloneColorPicker); - this._register(this._opacityStrip); - this._register(this._opacityStrip.onDidChange(this.onDidOpacityChange, this)); - this._register(this._opacityStrip.onColorFlushed(this.flushColor, this)); - - this._hueStrip = new HueStrip(this._domNode, this.model, isStandaloneColorPicker); - this._register(this._hueStrip); - this._register(this._hueStrip.onDidChange(this.onDidHueChange, this)); - this._register(this._hueStrip.onColorFlushed(this.flushColor, this)); - - if (isStandaloneColorPicker) { - this._insertButton = this._register(new InsertButton(this._domNode)); - this._domNode.classList.add('standalone-colorpicker'); - } - } - - private flushColor(): void { - this.model.flushColor(); - } - - private onDidSaturationValueChange({ s, v }: { s: number; v: number }): void { - const hsva = this.model.color.hsva; - this.model.color = new Color(new HSVA(hsva.h, s, v, hsva.a)); - } - - private onDidOpacityChange(a: number): void { - const hsva = this.model.color.hsva; - this.model.color = new Color(new HSVA(hsva.h, hsva.s, hsva.v, a)); - } - - private onDidHueChange(value: number): void { - const hsva = this.model.color.hsva; - const h = (1 - value) * 360; - - this.model.color = new Color(new HSVA(h === 360 ? 0 : h, hsva.s, hsva.v, hsva.a)); - } - - get domNode() { - return this._domNode; - } - - get saturationBox() { - return this._saturationBox; - } - - get opacityStrip() { - return this._opacityStrip; - } - - get hueStrip() { - return this._hueStrip; - } - - get enterButton() { - return this._insertButton; - } - - layout(): void { - this._saturationBox.layout(); - this._opacityStrip.layout(); - this._hueStrip.layout(); - } -} - -class SaturationBox extends Disposable { - - private readonly _domNode: HTMLElement; - private readonly selection: HTMLElement; - private readonly _canvas: HTMLCanvasElement; - private width!: number; - private height!: number; - - private monitor: GlobalPointerMoveMonitor | null; - private readonly _onDidChange = new Emitter<{ s: number; v: number }>(); - readonly onDidChange: Event<{ s: number; v: number }> = this._onDidChange.event; - - private readonly _onColorFlushed = new Emitter(); - readonly onColorFlushed: Event = this._onColorFlushed.event; - - constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number) { - super(); - - this._domNode = $('.saturation-wrap'); - dom.append(container, this._domNode); - - // Create canvas, draw selected color - this._canvas = document.createElement('canvas'); - this._canvas.className = 'saturation-box'; - dom.append(this._domNode, this._canvas); - - // Add selection circle - this.selection = $('.saturation-selection'); - dom.append(this._domNode, this.selection); - - this.layout(); - - this._register(dom.addDisposableListener(this._domNode, dom.EventType.POINTER_DOWN, e => this.onPointerDown(e))); - this._register(this.model.onDidChangeColor(this.onDidChangeColor, this)); - this.monitor = null; - } - - public get domNode() { - return this._domNode; - } - - public get canvas() { - return this._canvas; - } - - private onPointerDown(e: PointerEvent): void { - if (!e.target || !(e.target instanceof Element)) { - return; - } - this.monitor = this._register(new GlobalPointerMoveMonitor()); - const origin = dom.getDomNodePagePosition(this._domNode); - - if (e.target !== this.selection) { - this.onDidChangePosition(e.offsetX, e.offsetY); - } - - this.monitor.startMonitoring(e.target, e.pointerId, e.buttons, event => this.onDidChangePosition(event.pageX - origin.left, event.pageY - origin.top), () => null); - - const pointerUpListener = dom.addDisposableListener(e.target.ownerDocument, dom.EventType.POINTER_UP, () => { - this._onColorFlushed.fire(); - pointerUpListener.dispose(); - if (this.monitor) { - this.monitor.stopMonitoring(true); - this.monitor = null; - } - }, true); - } - - private onDidChangePosition(left: number, top: number): void { - const s = Math.max(0, Math.min(1, left / this.width)); - const v = Math.max(0, Math.min(1, 1 - (top / this.height))); - - this.paintSelection(s, v); - this._onDidChange.fire({ s, v }); - } - - layout(): void { - this.width = this._domNode.offsetWidth; - this.height = this._domNode.offsetHeight; - this._canvas.width = this.width * this.pixelRatio; - this._canvas.height = this.height * this.pixelRatio; - this.paint(); - - const hsva = this.model.color.hsva; - this.paintSelection(hsva.s, hsva.v); - } - - private paint(): void { - const hsva = this.model.color.hsva; - const saturatedColor = new Color(new HSVA(hsva.h, 1, 1, 1)); - const ctx = this._canvas.getContext('2d')!; - - const whiteGradient = ctx.createLinearGradient(0, 0, this._canvas.width, 0); - whiteGradient.addColorStop(0, 'rgba(255, 255, 255, 1)'); - whiteGradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.5)'); - whiteGradient.addColorStop(1, 'rgba(255, 255, 255, 0)'); - - const blackGradient = ctx.createLinearGradient(0, 0, 0, this._canvas.height); - blackGradient.addColorStop(0, 'rgba(0, 0, 0, 0)'); - blackGradient.addColorStop(1, 'rgba(0, 0, 0, 1)'); - - ctx.rect(0, 0, this._canvas.width, this._canvas.height); - ctx.fillStyle = Color.Format.CSS.format(saturatedColor)!; - ctx.fill(); - ctx.fillStyle = whiteGradient; - ctx.fill(); - ctx.fillStyle = blackGradient; - ctx.fill(); - } - - private paintSelection(s: number, v: number): void { - this.selection.style.left = `${s * this.width}px`; - this.selection.style.top = `${this.height - v * this.height}px`; - } - - private onDidChangeColor(color: Color): void { - if (this.monitor && this.monitor.isMonitoring()) { - return; - } - this.paint(); - const hsva = color.hsva; - this.paintSelection(hsva.s, hsva.v); - } -} - -abstract class Strip extends Disposable { - - protected domNode: HTMLElement; - protected overlay: HTMLElement; - protected slider: HTMLElement; - private height!: number; - - private readonly _onDidChange = new Emitter(); - readonly onDidChange: Event = this._onDidChange.event; - - private readonly _onColorFlushed = new Emitter(); - readonly onColorFlushed: Event = this._onColorFlushed.event; - - constructor(container: HTMLElement, protected model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { - super(); - if (showingStandaloneColorPicker) { - this.domNode = dom.append(container, $('.standalone-strip')); - this.overlay = dom.append(this.domNode, $('.standalone-overlay')); - } else { - this.domNode = dom.append(container, $('.strip')); - this.overlay = dom.append(this.domNode, $('.overlay')); - } - this.slider = dom.append(this.domNode, $('.slider')); - this.slider.style.top = `0px`; - - this._register(dom.addDisposableListener(this.domNode, dom.EventType.POINTER_DOWN, e => this.onPointerDown(e))); - this._register(model.onDidChangeColor(this.onDidChangeColor, this)); - this.layout(); - } - - layout(): void { - this.height = this.domNode.offsetHeight - this.slider.offsetHeight; - - const value = this.getValue(this.model.color); - this.updateSliderPosition(value); - } - - protected onDidChangeColor(color: Color) { - const value = this.getValue(color); - this.updateSliderPosition(value); - } - - private onPointerDown(e: PointerEvent): void { - if (!e.target || !(e.target instanceof Element)) { - return; - } - const monitor = this._register(new GlobalPointerMoveMonitor()); - const origin = dom.getDomNodePagePosition(this.domNode); - this.domNode.classList.add('grabbing'); - - if (e.target !== this.slider) { - this.onDidChangeTop(e.offsetY); - } - - monitor.startMonitoring(e.target, e.pointerId, e.buttons, event => this.onDidChangeTop(event.pageY - origin.top), () => null); - - const pointerUpListener = dom.addDisposableListener(e.target.ownerDocument, dom.EventType.POINTER_UP, () => { - this._onColorFlushed.fire(); - pointerUpListener.dispose(); - monitor.stopMonitoring(true); - this.domNode.classList.remove('grabbing'); - }, true); - } - - private onDidChangeTop(top: number): void { - const value = Math.max(0, Math.min(1, 1 - (top / this.height))); - - this.updateSliderPosition(value); - this._onDidChange.fire(value); - } - - private updateSliderPosition(value: number): void { - this.slider.style.top = `${(1 - value) * this.height}px`; - } - - protected abstract getValue(color: Color): number; -} - -class OpacityStrip extends Strip { - - constructor(container: HTMLElement, model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { - super(container, model, showingStandaloneColorPicker); - this.domNode.classList.add('opacity-strip'); - - this.onDidChangeColor(this.model.color); - } - - protected override onDidChangeColor(color: Color): void { - super.onDidChangeColor(color); - const { r, g, b } = color.rgba; - const opaque = new Color(new RGBA(r, g, b, 1)); - const transparent = new Color(new RGBA(r, g, b, 0)); - - this.overlay.style.background = `linear-gradient(to bottom, ${opaque} 0%, ${transparent} 100%)`; - } - - protected getValue(color: Color): number { - return color.hsva.a; - } -} - -class HueStrip extends Strip { - - constructor(container: HTMLElement, model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { - super(container, model, showingStandaloneColorPicker); - this.domNode.classList.add('hue-strip'); - } - - protected getValue(color: Color): number { - return 1 - (color.hsva.h / 360); - } -} - -export class InsertButton extends Disposable { - - private _button: HTMLElement; - private readonly _onClicked = this._register(new Emitter()); - public readonly onClicked = this._onClicked.event; - - constructor(container: HTMLElement) { - super(); - this._button = dom.append(container, document.createElement('button')); - this._button.classList.add('insert-button'); - this._button.textContent = 'Insert'; - this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { - this._onClicked.fire(); - })); - } - - public get button(): HTMLElement { - return this._button; - } -} - -export class ColorPickerWidget extends Widget implements IEditorHoverColorPickerWidget { - - private static readonly ID = 'editor.contrib.colorPickerWidget'; - private readonly _domNode: HTMLElement; - - body: ColorPickerBody; - header: ColorPickerHeader; - - constructor(container: Node, readonly model: ColorPickerModel, private pixelRatio: number, themeService: IThemeService, standaloneColorPicker: boolean = false) { - super(); - - this._register(PixelRatio.getInstance(dom.getWindow(container)).onDidChange(() => this.layout())); - - this._domNode = $('.colorpicker-widget'); - container.appendChild(this._domNode); - - this.header = this._register(new ColorPickerHeader(this._domNode, this.model, themeService, standaloneColorPicker)); - this.body = this._register(new ColorPickerBody(this._domNode, this.model, this.pixelRatio, standaloneColorPicker)); - } - - getId(): string { - return ColorPickerWidget.ID; - } - - layout(): void { - this.body.layout(); - } - - get domNode(): HTMLElement { - return this._domNode; - } -} diff --git a/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts b/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts index 3bd7b8485..63a231f23 100644 --- a/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts +++ b/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts @@ -3,14 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Color, RGBA } from 'vs/base/common/color'; -import { ITextModel } from 'vs/editor/common/model'; -import { DocumentColorProvider, IColor, IColorInformation, IColorPresentation } from 'vs/editor/common/languages'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { ITextModel } from '../../../common/model.js'; +import { DocumentColorProvider, IColor, IColorInformation, IColorPresentation } from '../../../common/languages.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; export class DefaultDocumentColorProvider implements DocumentColorProvider { @@ -40,7 +39,7 @@ export class DefaultDocumentColorProvider implements DocumentColorProvider { } } -class DefaultDocumentColorProviderFeature extends Disposable { +export class DefaultDocumentColorProviderFeature extends Disposable { constructor( @ILanguageFeaturesService _languageFeaturesService: ILanguageFeaturesService, @IEditorWorkerService editorWorkerService: IEditorWorkerService, @@ -50,4 +49,3 @@ class DefaultDocumentColorProviderFeature extends Disposable { } } -registerEditorFeature(DefaultDocumentColorProviderFeature); diff --git a/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerContribution.ts similarity index 60% rename from src/vs/editor/contrib/colorPicker/browser/colorContributions.ts rename to src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerContribution.ts index af1162deb..46f7660dd 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts +++ b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerContribution.ts @@ -3,19 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { ColorDecorationInjectedTextMarker } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; -import { ColorHoverParticipant } from 'vs/editor/contrib/colorPicker/browser/colorHoverParticipant'; -import { ContentHoverController } from 'vs/editor/contrib/hover/browser/contentHoverController2'; -import { HoverStartMode, HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Range } from '../../../../common/core/range.js'; +import { IEditorContribution } from '../../../../common/editorCommon.js'; +import { ColorDecorationInjectedTextMarker } from '../colorDetector.js'; +import { ContentHoverController } from '../../../hover/browser/contentHoverController.js'; +import { HoverStartMode, HoverStartSource } from '../../../hover/browser/hoverOperation.js'; -export class ColorContribution extends Disposable implements IEditorContribution { +export class HoverColorPickerContribution extends Disposable implements IEditorContribution { public static readonly ID: string = 'editor.contrib.colorContribution'; @@ -66,6 +63,3 @@ export class ColorContribution extends Disposable implements IEditorContribution } } } - -registerEditorContribution(ColorContribution.ID, ColorContribution, EditorContributionInstantiation.BeforeFirstInteraction); -HoverParticipantRegistry.register(ColorHoverParticipant); diff --git a/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts new file mode 100644 index 000000000..7c7d4afeb --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts @@ -0,0 +1,148 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { AsyncIterableObject } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { Range } from '../../../../common/core/range.js'; +import { IModelDecoration } from '../../../../common/model.js'; +import { DocumentColorProvider } from '../../../../common/languages.js'; +import { ColorDetector } from '../colorDetector.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; +import { ColorPickerWidget } from './hoverColorPickerWidget.js'; +import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from '../../../hover/browser/hoverTypes.js'; +import { IThemeService } from '../../../../../platform/theme/common/themeService.js'; +import * as nls from '../../../../../nls.js'; +import { BaseColor, createColorHover, updateColorPresentations, updateEditorModel } from '../colorPickerParticipantUtils.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Dimension } from '../../../../../base/browser/dom.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { Color } from '../../../../../base/common/color.js'; + +export class ColorHover implements IHoverPart, BaseColor { + + /** + * Force the hover to always be rendered at this specific range, + * even in the case of multiple hover parts. + */ + public readonly forceShowAtRange: boolean = true; + + constructor( + public readonly owner: IEditorHoverParticipant, + public readonly range: Range, + public readonly model: ColorPickerModel, + public readonly provider: DocumentColorProvider + ) { } + + public isValidForHoverAnchor(anchor: HoverAnchor): boolean { + return ( + anchor.type === HoverAnchorType.Range + && this.range.startColumn <= anchor.range.startColumn + && this.range.endColumn >= anchor.range.endColumn + ); + } + + public static fromBaseColor(owner: IEditorHoverParticipant, color: BaseColor): ColorHover { + return new ColorHover(owner, color.range, color.model, color.provider); + } +} + +export class HoverColorPickerParticipant implements IEditorHoverParticipant { + + public readonly hoverOrdinal: number = 2; + + private _colorPicker: ColorPickerWidget | undefined; + + constructor( + private readonly _editor: ICodeEditor, + @IThemeService private readonly _themeService: IThemeService, + ) { } + + public computeSync(_anchor: HoverAnchor, _lineDecorations: IModelDecoration[]): ColorHover[] { + return []; + } + + public computeAsync(anchor: HoverAnchor, lineDecorations: IModelDecoration[], token: CancellationToken): AsyncIterableObject { + return AsyncIterableObject.fromPromise(this._computeAsync(anchor, lineDecorations, token)); + } + + private async _computeAsync(_anchor: HoverAnchor, lineDecorations: IModelDecoration[], _token: CancellationToken): Promise { + if (!this._editor.hasModel()) { + return []; + } + const colorDetector = ColorDetector.get(this._editor); + if (!colorDetector) { + return []; + } + for (const d of lineDecorations) { + if (!colorDetector.isColorDecoration(d)) { + continue; + } + + const colorData = colorDetector.getColorData(d.range.getStartPosition()); + if (colorData) { + const colorHover = ColorHover.fromBaseColor(this, await createColorHover(this._editor.getModel(), colorData.colorInfo, colorData.provider)); + return [colorHover]; + } + + } + return []; + } + + public renderHoverParts(context: IEditorHoverRenderContext, hoverParts: ColorHover[]): IRenderedHoverParts { + const editor = this._editor; + if (hoverParts.length === 0 || !editor.hasModel()) { + return new RenderedHoverParts([]); + } + if (context.setMinimumDimensions) { + const minimumHeight = editor.getOption(EditorOption.lineHeight) + 8; + context.setMinimumDimensions(new Dimension(302, minimumHeight)); + } + + const disposables = new DisposableStore(); + const colorHover = hoverParts[0]; + const editorModel = editor.getModel(); + const model = colorHover.model; + this._colorPicker = disposables.add(new ColorPickerWidget(context.fragment, model, editor.getOption(EditorOption.pixelRatio), this._themeService, false)); + + let editorUpdatedByColorPicker = false; + let range = new Range(colorHover.range.startLineNumber, colorHover.range.startColumn, colorHover.range.endLineNumber, colorHover.range.endColumn); + + disposables.add(model.onColorFlushed(async (color: Color) => { + await updateColorPresentations(editorModel, model, color, range, colorHover); + editorUpdatedByColorPicker = true; + range = updateEditorModel(editor, range, model); + })); + disposables.add(model.onDidChangeColor((color: Color) => { + updateColorPresentations(editorModel, model, color, range, colorHover); + })); + disposables.add(editor.onDidChangeModelContent((e) => { + if (editorUpdatedByColorPicker) { + editorUpdatedByColorPicker = false; + } else { + context.hide(); + editor.focus(); + } + })); + const renderedHoverPart: IRenderedHoverPart = { + hoverPart: ColorHover.fromBaseColor(this, colorHover), + hoverElement: this._colorPicker.domNode, + dispose() { disposables.dispose(); } + }; + return new RenderedHoverParts([renderedHoverPart]); + } + + public getAccessibleContent(hoverPart: ColorHover): string { + return nls.localize('hoverAccessibilityColorParticipant', 'There is a color picker here.'); + } + + public handleResize(): void { + this._colorPicker?.layout(); + } + + public isColorPickerVisible(): boolean { + return !!this._colorPicker; + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerWidget.ts new file mode 100644 index 000000000..9ba946953 --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerWidget.ts @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import '../colorPicker.css'; +import { PixelRatio } from '../../../../../base/browser/pixelRatio.js'; +import * as dom from '../../../../../base/browser/dom.js'; +import { Widget } from '../../../../../base/browser/ui/widget.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; +import { IEditorHoverColorPickerWidget } from '../../../hover/browser/hoverTypes.js'; +import { IThemeService } from '../../../../../platform/theme/common/themeService.js'; +import { ColorPickerBody } from '../colorPickerParts/colorPickerBody.js'; +import { ColorPickerHeader } from '../colorPickerParts/colorPickerHeader.js'; + +const $ = dom.$; + +export class ColorPickerWidget extends Widget implements IEditorHoverColorPickerWidget { + + private static readonly ID = 'editor.contrib.colorPickerWidget'; + private readonly _domNode: HTMLElement; + + body: ColorPickerBody; + header: ColorPickerHeader; + + constructor(container: Node, readonly model: ColorPickerModel, private pixelRatio: number, themeService: IThemeService, standaloneColorPicker: boolean = false) { + super(); + + this._register(PixelRatio.getInstance(dom.getWindow(container)).onDidChange(() => this.layout())); + + this._domNode = $('.colorpicker-widget'); + container.appendChild(this._domNode); + + this.header = this._register(new ColorPickerHeader(this._domNode, this.model, themeService, standaloneColorPicker)); + this.body = this._register(new ColorPickerBody(this._domNode, this.model, this.pixelRatio, standaloneColorPicker)); + } + + getId(): string { + return ColorPickerWidget.ID; + } + + layout(): void { + this.body.layout(); + } + + get domNode(): HTMLElement { + return this._domNode; + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions.ts b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.ts similarity index 74% rename from src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions.ts rename to src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.ts index 9d5315520..6ac80b945 100644 --- a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions.ts +++ b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.ts @@ -3,15 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorAction2, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { localize, localize2 } from 'vs/nls'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { StandaloneColorPickerController } from 'vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; -import 'vs/css!./colorPicker'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorAction, EditorAction2, ServicesAccessor } from '../../../../browser/editorExtensions.js'; +import { KeyCode } from '../../../../../base/common/keyCodes.js'; +import { localize, localize2 } from '../../../../../nls.js'; +import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { EditorContextKeys } from '../../../../common/editorContextKeys.js'; +import { MenuId } from '../../../../../platform/actions/common/actions.js'; +import { StandaloneColorPickerController } from './standaloneColorPickerController.js'; export class ShowOrFocusStandaloneColorPicker extends EditorAction2 { constructor() { @@ -35,7 +34,7 @@ export class ShowOrFocusStandaloneColorPicker extends EditorAction2 { } } -class HideStandaloneColorPicker extends EditorAction { +export class HideStandaloneColorPicker extends EditorAction { constructor() { super({ id: 'editor.action.hideColorPicker', @@ -61,7 +60,7 @@ class HideStandaloneColorPicker extends EditorAction { } } -class InsertColorWithStandaloneColorPicker extends EditorAction { +export class InsertColorWithStandaloneColorPicker extends EditorAction { constructor() { super({ id: 'editor.action.insertColorWithStandaloneColorPicker', @@ -86,7 +85,3 @@ class InsertColorWithStandaloneColorPicker extends EditorAction { StandaloneColorPickerController.get(editor)?.insertColor(); } } - -registerEditorAction(HideStandaloneColorPicker); -registerEditorAction(InsertColorWithStandaloneColorPicker); -registerAction2(ShowOrFocusStandaloneColorPicker); diff --git a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerController.ts b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerController.ts new file mode 100644 index 000000000..8cbeedd4d --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerController.ts @@ -0,0 +1,63 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IContextKey, IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { IEditorContribution } from '../../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../../common/editorContextKeys.js'; +import { StandaloneColorPickerWidget } from './standaloneColorPickerWidget.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; + +export class StandaloneColorPickerController extends Disposable implements IEditorContribution { + + public static ID = 'editor.contrib.standaloneColorPickerController'; + private _standaloneColorPickerWidget: StandaloneColorPickerWidget | null = null; + private _standaloneColorPickerVisible: IContextKey; + private _standaloneColorPickerFocused: IContextKey; + + constructor( + private readonly _editor: ICodeEditor, + @IContextKeyService _contextKeyService: IContextKeyService, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + ) { + super(); + this._standaloneColorPickerVisible = EditorContextKeys.standaloneColorPickerVisible.bindTo(_contextKeyService); + this._standaloneColorPickerFocused = EditorContextKeys.standaloneColorPickerFocused.bindTo(_contextKeyService); + } + + public showOrFocus() { + if (!this._editor.hasModel()) { + return; + } + if (!this._standaloneColorPickerVisible.get()) { + this._standaloneColorPickerWidget = this._instantiationService.createInstance( + StandaloneColorPickerWidget, + this._editor, + this._standaloneColorPickerVisible, + this._standaloneColorPickerFocused + ); + } else if (!this._standaloneColorPickerFocused.get()) { + this._standaloneColorPickerWidget?.focus(); + } + } + + public hide() { + this._standaloneColorPickerFocused.set(false); + this._standaloneColorPickerVisible.set(false); + this._standaloneColorPickerWidget?.hide(); + this._editor.focus(); + } + + public insertColor() { + this._standaloneColorPickerWidget?.updateEditor(); + this.hide(); + } + + public static get(editor: ICodeEditor) { + return editor.getContribution(StandaloneColorPickerController.ID); + } +} + diff --git a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.ts b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.ts new file mode 100644 index 000000000..bbd3f287a --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.ts @@ -0,0 +1,119 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { Color } from '../../../../../base/common/color.js'; +import { DisposableStore, IDisposable } from '../../../../../base/common/lifecycle.js'; +import { IThemeService } from '../../../../../platform/theme/common/themeService.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import { DocumentColorProvider, IColorInformation } from '../../../../common/languages.js'; +import { IEditorHoverRenderContext } from '../../../hover/browser/hoverTypes.js'; +import { getColors } from '../color.js'; +import { ColorDetector } from '../colorDetector.js'; +import { ColorPickerModel } from '../colorPickerModel.js'; +import { BaseColor, createColorHover, updateColorPresentations, updateEditorModel } from '../colorPickerParticipantUtils.js'; +import { ColorPickerWidget } from '../hoverColorPicker/hoverColorPickerWidget.js'; +import { Range } from '../../../../common/core/range.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Dimension } from '../../../../../base/browser/dom.js'; + +export class StandaloneColorPickerHover implements BaseColor { + constructor( + public readonly owner: StandaloneColorPickerParticipant, + public readonly range: Range, + public readonly model: ColorPickerModel, + public readonly provider: DocumentColorProvider + ) { } + + public static fromBaseColor(owner: StandaloneColorPickerParticipant, color: BaseColor) { + return new StandaloneColorPickerHover(owner, color.range, color.model, color.provider); + } +} + +export class StandaloneColorPickerParticipant { + + public readonly hoverOrdinal: number = 2; + private _color: Color | null = null; + + constructor( + private readonly _editor: ICodeEditor, + @IThemeService private readonly _themeService: IThemeService, + ) { } + + public async createColorHover(defaultColorInfo: IColorInformation, defaultColorProvider: DocumentColorProvider, colorProviderRegistry: LanguageFeatureRegistry): Promise<{ colorHover: StandaloneColorPickerHover; foundInEditor: boolean } | null> { + if (!this._editor.hasModel()) { + return null; + } + const colorDetector = ColorDetector.get(this._editor); + if (!colorDetector) { + return null; + } + const colors = await getColors(colorProviderRegistry, this._editor.getModel(), CancellationToken.None); + let foundColorInfo: IColorInformation | null = null; + let foundColorProvider: DocumentColorProvider | null = null; + for (const colorData of colors) { + const colorInfo = colorData.colorInfo; + if (Range.containsRange(colorInfo.range, defaultColorInfo.range)) { + foundColorInfo = colorInfo; + foundColorProvider = colorData.provider; + } + } + const colorInfo = foundColorInfo ?? defaultColorInfo; + const colorProvider = foundColorProvider ?? defaultColorProvider; + const foundInEditor = !!foundColorInfo; + const colorHover = StandaloneColorPickerHover.fromBaseColor(this, await createColorHover(this._editor.getModel(), colorInfo, colorProvider)); + return { colorHover, foundInEditor }; + } + + public async updateEditorModel(colorHoverData: StandaloneColorPickerHover): Promise { + if (!this._editor.hasModel()) { + return; + } + const colorPickerModel = colorHoverData.model; + let range = new Range(colorHoverData.range.startLineNumber, colorHoverData.range.startColumn, colorHoverData.range.endLineNumber, colorHoverData.range.endColumn); + if (this._color) { + await updateColorPresentations(this._editor.getModel(), colorPickerModel, this._color, range, colorHoverData); + range = updateEditorModel(this._editor, range, colorPickerModel); + } + } + + public renderHoverParts(context: IEditorHoverRenderContext, hoverParts: StandaloneColorPickerHover[]): { disposables: IDisposable; hoverPart: StandaloneColorPickerHover; colorPicker: ColorPickerWidget } | undefined { + if (hoverParts.length === 0 || !this._editor.hasModel()) { + return undefined; + } + if (context.setMinimumDimensions) { + const minimumHeight = this._editor.getOption(EditorOption.lineHeight) + 8; + context.setMinimumDimensions(new Dimension(302, minimumHeight)); + } + + const disposables = new DisposableStore(); + const colorHover = hoverParts[0]; + const editorModel = this._editor.getModel(); + const model = colorHover.model; + const colorPicker = disposables.add(new ColorPickerWidget(context.fragment, model, this._editor.getOption(EditorOption.pixelRatio), this._themeService, true)); + + let editorUpdatedByColorPicker = false; + const range = new Range(colorHover.range.startLineNumber, colorHover.range.startColumn, colorHover.range.endLineNumber, colorHover.range.endColumn); + const color = colorHover.model.color; + this._color = color; + updateColorPresentations(editorModel, model, color, range, colorHover); + disposables.add(model.onColorFlushed((color: Color) => { + this._color = color; + })); + disposables.add(model.onDidChangeColor((color: Color) => { + updateColorPresentations(editorModel, model, color, range, colorHover); + })); + disposables.add(this._editor.onDidChangeModelContent((e) => { + if (editorUpdatedByColorPicker) { + editorUpdatedByColorPicker = false; + } else { + context.hide(); + this._editor.focus(); + } + })); + return { hoverPart: colorHover, colorPicker, disposables }; + } +} diff --git a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerWidget.ts similarity index 68% rename from src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.ts rename to src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerWidget.ts index b5fc34cf6..1a0074768 100644 --- a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.ts +++ b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerWidget.ts @@ -3,82 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IEditorHoverRenderContext } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { Position } from 'vs/editor/common/core/position'; -import { StandaloneColorPickerHover, StandaloneColorPickerParticipant } from 'vs/editor/contrib/colorPicker/browser/colorHoverParticipant'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { EditorHoverStatusBar } from 'vs/editor/contrib/hover/browser/contentHoverStatusBar'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { InsertButton } from 'vs/editor/contrib/colorPicker/browser/colorPickerWidget'; -import { Emitter } from 'vs/base/common/event'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IColorInformation } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IRange } from 'vs/editor/common/core/range'; -import { DefaultDocumentColorProvider } from 'vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider'; -import * as dom from 'vs/base/browser/dom'; -import 'vs/css!./colorPicker'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; - -export class StandaloneColorPickerController extends Disposable implements IEditorContribution { - - public static ID = 'editor.contrib.standaloneColorPickerController'; - private _standaloneColorPickerWidget: StandaloneColorPickerWidget | null = null; - private _standaloneColorPickerVisible: IContextKey; - private _standaloneColorPickerFocused: IContextKey; +import '../colorPicker.css'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IEditorHoverRenderContext } from '../../../hover/browser/hoverTypes.js'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../../browser/editorBrowser.js'; +import { PositionAffinity } from '../../../../common/model.js'; +import { Position } from '../../../../common/core/position.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { EditorHoverStatusBar } from '../../../hover/browser/contentHoverStatusBar.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { Emitter } from '../../../../../base/common/event.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { IColorInformation } from '../../../../common/languages.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { IContextKey } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IRange } from '../../../../common/core/range.js'; +import { DefaultDocumentColorProvider } from '../defaultDocumentColorProvider.js'; +import { IEditorWorkerService } from '../../../../common/services/editorWorker.js'; +import { StandaloneColorPickerHover, StandaloneColorPickerParticipant } from './standaloneColorPickerParticipant.js'; +import * as dom from '../../../../../base/browser/dom.js'; +import { InsertButton } from '../colorPickerParts/colorPickerInsertButton.js'; +class StandaloneColorPickerResult { + // The color picker result consists of: an array of color results and a boolean indicating if the color was found in the editor constructor( - private readonly _editor: ICodeEditor, - @IContextKeyService _contextKeyService: IContextKeyService, - @IInstantiationService private readonly _instantiationService: IInstantiationService, - ) { - super(); - this._standaloneColorPickerVisible = EditorContextKeys.standaloneColorPickerVisible.bindTo(_contextKeyService); - this._standaloneColorPickerFocused = EditorContextKeys.standaloneColorPickerFocused.bindTo(_contextKeyService); - } - - public showOrFocus() { - if (!this._editor.hasModel()) { - return; - } - if (!this._standaloneColorPickerVisible.get()) { - this._standaloneColorPickerWidget = this._instantiationService.createInstance( - StandaloneColorPickerWidget, - this._editor, - this._standaloneColorPickerVisible, - this._standaloneColorPickerFocused - ); - } else if (!this._standaloneColorPickerFocused.get()) { - this._standaloneColorPickerWidget?.focus(); - } - } - - public hide() { - this._standaloneColorPickerFocused.set(false); - this._standaloneColorPickerVisible.set(false); - this._standaloneColorPickerWidget?.hide(); - this._editor.focus(); - } - - public insertColor() { - this._standaloneColorPickerWidget?.updateEditor(); - this.hide(); - } - - public static get(editor: ICodeEditor) { - return editor.getContribution(StandaloneColorPickerController.ID); - } + public readonly value: StandaloneColorPickerHover, + public readonly foundInEditor: boolean + ) { } } -registerEditorContribution(StandaloneColorPickerController.ID, StandaloneColorPickerController, EditorContributionInstantiation.AfterFirstRender); - const PADDING = 8; const CLOSE_BUTTON_WIDTH = 22; @@ -264,11 +217,3 @@ export class StandaloneColorPickerWidget extends Disposable implements IContentW this._editor.layoutContentWidget(this); } } - -class StandaloneColorPickerResult { - // The color picker result consists of: an array of color results and a boolean indicating if the color was found in the editor - constructor( - public readonly value: StandaloneColorPickerHover, - public readonly foundInEditor: boolean - ) { } -} diff --git a/src/vs/editor/contrib/comment/browser/blockCommentCommand.ts b/src/vs/editor/contrib/comment/browser/blockCommentCommand.ts index fdf01f170..79c543e14 100644 --- a/src/vs/editor/contrib/comment/browser/blockCommentCommand.ts +++ b/src/vs/editor/contrib/comment/browser/blockCommentCommand.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; export class BlockCommentCommand implements ICommand { diff --git a/src/vs/editor/contrib/comment/browser/comment.ts b/src/vs/editor/contrib/comment/browser/comment.ts index 2a2a4c283..eafaa331b 100644 --- a/src/vs/editor/contrib/comment/browser/comment.ts +++ b/src/vs/editor/contrib/comment/browser/comment.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BlockCommentCommand } from 'vs/editor/contrib/comment/browser/blockCommentCommand'; -import { LineCommentCommand, Type } from 'vs/editor/contrib/comment/browser/lineCommentCommand'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { ICommand } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { BlockCommentCommand } from './blockCommentCommand.js'; +import { LineCommentCommand, Type } from './lineCommentCommand.js'; +import * as nls from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; abstract class CommentLineAction extends EditorAction { diff --git a/src/vs/editor/contrib/comment/browser/lineCommentCommand.ts b/src/vs/editor/contrib/comment/browser/lineCommentCommand.ts index a5e19fd79..538753995 100644 --- a/src/vs/editor/contrib/comment/browser/lineCommentCommand.ts +++ b/src/vs/editor/contrib/comment/browser/lineCommentCommand.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { Constants } from 'vs/base/common/uint'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BlockCommentCommand } from 'vs/editor/contrib/comment/browser/blockCommentCommand'; +import { CharCode } from '../../../../base/common/charCode.js'; +import * as strings from '../../../../base/common/strings.js'; +import { Constants } from '../../../../base/common/uint.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { BlockCommentCommand } from './blockCommentCommand.js'; export interface IInsertionPoint { ignore: boolean; diff --git a/src/vs/editor/contrib/comment/test/browser/blockCommentCommand.test.ts b/src/vs/editor/contrib/comment/test/browser/blockCommentCommand.test.ts index 1888af3a9..2b5e6eeff 100644 --- a/src/vs/editor/contrib/comment/test/browser/blockCommentCommand.test.ts +++ b/src/vs/editor/contrib/comment/test/browser/blockCommentCommand.test.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BlockCommentCommand } from 'vs/editor/contrib/comment/browser/blockCommentCommand'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ICommand } from '../../../../common/editorCommon.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { BlockCommentCommand } from '../../browser/blockCommentCommand.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; +import { ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js'; function _testCommentCommand(lines: string[], selection: Selection, commandFactory: (accessor: ServicesAccessor, selection: Selection) => ICommand, expectedLines: string[], expectedSelection: Selection): void { const languageId = 'commentMode'; diff --git a/src/vs/editor/contrib/comment/test/browser/lineCommentCommand.test.ts b/src/vs/editor/contrib/comment/test/browser/lineCommentCommand.test.ts index f40f7b1e2..e738c1d86 100644 --- a/src/vs/editor/contrib/comment/test/browser/lineCommentCommand.test.ts +++ b/src/vs/editor/contrib/comment/test/browser/lineCommentCommand.test.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { ColorId, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IState, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { CommentRule } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { ILinePreflightData, IPreflightData, ISimpleModel, LineCommentCommand, Type } from 'vs/editor/contrib/comment/browser/lineCommentCommand'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ICommand } from '../../../../common/editorCommon.js'; +import { ColorId, MetadataConsts } from '../../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IState, TokenizationRegistry } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { CommentRule } from '../../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { NullState } from '../../../../common/languages/nullTokenize.js'; +import { ILinePreflightData, IPreflightData, ISimpleModel, LineCommentCommand, Type } from '../../browser/lineCommentCommand.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js'; function createTestCommandHelper(commentsConfig: CommentRule, commandFactory: (accessor: ServicesAccessor, selection: Selection) => ICommand): (lines: string[], selection: Selection, expectedLines: string[], expectedSelection: Selection) => void { return (lines: string[], selection: Selection, expectedLines: string[], expectedSelection: Selection) => { diff --git a/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts b/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts index 650a15e2e..74a6f2619 100644 --- a/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts +++ b/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IMouseEvent, IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { IAnchor } from 'vs/base/browser/ui/contextview/contextview'; -import { IAction, Separator, SubmenuAction } from 'vs/base/common/actions'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { isIOS } from 'vs/base/common/platform'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import * as nls from 'vs/nls'; -import { IMenuService, MenuId, SubmenuItemAction } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IWorkspaceContextService, isStandaloneEditorWorkspace } from 'vs/platform/workspace/common/workspace'; +import * as dom from '../../../../base/browser/dom.js'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { IMouseEvent, IMouseWheelEvent } from '../../../../base/browser/mouseEvent.js'; +import { ActionViewItem } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; +import { IAnchor } from '../../../../base/browser/ui/contextview/contextview.js'; +import { IAction, Separator, SubmenuAction } from '../../../../base/common/actions.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ResolvedKeybinding } from '../../../../base/common/keybindings.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { isIOS } from '../../../../base/common/platform.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution, ScrollType } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import * as nls from '../../../../nls.js'; +import { IMenuService, MenuId, SubmenuItemAction } from '../../../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService, IContextViewService } from '../../../../platform/contextview/browser/contextView.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IWorkspaceContextService, isStandaloneEditorWorkspace } from '../../../../platform/workspace/common/workspace.js'; export class ContextMenuController implements IEditorContribution { diff --git a/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts b/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts index bd4c56bc1..09146e041 100644 --- a/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts +++ b/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import * as nls from 'vs/nls'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import * as nls from '../../../../nls.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; class CursorState { readonly selections: readonly Selection[]; diff --git a/src/vs/editor/contrib/cursorUndo/test/browser/cursorUndo.test.ts b/src/vs/editor/contrib/cursorUndo/test/browser/cursorUndo.test.ts index d0e3423a4..786fccbad 100644 --- a/src/vs/editor/contrib/cursorUndo/test/browser/cursorUndo.test.ts +++ b/src/vs/editor/contrib/cursorUndo/test/browser/cursorUndo.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreEditingCommands, CoreNavigationCommands } from 'vs/editor/browser/coreCommands'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { CursorUndo, CursorUndoRedoController } from 'vs/editor/contrib/cursorUndo/browser/cursorUndo'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { CoreEditingCommands, CoreNavigationCommands } from '../../../../browser/coreCommands.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { CursorUndo, CursorUndoRedoController } from '../../browser/cursorUndo.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; suite('FindController', () => { diff --git a/src/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.ts b/src/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.ts index 2a99c7ff3..0eb179dc3 100644 --- a/src/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.ts +++ b/src/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { reverseOrder, compareBy, numberComparator } from 'vs/base/common/arrays'; -import { observableValue, observableSignalFromEvent, autorunWithStore, IReader } from 'vs/base/common/observable'; -import { HideUnchangedRegionsFeature, IDiffEditorBreadcrumbsSource } from 'vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature'; -import { DisposableCancellationTokenSource } from 'vs/editor/browser/widget/diffEditor/utils'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IOutlineModelService, OutlineModel } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; -import { SymbolKind } from 'vs/editor/common/languages'; +import { reverseOrder, compareBy, numberComparator } from '../../../../base/common/arrays.js'; +import { observableValue, observableSignalFromEvent, autorunWithStore, IReader } from '../../../../base/common/observable.js'; +import { HideUnchangedRegionsFeature, IDiffEditorBreadcrumbsSource } from '../../../browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js'; +import { DisposableCancellationTokenSource } from '../../../browser/widget/diffEditor/utils.js'; +import { LineRange } from '../../../common/core/lineRange.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IOutlineModelService, OutlineModel } from '../../documentSymbols/browser/outlineModel.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Event } from '../../../../base/common/event.js'; +import { SymbolKind } from '../../../common/languages.js'; class DiffEditorBreadcrumbsSource extends Disposable implements IDiffEditorBreadcrumbsSource { private readonly _currentModel = observableValue(this, undefined); diff --git a/src/vs/editor/contrib/dnd/browser/dnd.ts b/src/vs/editor/contrib/dnd/browser/dnd.ts index 9e355410d..8ca7e29f7 100644 --- a/src/vs/editor/contrib/dnd/browser/dnd.ts +++ b/src/vs/editor/contrib/dnd/browser/dnd.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IMouseEvent } from 'vs/base/browser/mouseEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isMacintosh } from 'vs/base/common/platform'; -import 'vs/css!./dnd'; -import { ICodeEditor, IEditorMouseEvent, IMouseTarget, IPartialEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution, IEditorDecorationsCollection, ScrollType } from 'vs/editor/common/editorCommon'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { DragAndDropCommand } from 'vs/editor/contrib/dnd/browser/dragAndDropCommand'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { IMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { isMacintosh } from '../../../../base/common/platform.js'; +import './dnd.css'; +import { ICodeEditor, IEditorMouseEvent, IMouseTarget, IPartialEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { CodeEditorWidget } from '../../../browser/widget/codeEditor/codeEditorWidget.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CursorChangeReason } from '../../../common/cursorEvents.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution, IEditorDecorationsCollection, ScrollType } from '../../../common/editorCommon.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { DragAndDropCommand } from './dragAndDropCommand.js'; function hasTriggerModifier(e: IKeyboardEvent | IMouseEvent): boolean { if (isMacintosh) { diff --git a/src/vs/editor/contrib/dnd/browser/dragAndDropCommand.ts b/src/vs/editor/contrib/dnd/browser/dragAndDropCommand.ts index 28043b184..7dd03062c 100644 --- a/src/vs/editor/contrib/dnd/browser/dragAndDropCommand.ts +++ b/src/vs/editor/contrib/dnd/browser/dragAndDropCommand.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; export class DragAndDropCommand implements ICommand { diff --git a/src/vs/editor/contrib/documentSymbols/browser/documentSymbols.ts b/src/vs/editor/contrib/documentSymbols/browser/documentSymbols.ts index cda0a4df0..949af7482 100644 --- a/src/vs/editor/contrib/documentSymbols/browser/documentSymbols.ts +++ b/src/vs/editor/contrib/documentSymbols/browser/documentSymbols.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { IOutlineModelService } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { IOutlineModelService } from './outlineModel.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; CommandsRegistry.registerCommand('_executeDocumentSymbolProvider', async function (accessor, ...args) { const [resource] = args; diff --git a/src/vs/editor/contrib/documentSymbols/browser/outlineModel.ts b/src/vs/editor/contrib/documentSymbols/browser/outlineModel.ts index e7f72b1a2..dfe95eccd 100644 --- a/src/vs/editor/contrib/documentSymbols/browser/outlineModel.ts +++ b/src/vs/editor/contrib/documentSymbols/browser/outlineModel.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { binarySearch, coalesceInPlace, equals } from 'vs/base/common/arrays'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Iterable } from 'vs/base/common/iterator'; -import { LRUCache } from 'vs/base/common/map'; -import { commonPrefixLength } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { DocumentSymbol, DocumentSymbolProvider } from 'vs/editor/common/languages'; -import { MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IModelService } from 'vs/editor/common/services/model'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { binarySearch, coalesceInPlace, equals } from '../../../../base/common/arrays.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { Iterable } from '../../../../base/common/iterator.js'; +import { LRUCache } from '../../../../base/common/map.js'; +import { commonPrefixLength } from '../../../../base/common/strings.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ITextModel } from '../../../common/model.js'; +import { DocumentSymbol, DocumentSymbolProvider } from '../../../common/languages.js'; +import { MarkerSeverity } from '../../../../platform/markers/common/markers.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { IModelService } from '../../../common/services/model.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; export abstract class TreeElement { diff --git a/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts b/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts index 185d30db3..a59d3a904 100644 --- a/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts +++ b/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { Range } from 'vs/editor/common/core/range'; -import { DocumentSymbol, SymbolKind } from 'vs/editor/common/languages'; -import { LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { createModelServices, createTextModel } from 'vs/editor/test/common/testTextModel'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IMarker, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { OutlineElement, OutlineGroup, OutlineModel, OutlineModelService } from '../../browser/outlineModel'; -import { mock } from 'vs/base/test/common/mock'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { Range } from '../../../../common/core/range.js'; +import { DocumentSymbol, SymbolKind } from '../../../../common/languages.js'; +import { LanguageFeatureDebounceService } from '../../../../common/services/languageFeatureDebounce.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { IModelService } from '../../../../common/services/model.js'; +import { createModelServices, createTextModel } from '../../../../test/common/testTextModel.js'; +import { NullLogService } from '../../../../../platform/log/common/log.js'; +import { IMarker, MarkerSeverity } from '../../../../../platform/markers/common/markers.js'; +import { OutlineElement, OutlineGroup, OutlineModel, OutlineModelService } from '../../browser/outlineModel.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { IEnvironmentService } from '../../../../../platform/environment/common/environment.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('OutlineModel', function () { diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts index 20ed163b4..f4f13d510 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { IJSONSchema, SchemaToType } from 'vs/base/common/jsonSchema'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; -import { CopyPasteController, changePasteTypeCommandId, pasteWidgetVisibleCtx } from 'vs/editor/contrib/dropOrPasteInto/browser/copyPasteController'; -import { DefaultPasteProvidersFeature, DefaultTextPasteOrDropEditProvider } from 'vs/editor/contrib/dropOrPasteInto/browser/defaultProviders'; -import * as nls from 'vs/nls'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { IJSONSchema, SchemaToType } from '../../../../base/common/jsonSchema.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { registerEditorFeature } from '../../../common/editorFeatures.js'; +import { CopyPasteController, changePasteTypeCommandId, pasteWidgetVisibleCtx } from './copyPasteController.js'; +import { DefaultPasteProvidersFeature, DefaultTextPasteOrDropEditProvider } from './defaultProviders.js'; +import * as nls from '../../../../nls.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; registerEditorContribution(CopyPasteController.ID, CopyPasteController, EditorContributionInstantiation.Eager); // eager because it listens to events on the container dom node of the editor registerEditorFeature(DefaultPasteProvidersFeature); diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts index 1203f86cd..5f10ec82e 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts @@ -3,40 +3,40 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener, getActiveDocument } from 'vs/base/browser/dom'; -import { coalesce } from 'vs/base/common/arrays'; -import { CancelablePromise, createCancelablePromise, DeferredPromise, raceCancellation } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { UriList, VSDataTransfer, createStringDataTransferItem, matchesMimeType } from 'vs/base/common/dataTransfer'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import * as platform from 'vs/base/common/platform'; -import { generateUuid } from 'vs/base/common/uuid'; -import { ClipboardEventUtils } from 'vs/editor/browser/controller/textAreaInput'; -import { toExternalVSDataTransfer, toVSDataTransfer } from 'vs/editor/browser/dnd'; -import { ICodeEditor, PastePayload } from 'vs/editor/browser/editorBrowser'; -import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Handler, IEditorContribution } from 'vs/editor/common/editorCommon'; -import { DocumentPasteContext, DocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteTriggerKind } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { DefaultTextPasteOrDropEditProvider } from 'vs/editor/contrib/dropOrPasteInto/browser/defaultProviders'; -import { createCombinedWorkspaceEdit, sortEditsByYieldTo } from 'vs/editor/contrib/dropOrPasteInto/browser/edit'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { InlineProgressManager } from 'vs/editor/contrib/inlineProgress/browser/inlineProgress'; -import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; -import { localize } from 'vs/nls'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; -import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { PostEditWidgetManager } from './postEditWidget'; -import { CancellationError, isCancellationError } from 'vs/base/common/errors'; +import { addDisposableListener, getActiveDocument } from '../../../../base/browser/dom.js'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { CancelablePromise, createCancelablePromise, DeferredPromise, raceCancellation } from '../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { UriList, VSDataTransfer, createStringDataTransferItem, matchesMimeType } from '../../../../base/common/dataTransfer.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Mimes } from '../../../../base/common/mime.js'; +import * as platform from '../../../../base/common/platform.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { toExternalVSDataTransfer, toVSDataTransfer } from '../../../browser/dnd.js'; +import { ICodeEditor, PastePayload } from '../../../browser/editorBrowser.js'; +import { IBulkEditService } from '../../../browser/services/bulkEditService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { Handler, IEditorContribution } from '../../../common/editorCommon.js'; +import { DocumentPasteContext, DocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteTriggerKind } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { DefaultTextPasteOrDropEditProvider } from './defaultProviders.js'; +import { createCombinedWorkspaceEdit, sortEditsByYieldTo } from './edit.js'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from '../../editorState/browser/editorState.js'; +import { InlineProgressManager } from '../../inlineProgress/browser/inlineProgress.js'; +import { MessageController } from '../../message/browser/messageController.js'; +import { localize } from '../../../../nls.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IProgressService, ProgressLocation } from '../../../../platform/progress/common/progress.js'; +import { IQuickInputService, IQuickPickItem } from '../../../../platform/quickinput/common/quickInput.js'; +import { PostEditWidgetManager } from './postEditWidget.js'; +import { CancellationError, isCancellationError } from '../../../../base/common/errors.js'; +import { ClipboardEventUtils } from '../../../browser/controller/editContext/textArea/textAreaEditContextInput.js'; export const changePasteTypeCommandId = 'editor.changePasteType'; @@ -255,8 +255,11 @@ export class CopyPasteController extends Disposable implements IEditorContributi const dataTransfer = toExternalVSDataTransfer(e.clipboardData); dataTransfer.delete(vscodeClipboardMime); + const fileTypes = Array.from(e.clipboardData.files).map(file => file.type); + const allPotentialMimeTypes = [ ...e.clipboardData.types, + ...fileTypes, ...metadata?.providerCopyMimeTypes ?? [], // TODO: always adds `uri-list` because this get set if there are resources in the system clipboard. // However we can only check the system clipboard async. For this early check, just add it in. diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts index e44d9341c..f3beb9c51 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IReadonlyVSDataTransfer, UriList } from 'vs/base/common/dataTransfer'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import { Schemas } from 'vs/base/common/network'; -import { relativePath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { DocumentDropEditProvider, DocumentDropEditsSession, DocumentPasteContext, DocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteEditsSession, DocumentPasteTriggerKind } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { localize } from 'vs/nls'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IReadonlyVSDataTransfer, UriList } from '../../../../base/common/dataTransfer.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Mimes } from '../../../../base/common/mime.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { relativePath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IPosition } from '../../../common/core/position.js'; +import { IRange } from '../../../common/core/range.js'; +import { DocumentDropEditProvider, DocumentDropEditsSession, DocumentPasteContext, DocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteEditsSession, DocumentPasteTriggerKind } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { localize } from '../../../../nls.js'; +import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; abstract class SimplePasteAndDropProvider implements DocumentDropEditProvider, DocumentPasteEditProvider { diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts index 52dc73b8c..7af24cf81 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { editorConfigurationBaseNode } from 'vs/editor/common/config/editorConfigurationSchema'; -import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; -import { DefaultDropProvidersFeature } from 'vs/editor/contrib/dropOrPasteInto/browser/defaultProviders'; -import * as nls from 'vs/nls'; -import { Extensions as ConfigurationExtensions, ConfigurationScope, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { DropIntoEditorController, changeDropTypeCommandId, defaultProviderConfig, dropWidgetVisibleCtx } from './dropIntoEditorController'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { editorConfigurationBaseNode } from '../../../common/config/editorConfigurationSchema.js'; +import { registerEditorFeature } from '../../../common/editorFeatures.js'; +import { DefaultDropProvidersFeature } from './defaultProviders.js'; +import * as nls from '../../../../nls.js'; +import { Extensions as ConfigurationExtensions, ConfigurationScope, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { DropIntoEditorController, changeDropTypeCommandId, defaultProviderConfig, dropWidgetVisibleCtx } from './dropIntoEditorController.js'; registerEditorContribution(DropIntoEditorController.ID, DropIntoEditorController, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorFeature(DefaultDropProvidersFeature); diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts index 082b74478..da8ef9147 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { CancelablePromise, createCancelablePromise, raceCancellation } from 'vs/base/common/async'; -import { VSDataTransfer, matchesMimeType } from 'vs/base/common/dataTransfer'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { toExternalVSDataTransfer } from 'vs/editor/browser/dnd'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { DocumentDropEdit, DocumentDropEditProvider } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { DraggedTreeItemsIdentifier } from 'vs/editor/common/services/treeViewsDnd'; -import { ITreeViewsDnDService } from 'vs/editor/common/services/treeViewsDndService'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { InlineProgressManager } from 'vs/editor/contrib/inlineProgress/browser/inlineProgress'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { LocalSelectionTransfer } from 'vs/platform/dnd/browser/dnd'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { sortEditsByYieldTo } from './edit'; -import { PostEditWidgetManager } from './postEditWidget'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { CancelablePromise, createCancelablePromise, raceCancellation } from '../../../../base/common/async.js'; +import { VSDataTransfer, matchesMimeType } from '../../../../base/common/dataTransfer.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { toExternalVSDataTransfer } from '../../../browser/dnd.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { DocumentDropEdit, DocumentDropEditProvider } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { DraggedTreeItemsIdentifier } from '../../../common/services/treeViewsDnd.js'; +import { ITreeViewsDnDService } from '../../../common/services/treeViewsDndService.js'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from '../../editorState/browser/editorState.js'; +import { InlineProgressManager } from '../../inlineProgress/browser/inlineProgress.js'; +import { localize } from '../../../../nls.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { LocalSelectionTransfer } from '../../../../platform/dnd/browser/dnd.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { sortEditsByYieldTo } from './edit.js'; +import { PostEditWidgetManager } from './postEditWidget.js'; export const defaultProviderConfig = 'editor.experimental.dropIntoEditor.defaultProvider'; diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts index e612cfc0b..0b47ad3d3 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; -import { DocumentDropEdit, DocumentPasteEdit, DropYieldTo, WorkspaceEdit } from 'vs/editor/common/languages'; -import { Range } from 'vs/editor/common/core/range'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; +import { URI } from '../../../../base/common/uri.js'; +import { ResourceTextEdit } from '../../../browser/services/bulkEditService.js'; +import { DocumentDropEdit, DocumentPasteEdit, DropYieldTo, WorkspaceEdit } from '../../../common/languages.js'; +import { Range } from '../../../common/core/range.js'; +import { SnippetParser } from '../../snippet/browser/snippetParser.js'; +import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; /** * Given a {@link DropOrPasteEdit} and set of ranges, creates a {@link WorkspaceEdit} that applies the insert text from diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts index 9443f52cc..6be92c50d 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Button } from 'vs/base/browser/ui/button/button'; -import { toAction } from 'vs/base/common/actions'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { isCancellationError } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import 'vs/css!./postEditWidget'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { IBulkEditResult, IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; -import { Range } from 'vs/editor/common/core/range'; -import { DocumentDropEdit, DocumentPasteEdit } from 'vs/editor/common/languages'; -import { TrackedRangeStickiness } from 'vs/editor/common/model'; -import { createCombinedWorkspaceEdit } from 'vs/editor/contrib/dropOrPasteInto/browser/edit'; -import { localize } from 'vs/nls'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; +import * as dom from '../../../../base/browser/dom.js'; +import { Button } from '../../../../base/browser/ui/button/button.js'; +import { toAction } from '../../../../base/common/actions.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../../base/common/errorMessage.js'; +import { isCancellationError } from '../../../../base/common/errors.js'; +import { Event } from '../../../../base/common/event.js'; +import { Disposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import './postEditWidget.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { IBulkEditResult, IBulkEditService } from '../../../browser/services/bulkEditService.js'; +import { Range } from '../../../common/core/range.js'; +import { DocumentDropEdit, DocumentPasteEdit } from '../../../common/languages.js'; +import { TrackedRangeStickiness } from '../../../common/model.js'; +import { createCombinedWorkspaceEdit } from './edit.js'; +import { localize } from '../../../../nls.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; interface EditSet { diff --git a/src/vs/editor/contrib/dropOrPasteInto/test/browser/editSort.test.ts b/src/vs/editor/contrib/dropOrPasteInto/test/browser/editSort.test.ts index ec61f04a4..c989e4ec3 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/test/browser/editSort.test.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/test/browser/editSort.test.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { DocumentDropEdit } from 'vs/editor/common/languages'; -import { sortEditsByYieldTo } from 'vs/editor/contrib/dropOrPasteInto/browser/edit'; +import { HierarchicalKind } from '../../../../../base/common/hierarchicalKind.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { DocumentDropEdit } from '../../../../common/languages.js'; +import { sortEditsByYieldTo } from '../../browser/edit.js'; function createTestEdit(kind: string, args?: Partial): DocumentDropEdit { diff --git a/src/vs/editor/contrib/editorState/browser/editorState.ts b/src/vs/editor/contrib/editorState/browser/editorState.ts index 3bfadf65d..fdb296ee7 100644 --- a/src/vs/editor/contrib/editorState/browser/editorState.ts +++ b/src/vs/editor/contrib/editorState/browser/editorState.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { ICodeEditor, IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range, IRange } from 'vs/editor/common/core/range'; -import { CancellationTokenSource, CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ITextModel } from 'vs/editor/common/model'; -import { EditorKeybindingCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/keybindingCancellation'; +import * as strings from '../../../../base/common/strings.js'; +import { ICodeEditor, IActiveCodeEditor } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { Range, IRange } from '../../../common/core/range.js'; +import { CancellationTokenSource, CancellationToken } from '../../../../base/common/cancellation.js'; +import { IDisposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ITextModel } from '../../../common/model.js'; +import { EditorKeybindingCancellationTokenSource } from './keybindingCancellation.js'; export const enum CodeEditorStateFlag { Value = 1, diff --git a/src/vs/editor/contrib/editorState/browser/keybindingCancellation.ts b/src/vs/editor/contrib/editorState/browser/keybindingCancellation.ts index 76de62975..94020ce96 100644 --- a/src/vs/editor/contrib/editorState/browser/keybindingCancellation.ts +++ b/src/vs/editor/contrib/editorState/browser/keybindingCancellation.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode } from 'vs/base/common/keyCodes'; -import { EditorCommand, registerEditorCommand } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IContextKeyService, RawContextKey, IContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { CancellationTokenSource, CancellationToken } from 'vs/base/common/cancellation'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { localize } from 'vs/nls'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { EditorCommand, registerEditorCommand } from '../../../browser/editorExtensions.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IContextKeyService, RawContextKey, IContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { CancellationTokenSource, CancellationToken } from '../../../../base/common/cancellation.js'; +import { LinkedList } from '../../../../base/common/linkedList.js'; +import { createDecorator, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { localize } from '../../../../nls.js'; const IEditorCancellationTokens = createDecorator('IEditorCancelService'); diff --git a/src/vs/editor/contrib/editorState/test/browser/editorState.test.ts b/src/vs/editor/contrib/editorState/test/browser/editorState.test.ts index 239da13d2..c72c5a7b7 100644 --- a/src/vs/editor/contrib/editorState/test/browser/editorState.test.ts +++ b/src/vs/editor/contrib/editorState/test/browser/editorState.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ITextModel } from 'vs/editor/common/model'; -import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; +import { URI } from '../../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ITextModel } from '../../../../common/model.js'; +import { CodeEditorStateFlag, EditorState } from '../../browser/editorState.js'; interface IStubEditorState { model?: { uri?: URI; version?: number }; diff --git a/src/vs/editor/contrib/find/browser/findController.ts b/src/vs/editor/contrib/find/browser/findController.ts index a11d534de..5033c2565 100644 --- a/src/vs/editor/contrib/find/browser/findController.ts +++ b/src/vs/editor/contrib/find/browser/findController.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Delayer } from 'vs/base/common/async'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import * as strings from 'vs/base/common/strings'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, MultiEditorAction, registerEditorAction, registerEditorCommand, registerEditorContribution, registerMultiEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { overviewRulerRangeHighlight } from 'vs/editor/common/core/editorColorRegistry'; -import { IRange } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { OverviewRulerLane } from 'vs/editor/common/model'; -import { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_FIND_WIDGET_VISIBLE, CONTEXT_REPLACE_INPUT_FOCUSED, FindModelBoundToEditorModel, FIND_IDS, ToggleCaseSensitiveKeybinding, TogglePreserveCaseKeybinding, ToggleRegexKeybinding, ToggleSearchScopeKeybinding, ToggleWholeWordKeybinding } from 'vs/editor/contrib/find/browser/findModel'; -import { FindOptionsWidget } from 'vs/editor/contrib/find/browser/findOptionsWidget'; -import { FindReplaceState, FindReplaceStateChangedEvent, INewFindReplaceState } from 'vs/editor/contrib/find/browser/findState'; -import { FindWidget, IFindController } from 'vs/editor/contrib/find/browser/findWidget'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { ContextKeyExpr, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IThemeService, themeColorFromId } from 'vs/platform/theme/common/themeService'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; +import { Delayer } from '../../../../base/common/async.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import * as strings from '../../../../base/common/strings.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, MultiEditorAction, registerEditorAction, registerEditorCommand, registerEditorContribution, registerMultiEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { overviewRulerRangeHighlight } from '../../../common/core/editorColorRegistry.js'; +import { IRange } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { OverviewRulerLane } from '../../../common/model.js'; +import { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_FIND_WIDGET_VISIBLE, CONTEXT_REPLACE_INPUT_FOCUSED, FindModelBoundToEditorModel, FIND_IDS, ToggleCaseSensitiveKeybinding, TogglePreserveCaseKeybinding, ToggleRegexKeybinding, ToggleSearchScopeKeybinding, ToggleWholeWordKeybinding } from './findModel.js'; +import { FindOptionsWidget } from './findOptionsWidget.js'; +import { FindReplaceState, FindReplaceStateChangedEvent, INewFindReplaceState } from './findState.js'; +import { FindWidget, IFindController } from './findWidget.js'; +import * as nls from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextViewService } from '../../../../platform/contextview/browser/contextView.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { IThemeService, themeColorFromId } from '../../../../platform/theme/common/themeService.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; const SEARCH_STRING_MAX_LENGTH = 524288; diff --git a/src/vs/editor/contrib/find/browser/findDecorations.ts b/src/vs/editor/contrib/find/browser/findDecorations.ts index e5e901846..cfa856aaa 100644 --- a/src/vs/editor/contrib/find/browser/findDecorations.ts +++ b/src/vs/editor/contrib/find/browser/findDecorations.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { FindMatch, IModelDecorationsChangeAccessor, IModelDeltaDecoration, MinimapPosition, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { minimapFindMatch, overviewRulerFindMatchForeground } from 'vs/platform/theme/common/colorRegistry'; -import { themeColorFromId } from 'vs/platform/theme/common/themeService'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { IActiveCodeEditor } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { FindMatch, IModelDecorationsChangeAccessor, IModelDeltaDecoration, MinimapPosition, OverviewRulerLane, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { minimapFindMatch, overviewRulerFindMatchForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { themeColorFromId } from '../../../../platform/theme/common/themeService.js'; export class FindDecorations implements IDisposable { diff --git a/src/vs/editor/contrib/find/browser/findModel.ts b/src/vs/editor/contrib/find/browser/findModel.ts index a6958ce49..bd6fa9bae 100644 --- a/src/vs/editor/contrib/find/browser/findModel.ts +++ b/src/vs/editor/contrib/find/browser/findModel.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findFirstIdxMonotonousOrArrLen } from 'vs/base/common/arraysFind'; -import { RunOnceScheduler, TimeoutTimer } from 'vs/base/common/async'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import { Constants } from 'vs/base/common/uint'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ReplaceCommand, ReplaceCommandThatPreservesSelection } from 'vs/editor/common/commands/replaceCommand'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ScrollType } from 'vs/editor/common/editorCommon'; -import { EndOfLinePreference, FindMatch, ITextModel } from 'vs/editor/common/model'; -import { SearchParams } from 'vs/editor/common/model/textModelSearch'; -import { FindDecorations } from 'vs/editor/contrib/find/browser/findDecorations'; -import { FindReplaceState, FindReplaceStateChangedEvent } from 'vs/editor/contrib/find/browser/findState'; -import { ReplaceAllCommand } from 'vs/editor/contrib/find/browser/replaceAllCommand'; -import { parseReplaceString, ReplacePattern } from 'vs/editor/contrib/find/browser/replacePattern'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { findFirstIdxMonotonousOrArrLen } from '../../../../base/common/arraysFind.js'; +import { RunOnceScheduler, TimeoutTimer } from '../../../../base/common/async.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { DisposableStore, dispose } from '../../../../base/common/lifecycle.js'; +import { Constants } from '../../../../base/common/uint.js'; +import { IActiveCodeEditor } from '../../../browser/editorBrowser.js'; +import { ReplaceCommand, ReplaceCommandThatPreservesSelection } from '../../../common/commands/replaceCommand.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CursorChangeReason, ICursorPositionChangedEvent } from '../../../common/cursorEvents.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ScrollType } from '../../../common/editorCommon.js'; +import { EndOfLinePreference, FindMatch, ITextModel } from '../../../common/model.js'; +import { SearchParams } from '../../../common/model/textModelSearch.js'; +import { FindDecorations } from './findDecorations.js'; +import { FindReplaceState, FindReplaceStateChangedEvent } from './findState.js'; +import { ReplaceAllCommand } from './replaceAllCommand.js'; +import { parseReplaceString, ReplacePattern } from './replacePattern.js'; +import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IKeybindings } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export const CONTEXT_FIND_WIDGET_VISIBLE = new RawContextKey('findWidgetVisible', false); export const CONTEXT_FIND_WIDGET_NOT_VISIBLE = CONTEXT_FIND_WIDGET_VISIBLE.toNegated(); diff --git a/src/vs/editor/contrib/find/browser/findOptionsWidget.ts b/src/vs/editor/contrib/find/browser/findOptionsWidget.ts index 007723f69..137f792ff 100644 --- a/src/vs/editor/contrib/find/browser/findOptionsWidget.ts +++ b/src/vs/editor/contrib/find/browser/findOptionsWidget.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import 'vs/css!./findOptionsWidget'; -import { CaseSensitiveToggle, RegexToggle, WholeWordsToggle } from 'vs/base/browser/ui/findinput/findInputToggles'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { FIND_IDS } from 'vs/editor/contrib/find/browser/findModel'; -import { FindReplaceState } from 'vs/editor/contrib/find/browser/findState'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { asCssVariable, inputActiveOptionBackground, inputActiveOptionBorder, inputActiveOptionForeground } from 'vs/platform/theme/common/colorRegistry'; -import { createInstantHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; +import * as dom from '../../../../base/browser/dom.js'; +import './findOptionsWidget.css'; +import { CaseSensitiveToggle, RegexToggle, WholeWordsToggle } from '../../../../base/browser/ui/findinput/findInputToggles.js'; +import { Widget } from '../../../../base/browser/ui/widget.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js'; +import { FIND_IDS } from './findModel.js'; +import { FindReplaceState } from './findState.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { asCssVariable, inputActiveOptionBackground, inputActiveOptionBorder, inputActiveOptionForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { createInstantHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js'; export class FindOptionsWidget extends Widget implements IOverlayWidget { diff --git a/src/vs/editor/contrib/find/browser/findState.ts b/src/vs/editor/contrib/find/browser/findState.ts index 9dec25236..f48d60c17 100644 --- a/src/vs/editor/contrib/find/browser/findState.ts +++ b/src/vs/editor/contrib/find/browser/findState.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Range } from 'vs/editor/common/core/range'; -import { MATCHES_LIMIT } from './findModel'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Range } from '../../../common/core/range.js'; +import { MATCHES_LIMIT } from './findModel.js'; export interface FindReplaceStateChangedEvent { moveCursor: boolean; diff --git a/src/vs/editor/contrib/find/browser/findWidget.ts b/src/vs/editor/contrib/find/browser/findWidget.ts index 9645d4b54..bb3054e0d 100644 --- a/src/vs/editor/contrib/find/browser/findWidget.ts +++ b/src/vs/editor/contrib/find/browser/findWidget.ts @@ -3,49 +3,49 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IMouseEvent } from 'vs/base/browser/mouseEvent'; -import { alert as alertFn } from 'vs/base/browser/ui/aria/aria'; -import { Toggle } from 'vs/base/browser/ui/toggle/toggle'; -import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; -import { FindInput } from 'vs/base/browser/ui/findinput/findInput'; -import { ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput'; -import { IMessage as InputBoxMessage } from 'vs/base/browser/ui/inputbox/inputBox'; -import { ISashEvent, IVerticalSashLayoutProvider, Orientation, Sash } from 'vs/base/browser/ui/sash/sash'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { Delayer } from 'vs/base/common/async'; -import { Codicon } from 'vs/base/common/codicons'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import 'vs/css!./findWidget'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, IViewZone, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_REPLACE_INPUT_FOCUSED, FIND_IDS, MATCHES_LIMIT } from 'vs/editor/contrib/find/browser/findModel'; -import { FindReplaceState, FindReplaceStateChangedEvent } from 'vs/editor/contrib/find/browser/findState'; -import * as nls from 'vs/nls'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { ContextScopedFindInput, ContextScopedReplaceInput } from 'vs/platform/history/browser/contextScopedHistoryWidget'; -import { showHistoryKeybindingHint } from 'vs/platform/history/browser/historyWidgetKeybindingHint'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { asCssVariable, contrastBorder, editorFindMatchForeground, editorFindMatchHighlightBorder, editorFindMatchHighlightForeground, editorFindRangeHighlightBorder, inputActiveOptionBackground, inputActiveOptionBorder, inputActiveOptionForeground } from 'vs/platform/theme/common/colorRegistry'; -import { registerIcon, widgetClose } from 'vs/platform/theme/common/iconRegistry'; -import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { isHighContrast } from 'vs/platform/theme/common/theme'; -import { assertIsDefined } from 'vs/base/common/types'; -import { defaultInputBoxStyles, defaultToggleStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { Selection } from 'vs/editor/common/core/selection'; -import { createInstantHoverDelegate, getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; +import * as dom from '../../../../base/browser/dom.js'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { IMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { alert as alertFn } from '../../../../base/browser/ui/aria/aria.js'; +import { Toggle } from '../../../../base/browser/ui/toggle/toggle.js'; +import { IContextViewProvider } from '../../../../base/browser/ui/contextview/contextview.js'; +import { FindInput } from '../../../../base/browser/ui/findinput/findInput.js'; +import { ReplaceInput } from '../../../../base/browser/ui/findinput/replaceInput.js'; +import { IMessage as InputBoxMessage } from '../../../../base/browser/ui/inputbox/inputBox.js'; +import { ISashEvent, IVerticalSashLayoutProvider, Orientation, Sash } from '../../../../base/browser/ui/sash/sash.js'; +import { Widget } from '../../../../base/browser/ui/widget.js'; +import { Delayer } from '../../../../base/common/async.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { toDisposable } from '../../../../base/common/lifecycle.js'; +import * as platform from '../../../../base/common/platform.js'; +import * as strings from '../../../../base/common/strings.js'; +import './findWidget.css'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, IViewZone, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_REPLACE_INPUT_FOCUSED, FIND_IDS, MATCHES_LIMIT } from './findModel.js'; +import { FindReplaceState, FindReplaceStateChangedEvent } from './findState.js'; +import * as nls from '../../../../nls.js'; +import { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js'; +import { ContextScopedFindInput, ContextScopedReplaceInput } from '../../../../platform/history/browser/contextScopedHistoryWidget.js'; +import { showHistoryKeybindingHint } from '../../../../platform/history/browser/historyWidgetKeybindingHint.js'; +import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { asCssVariable, contrastBorder, editorFindMatchForeground, editorFindMatchHighlightBorder, editorFindMatchHighlightForeground, editorFindRangeHighlightBorder, inputActiveOptionBackground, inputActiveOptionBorder, inputActiveOptionForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerIcon, widgetClose } from '../../../../platform/theme/common/iconRegistry.js'; +import { IThemeService, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { defaultInputBoxStyles, defaultToggleStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { Selection } from '../../../common/core/selection.js'; +import { createInstantHoverDelegate, getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import { IHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegate.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; const findCollapsedIcon = registerIcon('find-collapsed', Codicon.chevronRight, nls.localize('findCollapsedIcon', 'Icon to indicate that the editor find widget is collapsed.')); const findExpandedIcon = registerIcon('find-expanded', Codicon.chevronDown, nls.localize('findExpandedIcon', 'Icon to indicate that the editor find widget is expanded.')); diff --git a/src/vs/editor/contrib/find/browser/replaceAllCommand.ts b/src/vs/editor/contrib/find/browser/replaceAllCommand.ts index 8f5773aa4..0926711fb 100644 --- a/src/vs/editor/contrib/find/browser/replaceAllCommand.ts +++ b/src/vs/editor/contrib/find/browser/replaceAllCommand.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; interface IEditOperation { range: Range; diff --git a/src/vs/editor/contrib/find/browser/replacePattern.ts b/src/vs/editor/contrib/find/browser/replacePattern.ts index bc0d3b9b8..70c0f5bba 100644 --- a/src/vs/editor/contrib/find/browser/replacePattern.ts +++ b/src/vs/editor/contrib/find/browser/replacePattern.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { buildReplaceStringWithCasePreserved } from 'vs/base/common/search'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { buildReplaceStringWithCasePreserved } from '../../../../base/common/search.js'; const enum ReplacePatternKind { StaticValue = 0, diff --git a/src/vs/editor/contrib/find/test/browser/find.test.ts b/src/vs/editor/contrib/find/test/browser/find.test.ts index 580ea739b..8b0cd2a87 100644 --- a/src/vs/editor/contrib/find/test/browser/find.test.ts +++ b/src/vs/editor/contrib/find/test/browser/find.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { getSelectionSearchString } from 'vs/editor/contrib/find/browser/findController'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { getSelectionSearchString } from '../../browser/findController.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; suite('Find', () => { diff --git a/src/vs/editor/contrib/find/test/browser/findController.test.ts b/src/vs/editor/contrib/find/test/browser/findController.test.ts index 49fef95ba..bab641242 100644 --- a/src/vs/editor/contrib/find/test/browser/findController.test.ts +++ b/src/vs/editor/contrib/find/test/browser/findController.test.ts @@ -4,25 +4,25 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Delayer } from 'vs/base/common/async'; -import * as platform from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction } from 'vs/editor/browser/editorExtensions'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { CommonFindController, FindStartFocusAction, IFindStartOptions, NextMatchFindAction, NextSelectionMatchFindAction, StartFindAction, StartFindReplaceAction, StartFindWithSelectionAction } from 'vs/editor/contrib/find/browser/findController'; -import { CONTEXT_FIND_INPUT_FOCUSED } from 'vs/editor/contrib/find/browser/findModel'; -import { withAsyncTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService, InMemoryStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { Delayer } from '../../../../../base/common/async.js'; +import * as platform from '../../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorAction } from '../../../../browser/editorExtensions.js'; +import { EditOperation } from '../../../../common/core/editOperation.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { CommonFindController, FindStartFocusAction, IFindStartOptions, NextMatchFindAction, NextSelectionMatchFindAction, StartFindAction, StartFindReplaceAction, StartFindWithSelectionAction } from '../../browser/findController.js'; +import { CONTEXT_FIND_INPUT_FOCUSED } from '../../browser/findModel.js'; +import { withAsyncTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { IClipboardService } from '../../../../../platform/clipboard/common/clipboardService.js'; +import { IContextKey, IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IHoverService } from '../../../../../platform/hover/browser/hover.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { INotificationService } from '../../../../../platform/notification/common/notification.js'; +import { IStorageService, InMemoryStorageService, StorageScope, StorageTarget } from '../../../../../platform/storage/common/storage.js'; class TestFindController extends CommonFindController { diff --git a/src/vs/editor/contrib/find/test/browser/findModel.test.ts b/src/vs/editor/contrib/find/test/browser/findModel.test.ts index 8cc753388..09a0de5a7 100644 --- a/src/vs/editor/contrib/find/test/browser/findModel.test.ts +++ b/src/vs/editor/contrib/find/test/browser/findModel.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreNavigationCommands } from 'vs/editor/browser/coreCommands'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { PieceTreeTextBufferBuilder } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder'; -import { FindModelBoundToEditorModel } from 'vs/editor/contrib/find/browser/findModel'; -import { FindReplaceState } from 'vs/editor/contrib/find/browser/findState'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { CoreNavigationCommands } from '../../../../browser/coreCommands.js'; +import { IActiveCodeEditor, ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { PieceTreeTextBufferBuilder } from '../../../../common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js'; +import { FindModelBoundToEditorModel } from '../../browser/findModel.js'; +import { FindReplaceState } from '../../browser/findState.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; suite('FindModel', () => { diff --git a/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts b/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts index 1f534bbda..26c65b3d8 100644 --- a/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts +++ b/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { buildReplaceStringWithCasePreserved } from 'vs/base/common/search'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { parseReplaceString, ReplacePattern, ReplacePiece } from 'vs/editor/contrib/find/browser/replacePattern'; +import { buildReplaceStringWithCasePreserved } from '../../../../../base/common/search.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { parseReplaceString, ReplacePattern, ReplacePiece } from '../../browser/replacePattern.js'; suite('Replace Pattern test', () => { diff --git a/src/vs/editor/contrib/folding/browser/folding.ts b/src/vs/editor/contrib/folding/browser/folding.ts index b713765ec..ee657d44e 100644 --- a/src/vs/editor/contrib/folding/browser/folding.ts +++ b/src/vs/editor/contrib/folding/browser/folding.ts @@ -3,45 +3,45 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, Delayer, RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { illegalArgument, onUnexpectedError } from 'vs/base/common/errors'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import * as types from 'vs/base/common/types'; -import 'vs/css!./folding'; -import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, registerInstantiatedEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { FoldingRange, FoldingRangeKind, FoldingRangeProvider } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { CollapseMemento, FoldingModel, getNextFoldLine, getParentFoldLine as getParentFoldLine, getPreviousFoldLine, setCollapseStateAtLevel, setCollapseStateForMatchingLines, setCollapseStateForRest, setCollapseStateForType, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateUp, toggleCollapseState } from 'vs/editor/contrib/folding/browser/foldingModel'; -import { HiddenRangeModel } from 'vs/editor/contrib/folding/browser/hiddenRangeModel'; -import { IndentRangeProvider } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import * as nls from 'vs/nls'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { FoldingDecorationProvider } from './foldingDecorations'; -import { FoldingRegion, FoldingRegions, FoldRange, FoldSource, ILineRange } from './foldingRanges'; -import { SyntaxRangeProvider } from './syntaxRangeProvider'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { Emitter, Event } from 'vs/base/common/event'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { URI } from 'vs/base/common/uri'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { CancelablePromise, createCancelablePromise, Delayer, RunOnceScheduler } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { illegalArgument, onUnexpectedError } from '../../../../base/common/errors.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; +import { escapeRegExpCharacters } from '../../../../base/common/strings.js'; +import * as types from '../../../../base/common/types.js'; +import './folding.css'; +import { StableEditorScrollState } from '../../../browser/stableEditorScroll.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, registerInstantiatedEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { IRange } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution, ScrollType } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import { IModelContentChangedEvent } from '../../../common/textModelEvents.js'; +import { FoldingRange, FoldingRangeKind, FoldingRangeProvider } from '../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { CollapseMemento, FoldingModel, getNextFoldLine, getParentFoldLine as getParentFoldLine, getPreviousFoldLine, setCollapseStateAtLevel, setCollapseStateForMatchingLines, setCollapseStateForRest, setCollapseStateForType, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateUp, toggleCollapseState } from './foldingModel.js'; +import { HiddenRangeModel } from './hiddenRangeModel.js'; +import { IndentRangeProvider } from './indentRangeProvider.js'; +import * as nls from '../../../../nls.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { FoldingDecorationProvider } from './foldingDecorations.js'; +import { FoldingRegion, FoldingRegions, FoldRange, FoldSource, ILineRange } from './foldingRanges.js'; +import { SyntaxRangeProvider } from './syntaxRangeProvider.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IModelService } from '../../../common/services/model.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; const CONTEXT_FOLDING_ENABLED = new RawContextKey('foldingEnabled', false); @@ -1231,6 +1231,35 @@ class RemoveFoldRangeFromSelectionAction extends FoldingAction { } +class ToggleImportFoldAction extends FoldingAction { + + constructor() { + super({ + id: 'editor.toggleImportFold', + label: nls.localize('toggleImportFold.label', "Toggle Import Fold"), + alias: 'Toggle Import Fold', + precondition: CONTEXT_FOLDING_ENABLED, + kbOpts: { + kbExpr: EditorContextKeys.editorTextFocus, + weight: KeybindingWeight.EditorContrib + } + }); + } + + async invoke(foldingController: FoldingController, foldingModel: FoldingModel): Promise { + const regionsToToggle: FoldingRegion[] = []; + const regions = foldingModel.regions; + for (let i = regions.length - 1; i >= 0; i--) { + if (regions.getType(i) === FoldingRangeKind.Imports.value) { + regionsToToggle.push(regions.toRegion(i)); + } + } + foldingModel.toggleCollapseState(regionsToToggle); + foldingController.triggerFoldingModelChanged(); + } +} + + registerEditorContribution(FoldingController.ID, FoldingController, EditorContributionInstantiation.Eager); // eager because it uses `saveViewState`/`restoreViewState` registerEditorAction(UnfoldAction); registerEditorAction(UnFoldRecursivelyAction); @@ -1250,6 +1279,7 @@ registerEditorAction(GotoPreviousFoldAction); registerEditorAction(GotoNextFoldAction); registerEditorAction(FoldRangeFromSelectionAction); registerEditorAction(RemoveFoldRangeFromSelectionAction); +registerEditorAction(ToggleImportFoldAction); for (let i = 1; i <= 7; i++) { registerInstantiatedEditorAction( diff --git a/src/vs/editor/contrib/folding/browser/foldingDecorations.ts b/src/vs/editor/contrib/folding/browser/foldingDecorations.ts index 2350f9aad..821badb88 100644 --- a/src/vs/editor/contrib/folding/browser/foldingDecorations.ts +++ b/src/vs/editor/contrib/folding/browser/foldingDecorations.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IModelDecorationOptions, IModelDecorationsChangeAccessor, MinimapPosition, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { IDecorationProvider } from 'vs/editor/contrib/folding/browser/foldingModel'; -import { localize } from 'vs/nls'; -import { editorSelectionBackground, iconForeground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { themeColorFromId } from 'vs/platform/theme/common/themeService'; -import { ThemeIcon } from 'vs/base/common/themables'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IModelDecorationOptions, IModelDecorationsChangeAccessor, MinimapPosition, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { IDecorationProvider } from './foldingModel.js'; +import { localize } from '../../../../nls.js'; +import { editorSelectionBackground, iconForeground, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { themeColorFromId } from '../../../../platform/theme/common/themeService.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; const foldBackground = registerColor('editor.foldBackground', { light: transparent(editorSelectionBackground, 0.3), dark: transparent(editorSelectionBackground, 0.3), hcDark: null, hcLight: null }, localize('foldBackgroundBackground', "Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations."), true); registerColor('editor.foldPlaceholderForeground', { light: '#808080', dark: '#808080', hcDark: null, hcLight: null }, localize('collapsedTextColor', "Color of the collapsed text after the first line of a folded range.")); diff --git a/src/vs/editor/contrib/folding/browser/foldingModel.ts b/src/vs/editor/contrib/folding/browser/foldingModel.ts index 7b1c6253a..c77211636 100644 --- a/src/vs/editor/contrib/folding/browser/foldingModel.ts +++ b/src/vs/editor/contrib/folding/browser/foldingModel.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { IModelDecorationOptions, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; -import { FoldingRegion, FoldingRegions, ILineRange, FoldRange, FoldSource } from './foldingRanges'; -import { hash } from 'vs/base/common/hash'; -import { SelectedLines } from 'vs/editor/contrib/folding/browser/folding'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IModelDecorationOptions, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel } from '../../../common/model.js'; +import { FoldingRegion, FoldingRegions, ILineRange, FoldRange, FoldSource } from './foldingRanges.js'; +import { hash } from '../../../../base/common/hash.js'; +import { SelectedLines } from './folding.js'; export interface IDecorationProvider { getDecorationOption(isCollapsed: boolean, isHidden: boolean, isManual: boolean): IModelDecorationOptions; diff --git a/src/vs/editor/contrib/folding/browser/foldingRanges.ts b/src/vs/editor/contrib/folding/browser/foldingRanges.ts index 1220d0141..45291a36e 100644 --- a/src/vs/editor/contrib/folding/browser/foldingRanges.ts +++ b/src/vs/editor/contrib/folding/browser/foldingRanges.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SelectedLines } from 'vs/editor/contrib/folding/browser/folding'; +import { SelectedLines } from './folding.js'; export interface ILineRange { startLineNumber: number; diff --git a/src/vs/editor/contrib/folding/browser/hiddenRangeModel.ts b/src/vs/editor/contrib/folding/browser/hiddenRangeModel.ts index 6d72da790..9994afcb8 100644 --- a/src/vs/editor/contrib/folding/browser/hiddenRangeModel.ts +++ b/src/vs/editor/contrib/folding/browser/hiddenRangeModel.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findFirstIdxMonotonousOrArrLen } from 'vs/base/common/arraysFind'; - -import { Emitter, Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { countEOL } from 'vs/editor/common/core/eolCounter'; -import { FoldingModel } from 'vs/editor/contrib/folding/browser/foldingModel'; +import { findFirstIdxMonotonousOrArrLen } from '../../../../base/common/arraysFind.js'; + +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IModelContentChangedEvent } from '../../../common/textModelEvents.js'; +import { countEOL } from '../../../common/core/eolCounter.js'; +import { FoldingModel } from './foldingModel.js'; export class HiddenRangeModel { diff --git a/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts b/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts index de53762d4..e1bbe8a94 100644 --- a/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts +++ b/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ITextModel } from 'vs/editor/common/model'; -import { computeIndentLevel } from 'vs/editor/common/model/utils'; -import { FoldingMarkers } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { FoldingRegions, MAX_LINE_NUMBER } from 'vs/editor/contrib/folding/browser/foldingRanges'; -import { FoldingLimitReporter, RangeProvider } from './folding'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { ITextModel } from '../../../common/model.js'; +import { computeIndentLevel } from '../../../common/model/utils.js'; +import { FoldingMarkers } from '../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { FoldingRegions, MAX_LINE_NUMBER } from './foldingRanges.js'; +import { FoldingLimitReporter, RangeProvider } from './folding.js'; const MAX_FOLDING_REGIONS_FOR_INDENT_DEFAULT = 5000; diff --git a/src/vs/editor/contrib/folding/browser/syntaxRangeProvider.ts b/src/vs/editor/contrib/folding/browser/syntaxRangeProvider.ts index 49e03d708..97fa12bb6 100644 --- a/src/vs/editor/contrib/folding/browser/syntaxRangeProvider.ts +++ b/src/vs/editor/contrib/folding/browser/syntaxRangeProvider.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ITextModel } from 'vs/editor/common/model'; -import { FoldingContext, FoldingRange, FoldingRangeProvider } from 'vs/editor/common/languages'; -import { FoldingLimitReporter, RangeProvider } from './folding'; -import { FoldingRegions, MAX_LINE_NUMBER } from './foldingRanges'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ITextModel } from '../../../common/model.js'; +import { FoldingContext, FoldingRange, FoldingRangeProvider } from '../../../common/languages.js'; +import { FoldingLimitReporter, RangeProvider } from './folding.js'; +import { FoldingRegions, MAX_LINE_NUMBER } from './foldingRanges.js'; export interface IFoldingRangeData extends FoldingRange { rank: number; diff --git a/src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts b/src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts index f33f67b3f..0a498e74f 100644 --- a/src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IModelDecorationsChangeAccessor, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { toSelectedLines } from 'vs/editor/contrib/folding/browser/folding'; -import { FoldingModel, getNextFoldLine, getParentFoldLine, getPreviousFoldLine, setCollapseStateAtLevel, setCollapseStateForMatchingLines, setCollapseStateForRest, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateUp } from 'vs/editor/contrib/folding/browser/foldingModel'; -import { FoldingRegion } from 'vs/editor/contrib/folding/browser/foldingRanges'; -import { computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { escapeRegExpCharacters } from '../../../../../base/common/strings.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { EditOperation } from '../../../../common/core/editOperation.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { IModelDecorationsChangeAccessor, ITextModel, TrackedRangeStickiness } from '../../../../common/model.js'; +import { ModelDecorationOptions } from '../../../../common/model/textModel.js'; +import { toSelectedLines } from '../../browser/folding.js'; +import { FoldingModel, getNextFoldLine, getParentFoldLine, getPreviousFoldLine, setCollapseStateAtLevel, setCollapseStateForMatchingLines, setCollapseStateForRest, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateUp } from '../../browser/foldingModel.js'; +import { FoldingRegion } from '../../browser/foldingRanges.js'; +import { computeRanges } from '../../browser/indentRangeProvider.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; interface ExpectedRegion { diff --git a/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts b/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts index a1a6dbe1d..02876c26a 100644 --- a/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { FoldingMarkers } from 'vs/editor/common/languages/languageConfiguration'; -import { MAX_FOLDING_REGIONS, FoldRange, FoldingRegions, FoldSource } from 'vs/editor/contrib/folding/browser/foldingRanges'; -import { RangesCollector, computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { FoldingMarkers } from '../../../../common/languages/languageConfiguration.js'; +import { MAX_FOLDING_REGIONS, FoldRange, FoldingRegions, FoldSource } from '../../browser/foldingRanges.js'; +import { RangesCollector, computeRanges } from '../../browser/indentRangeProvider.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; const markers: FoldingMarkers = { start: /^#region$/, diff --git a/src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.test.ts b/src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.test.ts index 6d57dec4e..6570dfe84 100644 --- a/src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.test.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IRange } from 'vs/editor/common/core/range'; -import { FoldingModel } from 'vs/editor/contrib/folding/browser/foldingModel'; -import { HiddenRangeModel } from 'vs/editor/contrib/folding/browser/hiddenRangeModel'; -import { computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestDecorationProvider } from './foldingModel.test'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { IRange } from '../../../../common/core/range.js'; +import { FoldingModel } from '../../browser/foldingModel.js'; +import { HiddenRangeModel } from '../../browser/hiddenRangeModel.js'; +import { computeRanges } from '../../browser/indentRangeProvider.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { TestDecorationProvider } from './foldingModel.test.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; interface ExpectedRange { diff --git a/src/vs/editor/contrib/folding/test/browser/indentFold.test.ts b/src/vs/editor/contrib/folding/test/browser/indentFold.test.ts index 25db0e6d1..ebbe98420 100644 --- a/src/vs/editor/contrib/folding/test/browser/indentFold.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/indentFold.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { computeRanges } from '../../browser/indentRangeProvider.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; interface IndentRange { start: number; diff --git a/src/vs/editor/contrib/folding/test/browser/indentRangeProvider.test.ts b/src/vs/editor/contrib/folding/test/browser/indentRangeProvider.test.ts index 837dd6c0b..70d3c5897 100644 --- a/src/vs/editor/contrib/folding/test/browser/indentRangeProvider.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/indentRangeProvider.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { FoldingMarkers } from 'vs/editor/common/languages/languageConfiguration'; -import { computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { FoldingMarkers } from '../../../../common/languages/languageConfiguration.js'; +import { computeRanges } from '../../browser/indentRangeProvider.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; interface ExpectedIndentRange { startLineNumber: number; diff --git a/src/vs/editor/contrib/folding/test/browser/syntaxFold.test.ts b/src/vs/editor/contrib/folding/test/browser/syntaxFold.test.ts index 3b2bdb064..22387ee2f 100644 --- a/src/vs/editor/contrib/folding/test/browser/syntaxFold.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/syntaxFold.test.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ITextModel } from 'vs/editor/common/model'; -import { FoldingContext, FoldingRange, FoldingRangeProvider, ProviderResult } from 'vs/editor/common/languages'; -import { SyntaxRangeProvider } from 'vs/editor/contrib/folding/browser/syntaxRangeProvider'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { FoldingLimitReporter } from 'vs/editor/contrib/folding/browser/folding'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { ITextModel } from '../../../../common/model.js'; +import { FoldingContext, FoldingRange, FoldingRangeProvider, ProviderResult } from '../../../../common/languages.js'; +import { SyntaxRangeProvider } from '../../browser/syntaxRangeProvider.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { FoldingLimitReporter } from '../../browser/folding.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; interface IndentRange { start: number; diff --git a/src/vs/editor/contrib/fontZoom/browser/fontZoom.ts b/src/vs/editor/contrib/fontZoom/browser/fontZoom.ts index bdbf98045..8093cfb91 100644 --- a/src/vs/editor/contrib/fontZoom/browser/fontZoom.ts +++ b/src/vs/editor/contrib/fontZoom/browser/fontZoom.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorZoom } from 'vs/editor/common/config/editorZoom'; -import * as nls from 'vs/nls'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorZoom } from '../../../common/config/editorZoom.js'; +import * as nls from '../../../../nls.js'; class EditorFontZoomIn extends EditorAction { diff --git a/src/vs/editor/contrib/format/browser/format.ts b/src/vs/editor/contrib/format/browser/format.ts index bb449bb79..586663691 100644 --- a/src/vs/editor/contrib/format/browser/format.ts +++ b/src/vs/editor/contrib/format/browser/format.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asArray, isNonEmptyArray } from 'vs/base/common/arrays'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Iterable } from 'vs/base/common/iterator'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource, TextModelCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { IActiveCodeEditor, isCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, FormattingOptions, TextEdit } from 'vs/editor/common/languages'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { FormattingEdit } from 'vs/editor/contrib/format/browser/formattingEdit'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ExtensionIdentifierSet } from 'vs/platform/extensions/common/extensions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IProgress } from 'vs/platform/progress/common/progress'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; +import { asArray, isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { Iterable } from '../../../../base/common/iterator.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../../base/common/linkedList.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource, TextModelCancellationTokenSource } from '../../editorState/browser/editorState.js'; +import { IActiveCodeEditor, isCodeEditor } from '../../../browser/editorBrowser.js'; +import { ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, FormattingOptions, TextEdit } from '../../../common/languages.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { FormattingEdit } from './formattingEdit.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { ExtensionIdentifierSet } from '../../../../platform/extensions/common/extensions.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IProgress } from '../../../../platform/progress/common/progress.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; export function getRealAndSyntheticDocumentFormattersOrdered( documentFormattingEditProvider: LanguageFeatureRegistry, diff --git a/src/vs/editor/contrib/format/browser/formatActions.ts b/src/vs/editor/contrib/format/browser/formatActions.ts index 1f345ac53..6f43b2ddc 100644 --- a/src/vs/editor/contrib/format/browser/formatActions.ts +++ b/src/vs/editor/contrib/format/browser/formatActions.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CharacterSet } from 'vs/editor/common/core/characterClassifier'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { formatDocumentRangesWithSelectedProvider, formatDocumentWithSelectedProvider, FormattingMode, getOnTypeFormattingEdits } from 'vs/editor/contrib/format/browser/format'; -import { FormattingEdit } from 'vs/editor/contrib/format/browser/formattingEdit'; -import * as nls from 'vs/nls'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IEditorProgressService, Progress } from 'vs/platform/progress/common/progress'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CharacterSet } from '../../../common/core/characterClassifier.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { formatDocumentRangesWithSelectedProvider, formatDocumentWithSelectedProvider, FormattingMode, getOnTypeFormattingEdits } from './format.js'; +import { FormattingEdit } from './formattingEdit.js'; +import * as nls from '../../../../nls.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IEditorProgressService, Progress } from '../../../../platform/progress/common/progress.js'; export class FormatOnType implements IEditorContribution { diff --git a/src/vs/editor/contrib/format/browser/formattingEdit.ts b/src/vs/editor/contrib/format/browser/formattingEdit.ts index 2f4a830a5..e2d0dacda 100644 --- a/src/vs/editor/contrib/format/browser/formattingEdit.ts +++ b/src/vs/editor/contrib/format/browser/formattingEdit.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { EndOfLineSequence } from 'vs/editor/common/model'; -import { TextEdit } from 'vs/editor/common/languages'; -import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { EndOfLineSequence } from '../../../common/model.js'; +import { TextEdit } from '../../../common/languages.js'; +import { StableEditorScrollState } from '../../../browser/stableEditorScroll.js'; export class FormattingEdit { diff --git a/src/vs/editor/contrib/gotoError/browser/gotoError.ts b/src/vs/editor/contrib/gotoError/browser/gotoError.ts index ae9c8eceb..1dc7c5833 100644 --- a/src/vs/editor/contrib/gotoError/browser/gotoError.ts +++ b/src/vs/editor/contrib/gotoError/browser/gotoError.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IMarkerNavigationService, MarkerList } from 'vs/editor/contrib/gotoError/browser/markerNavigationService'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { TextEditorSelectionRevealType } from 'vs/platform/editor/common/editor'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IMarker } from 'vs/platform/markers/common/markers'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { MarkerNavigationWidget } from './gotoErrorWidget'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { IMarkerNavigationService, MarkerList } from './markerNavigationService.js'; +import * as nls from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { TextEditorSelectionRevealType } from '../../../../platform/editor/common/editor.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IMarker } from '../../../../platform/markers/common/markers.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { MarkerNavigationWidget } from './gotoErrorWidget.js'; export class MarkerController implements IEditorContribution { diff --git a/src/vs/editor/contrib/gotoError/browser/gotoErrorWidget.ts b/src/vs/editor/contrib/gotoError/browser/gotoErrorWidget.ts index cf0e5c7d6..b757cfd5d 100644 --- a/src/vs/editor/contrib/gotoError/browser/gotoErrorWidget.ts +++ b/src/vs/editor/contrib/gotoError/browser/gotoErrorWidget.ts @@ -3,33 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { IAction } from 'vs/base/common/actions'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import { basename } from 'vs/base/common/resources'; -import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { splitLines } from 'vs/base/common/strings'; -import 'vs/css!./media/gotoErrorWidget'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { peekViewTitleForeground, peekViewTitleInfoForeground, PeekViewWidget } from 'vs/editor/contrib/peekView/browser/peekView'; -import * as nls from 'vs/nls'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IMarker, IRelatedInformation, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { SeverityIcon } from 'vs/platform/severityIcon/browser/severityIcon'; -import { contrastBorder, editorBackground, editorErrorBorder, editorErrorForeground, editorInfoBorder, editorInfoForeground, editorWarningBorder, editorWarningForeground, oneOf, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; +import * as dom from '../../../../base/browser/dom.js'; +import { ScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { IAction } from '../../../../base/common/actions.js'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { Color } from '../../../../base/common/color.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore, dispose } from '../../../../base/common/lifecycle.js'; +import { basename } from '../../../../base/common/resources.js'; +import { ScrollbarVisibility } from '../../../../base/common/scrollable.js'; +import { splitLines } from '../../../../base/common/strings.js'; +import './media/gotoErrorWidget.css'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { peekViewTitleForeground, peekViewTitleInfoForeground, PeekViewWidget } from '../../peekView/browser/peekView.js'; +import * as nls from '../../../../nls.js'; +import { createAndFillInActionBarActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IMenuService, MenuId } from '../../../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ILabelService } from '../../../../platform/label/common/label.js'; +import { IMarker, IRelatedInformation, MarkerSeverity } from '../../../../platform/markers/common/markers.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { SeverityIcon } from '../../../../platform/severityIcon/browser/severityIcon.js'; +import { contrastBorder, editorBackground, editorErrorBorder, editorErrorForeground, editorInfoBorder, editorInfoForeground, editorWarningBorder, editorWarningForeground, oneOf, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js'; +import { IColorTheme, IThemeService } from '../../../../platform/theme/common/themeService.js'; class MessageWidget { diff --git a/src/vs/editor/contrib/gotoError/browser/markerNavigationService.ts b/src/vs/editor/contrib/gotoError/browser/markerNavigationService.ts index 1162ef145..61b92a3e8 100644 --- a/src/vs/editor/contrib/gotoError/browser/markerNavigationService.ts +++ b/src/vs/editor/contrib/gotoError/browser/markerNavigationService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { binarySearch } from 'vs/base/common/arrays'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { compare } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IMarker, IMarkerService, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { binarySearch } from '../../../../base/common/arrays.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../../base/common/linkedList.js'; +import { compare } from '../../../../base/common/strings.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { ITextModel } from '../../../common/model.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; +import { IMarker, IMarkerService, MarkerSeverity } from '../../../../platform/markers/common/markers.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; export class MarkerCoordinate { constructor( diff --git a/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts b/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts index 63541f547..b48cef691 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { createCancelablePromise, raceCancellation } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { IActiveCodeEditor, ICodeEditor, isCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction2, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { EditorOption, GoToLocationValues } from 'vs/editor/common/config/editorOptions'; -import * as corePosition from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import { isLocationLink, Location, LocationLink } from 'vs/editor/common/languages'; -import { ReferencesController } from 'vs/editor/contrib/gotoSymbol/browser/peek/referencesController'; -import { ReferencesModel } from 'vs/editor/contrib/gotoSymbol/browser/referencesModel'; -import { ISymbolNavigationService } from 'vs/editor/contrib/gotoSymbol/browser/symbolNavigation'; -import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; -import { PeekContext } from 'vs/editor/contrib/peekView/browser/peekView'; -import * as nls from 'vs/nls'; -import { IAction2F1RequiredOptions, IAction2Options, ISubmenuItem, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { TextEditorSelectionRevealType, TextEditorSelectionSource } from 'vs/platform/editor/common/editor'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { getDeclarationsAtPosition, getDefinitionsAtPosition, getImplementationsAtPosition, getReferencesAtPosition, getTypeDefinitionsAtPosition } from './goToSymbol'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { Iterable } from 'vs/base/common/iterator'; -import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { createCancelablePromise, raceCancellation } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from '../../editorState/browser/editorState.js'; +import { IActiveCodeEditor, ICodeEditor, isCodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction2, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { EditorOption, GoToLocationValues } from '../../../common/config/editorOptions.js'; +import * as corePosition from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import { isLocationLink, Location, LocationLink } from '../../../common/languages.js'; +import { ReferencesController } from './peek/referencesController.js'; +import { ReferencesModel } from './referencesModel.js'; +import { ISymbolNavigationService } from './symbolNavigation.js'; +import { MessageController } from '../../message/browser/messageController.js'; +import { PeekContext } from '../../peekView/browser/peekView.js'; +import * as nls from '../../../../nls.js'; +import { IAction2F1RequiredOptions, IAction2Options, ISubmenuItem, MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { TextEditorSelectionRevealType, TextEditorSelectionSource } from '../../../../platform/editor/common/editor.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IEditorProgressService } from '../../../../platform/progress/common/progress.js'; +import { getDeclarationsAtPosition, getDefinitionsAtPosition, getImplementationsAtPosition, getReferencesAtPosition, getTypeDefinitionsAtPosition } from './goToSymbol.js'; +import { IWordAtPosition } from '../../../common/core/wordHelper.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { Iterable } from '../../../../base/common/iterator.js'; +import { IsWebContext } from '../../../../platform/contextkey/common/contextkeys.js'; MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextPeek, diff --git a/src/vs/editor/contrib/gotoSymbol/browser/goToSymbol.ts b/src/vs/editor/contrib/gotoSymbol/browser/goToSymbol.ts index 1477a3940..c76e80dbd 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/goToSymbol.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/goToSymbol.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { matchesSomeScheme, Schemas } from 'vs/base/common/network'; -import { registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DeclarationProvider, DefinitionProvider, ImplementationProvider, LocationLink, ProviderResult, ReferenceProvider, TypeDefinitionProvider } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ReferencesModel } from 'vs/editor/contrib/gotoSymbol/browser/referencesModel'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { matchesSomeScheme, Schemas } from '../../../../base/common/network.js'; +import { registerModelAndPositionCommand } from '../../../browser/editorExtensions.js'; +import { Position } from '../../../common/core/position.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { DeclarationProvider, DefinitionProvider, ImplementationProvider, LocationLink, ProviderResult, ReferenceProvider, TypeDefinitionProvider } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ReferencesModel } from './referencesModel.js'; function shouldIncludeLocationLink(sourceModel: ITextModel, loc: LocationLink): boolean { // Always allow the location if the request comes from a document with the same scheme. diff --git a/src/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.ts b/src/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.ts index 2e74af467..fb7ab9003 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { Emitter, Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import { ICodeEditor, IEditorMouseEvent, IMouseTarget } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; +import { IKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { KeyCode } from '../../../../../base/common/keyCodes.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import * as platform from '../../../../../base/common/platform.js'; +import { ICodeEditor, IEditorMouseEvent, IMouseTarget } from '../../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { ICursorSelectionChangedEvent } from '../../../../common/cursorEvents.js'; function hasModifier(e: { ctrlKey: boolean; shiftKey: boolean; altKey: boolean; metaKey: boolean }, modifier: 'ctrlKey' | 'shiftKey' | 'altKey' | 'metaKey'): boolean { return !!e[modifier]; diff --git a/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts b/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts index 097de76f7..6f6f8323e 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import 'vs/css!./goToDefinitionAtPosition'; -import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; -import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { IEditorContribution, IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; -import { IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; -import { LocationLink } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { ClickLinkGesture, ClickLinkKeyboardEvent, ClickLinkMouseEvent } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; -import { PeekContext } from 'vs/editor/contrib/peekView/browser/peekView'; -import * as nls from 'vs/nls'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { DefinitionAction } from '../goToCommands'; -import { getDefinitionsAtPosition } from '../goToSymbol'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ModelDecorationInjectedTextOptions } from 'vs/editor/common/model/textModel'; +import { IKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js'; +import { CancelablePromise, createCancelablePromise } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../../base/common/errors.js'; +import { MarkdownString } from '../../../../../base/common/htmlContent.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import './goToDefinitionAtPosition.css'; +import { CodeEditorStateFlag, EditorState } from '../../../editorState/browser/editorState.js'; +import { ICodeEditor, MouseTargetType } from '../../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Position } from '../../../../common/core/position.js'; +import { IRange, Range } from '../../../../common/core/range.js'; +import { IEditorContribution, IEditorDecorationsCollection } from '../../../../common/editorCommon.js'; +import { IModelDeltaDecoration, ITextModel } from '../../../../common/model.js'; +import { LocationLink } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ITextModelService } from '../../../../common/services/resolverService.js'; +import { ClickLinkGesture, ClickLinkKeyboardEvent, ClickLinkMouseEvent } from './clickLinkGesture.js'; +import { PeekContext } from '../../../peekView/browser/peekView.js'; +import * as nls from '../../../../../nls.js'; +import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js'; +import { DefinitionAction } from '../goToCommands.js'; +import { getDefinitionsAtPosition } from '../goToSymbol.js'; +import { IWordAtPosition } from '../../../../common/core/wordHelper.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { ModelDecorationInjectedTextOptions } from '../../../../common/model/textModel.js'; export class GotoDefinitionAtPositionEditorContribution implements IEditorContribution { diff --git a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.ts b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.ts index e7691080b..175e4c8b4 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { Location } from 'vs/editor/common/languages'; -import { getOuterEditor, PeekContext } from 'vs/editor/contrib/peekView/browser/peekView'; -import * as nls from 'vs/nls'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { TextEditorSelectionSource } from 'vs/platform/editor/common/editor'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IListService, WorkbenchListFocusContextKey, WorkbenchTreeElementCanCollapse, WorkbenchTreeElementCanExpand } from 'vs/platform/list/browser/listService'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { OneReference, ReferencesModel } from '../referencesModel'; -import { LayoutData, ReferenceWidget } from './referencesWidget'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { InputFocusedContext } from 'vs/platform/contextkey/common/contextkeys'; +import { CancelablePromise, createCancelablePromise } from '../../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../../base/common/errors.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { ICodeEditorService } from '../../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { IEditorContribution } from '../../../../common/editorCommon.js'; +import { Location } from '../../../../common/languages.js'; +import { getOuterEditor, PeekContext } from '../../../peekView/browser/peekView.js'; +import * as nls from '../../../../../nls.js'; +import { CommandsRegistry } from '../../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from '../../../../../platform/contextkey/common/contextkey.js'; +import { TextEditorSelectionSource } from '../../../../../platform/editor/common/editor.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IListService, WorkbenchListFocusContextKey, WorkbenchTreeElementCanCollapse, WorkbenchTreeElementCanExpand } from '../../../../../platform/list/browser/listService.js'; +import { INotificationService } from '../../../../../platform/notification/common/notification.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../../platform/storage/common/storage.js'; +import { OneReference, ReferencesModel } from '../referencesModel.js'; +import { LayoutData, ReferenceWidget } from './referencesWidget.js'; +import { EditorContextKeys } from '../../../../common/editorContextKeys.js'; +import { InputFocusedContext } from '../../../../../platform/contextkey/common/contextkeys.js'; export const ctxReferenceSearchVisible = new RawContextKey('referenceSearchVisible', false, nls.localize('referenceSearchVisible', "Whether reference peek is visible, like 'Peek References' or 'Peek Definition'")); diff --git a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.ts b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.ts index bb76dd67d..15e550cfc 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge'; -import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; -import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; -import { IIdentityProvider, IKeyboardNavigationLabelProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; -import { IAsyncDataSource, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; -import { createMatches, FuzzyScore, IMatch } from 'vs/base/common/filters'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { basename, dirname } from 'vs/base/common/resources'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { defaultCountBadgeStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { FileReferences, OneReference, ReferencesModel } from '../referencesModel'; +import * as dom from '../../../../../base/browser/dom.js'; +import { IKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js'; +import { CountBadge } from '../../../../../base/browser/ui/countBadge/countBadge.js'; +import { HighlightedLabel } from '../../../../../base/browser/ui/highlightedlabel/highlightedLabel.js'; +import { IconLabel } from '../../../../../base/browser/ui/iconLabel/iconLabel.js'; +import { IIdentityProvider, IKeyboardNavigationLabelProvider, IListVirtualDelegate } from '../../../../../base/browser/ui/list/list.js'; +import { IListAccessibilityProvider } from '../../../../../base/browser/ui/list/listWidget.js'; +import { IAsyncDataSource, ITreeNode, ITreeRenderer } from '../../../../../base/browser/ui/tree/tree.js'; +import { createMatches, FuzzyScore, IMatch } from '../../../../../base/common/filters.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { basename, dirname } from '../../../../../base/common/resources.js'; +import { ITextModelService } from '../../../../common/services/resolverService.js'; +import { localize } from '../../../../../nls.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { defaultCountBadgeStyles } from '../../../../../platform/theme/browser/defaultStyles.js'; +import { FileReferences, OneReference, ReferencesModel } from '../referencesModel.js'; //#region data source diff --git a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts index 977e68ec2..fce167fb0 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts @@ -3,37 +3,37 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IMouseEvent } from 'vs/base/browser/mouseEvent'; -import { Orientation } from 'vs/base/browser/ui/sash/sash'; -import { Sizing, SplitView } from 'vs/base/browser/ui/splitview/splitview'; -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { FuzzyScore } from 'vs/base/common/filters'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { DisposableStore, dispose, IDisposable, IReference } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { basenameOrAuthority, dirname } from 'vs/base/common/resources'; -import 'vs/css!./referencesWidget'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { IModelDeltaDecoration, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions, TextModel } from 'vs/editor/common/model/textModel'; -import { Location } from 'vs/editor/common/languages'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ITextEditorModel, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { AccessibilityProvider, DataSource, Delegate, FileReferencesRenderer, IdentityProvider, OneReferenceRenderer, StringRepresentationProvider, TreeElement } from 'vs/editor/contrib/gotoSymbol/browser/peek/referencesTree'; -import * as peekView from 'vs/editor/contrib/peekView/browser/peekView'; -import * as nls from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IWorkbenchAsyncDataTreeOptions, WorkbenchAsyncDataTree } from 'vs/platform/list/browser/listService'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; -import { FileReferences, OneReference, ReferencesModel } from '../referencesModel'; +import * as dom from '../../../../../base/browser/dom.js'; +import { IMouseEvent } from '../../../../../base/browser/mouseEvent.js'; +import { Orientation } from '../../../../../base/browser/ui/sash/sash.js'; +import { Sizing, SplitView } from '../../../../../base/browser/ui/splitview/splitview.js'; +import { Color } from '../../../../../base/common/color.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { FuzzyScore } from '../../../../../base/common/filters.js'; +import { KeyCode } from '../../../../../base/common/keyCodes.js'; +import { DisposableStore, dispose, IDisposable, IReference } from '../../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../../base/common/network.js'; +import { basenameOrAuthority, dirname } from '../../../../../base/common/resources.js'; +import './referencesWidget.css'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EmbeddedCodeEditorWidget } from '../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { IEditorOptions } from '../../../../common/config/editorOptions.js'; +import { IRange, Range } from '../../../../common/core/range.js'; +import { ScrollType } from '../../../../common/editorCommon.js'; +import { IModelDeltaDecoration, TrackedRangeStickiness } from '../../../../common/model.js'; +import { ModelDecorationOptions, TextModel } from '../../../../common/model/textModel.js'; +import { Location } from '../../../../common/languages.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../../common/languages/modesRegistry.js'; +import { ITextEditorModel, ITextModelService } from '../../../../common/services/resolverService.js'; +import { AccessibilityProvider, DataSource, Delegate, FileReferencesRenderer, IdentityProvider, OneReferenceRenderer, StringRepresentationProvider, TreeElement } from './referencesTree.js'; +import * as peekView from '../../../peekView/browser/peekView.js'; +import * as nls from '../../../../../nls.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { IWorkbenchAsyncDataTreeOptions, WorkbenchAsyncDataTree } from '../../../../../platform/list/browser/listService.js'; +import { IColorTheme, IThemeService } from '../../../../../platform/theme/common/themeService.js'; +import { FileReferences, OneReference, ReferencesModel } from '../referencesModel.js'; class DecorationsManager implements IDisposable { diff --git a/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts b/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts index 9b52c88ae..6248ead09 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IMatch } from 'vs/base/common/filters'; -import { defaultGenerator } from 'vs/base/common/idGenerator'; -import { dispose, IDisposable, IReference } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { basename, extUri } from 'vs/base/common/resources'; -import * as strings from 'vs/base/common/strings'; -import { Constants } from 'vs/base/common/uint'; -import { URI } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Location, LocationLink } from 'vs/editor/common/languages'; -import { ITextEditorModel, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { localize } from 'vs/nls'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IMatch } from '../../../../base/common/filters.js'; +import { defaultGenerator } from '../../../../base/common/idGenerator.js'; +import { dispose, IDisposable, IReference } from '../../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../../base/common/map.js'; +import { basename, extUri } from '../../../../base/common/resources.js'; +import * as strings from '../../../../base/common/strings.js'; +import { Constants } from '../../../../base/common/uint.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { Location, LocationLink } from '../../../common/languages.js'; +import { ITextEditorModel, ITextModelService } from '../../../common/services/resolverService.js'; +import { localize } from '../../../../nls.js'; export class OneReference { diff --git a/src/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.ts b/src/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.ts index 2c7046f3d..e02392bda 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { combinedDisposable, DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, registerEditorCommand } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { Range } from 'vs/editor/common/core/range'; -import { OneReference, ReferencesModel } from 'vs/editor/contrib/gotoSymbol/browser/referencesModel'; -import { localize } from 'vs/nls'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { TextEditorSelectionRevealType } from 'vs/platform/editor/common/editor'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { INotificationService } from 'vs/platform/notification/common/notification'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { combinedDisposable, DisposableStore, dispose, IDisposable } from '../../../../base/common/lifecycle.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorCommand, registerEditorCommand } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { Range } from '../../../common/core/range.js'; +import { OneReference, ReferencesModel } from './referencesModel.js'; +import { localize } from '../../../../nls.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { TextEditorSelectionRevealType } from '../../../../platform/editor/common/editor.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { createDecorator, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; export const ctxHasSymbols = new RawContextKey('hasSymbols', false, localize('hasSymbols', "Whether there are symbol locations that can be navigated via keyboard-only.")); diff --git a/src/vs/editor/contrib/gotoSymbol/test/browser/referencesModel.test.ts b/src/vs/editor/contrib/gotoSymbol/test/browser/referencesModel.test.ts index a547f9450..58e292823 100644 --- a/src/vs/editor/contrib/gotoSymbol/test/browser/referencesModel.test.ts +++ b/src/vs/editor/contrib/gotoSymbol/test/browser/referencesModel.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ReferencesModel } from 'vs/editor/contrib/gotoSymbol/browser/referencesModel'; +import { URI } from '../../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { ReferencesModel } from '../../browser/referencesModel.js'; suite('references', function () { diff --git a/src/vs/editor/contrib/gpu/browser/gpuActions.ts b/src/vs/editor/contrib/gpu/browser/gpuActions.ts new file mode 100644 index 000000000..e029dd363 --- /dev/null +++ b/src/vs/editor/contrib/gpu/browser/gpuActions.ts @@ -0,0 +1,145 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { URI } from '../../../../base/common/uri.js'; +import { localize } from '../../../../nls.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; +import type { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, registerEditorAction, type ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ensureNonNullable } from '../../../browser/gpu/gpuUtils.js'; +import { GlyphRasterizer } from '../../../browser/gpu/raster/glyphRasterizer.js'; +import { ViewGpuContext } from '../../../browser/gpu/viewGpuContext.js'; + +class DebugEditorGpuRendererAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.debugEditorGpuRenderer', + label: localize('gpuDebug.label', "Developer: Debug Editor GPU Renderer"), + alias: 'Developer: Debug Editor GPU Renderer', + // TODO: Why doesn't `ContextKeyExpr.equals('config:editor.experimentalGpuAcceleration', 'on')` work? + precondition: ContextKeyExpr.true(), + }); + } + + async run(accessor: ServicesAccessor, editor: ICodeEditor): Promise { + const instantiationService = accessor.get(IInstantiationService); + const quickInputService = accessor.get(IQuickInputService); + const choice = await quickInputService.pick([ + { + label: localize('logTextureAtlasStats.label', "Log Texture Atlas Stats"), + id: 'logTextureAtlasStats', + }, + { + label: localize('saveTextureAtlas.label', "Save Texture Atlas"), + id: 'saveTextureAtlas', + }, + { + label: localize('drawGlyph.label', "Draw Glyph"), + id: 'drawGlyph', + }, + ], { canPickMany: false }); + if (!choice) { + return; + } + switch (choice.id) { + case 'logTextureAtlasStats': + instantiationService.invokeFunction(accessor => { + const logService = accessor.get(ILogService); + + const atlas = ViewGpuContext.atlas; + if (!ViewGpuContext.atlas) { + logService.error('No texture atlas found'); + return; + } + + const stats = atlas.getStats(); + logService.info(['Texture atlas stats', ...stats].join('\n\n')); + }); + break; + case 'saveTextureAtlas': + instantiationService.invokeFunction(async accessor => { + const workspaceContextService = accessor.get(IWorkspaceContextService); + const fileService = accessor.get(IFileService); + const folders = workspaceContextService.getWorkspace().folders; + if (folders.length > 0) { + const atlas = ViewGpuContext.atlas; + const promises = []; + for (const [layerIndex, page] of atlas.pages.entries()) { + promises.push(...[ + fileService.writeFile( + URI.joinPath(folders[0].uri, `textureAtlasPage${layerIndex}_actual.png`), + VSBuffer.wrap(new Uint8Array(await (await page.source.convertToBlob()).arrayBuffer())) + ), + fileService.writeFile( + URI.joinPath(folders[0].uri, `textureAtlasPage${layerIndex}_usage.png`), + VSBuffer.wrap(new Uint8Array(await (await page.getUsagePreview()).arrayBuffer())) + ), + ]); + } + await Promise.all(promises); + } + }); + break; + case 'drawGlyph': + instantiationService.invokeFunction(async accessor => { + const configurationService = accessor.get(IConfigurationService); + const fileService = accessor.get(IFileService); + const quickInputService = accessor.get(IQuickInputService); + const workspaceContextService = accessor.get(IWorkspaceContextService); + + const folders = workspaceContextService.getWorkspace().folders; + if (folders.length === 0) { + return; + } + + const atlas = ViewGpuContext.atlas; + const fontFamily = configurationService.getValue('editor.fontFamily'); + const fontSize = configurationService.getValue('editor.fontSize'); + const rasterizer = new GlyphRasterizer(fontSize, fontFamily); + let chars = await quickInputService.input({ + prompt: 'Enter a character to draw (prefix with 0x for code point))' + }); + if (!chars) { + return; + } + const codePoint = chars.match(/0x(?[0-9a-f]+)/i)?.groups?.codePoint; + if (codePoint !== undefined) { + chars = String.fromCodePoint(parseInt(codePoint, 16)); + } + const metadata = 0; + const rasterizedGlyph = atlas.getGlyph(rasterizer, chars, metadata); + if (!rasterizedGlyph) { + return; + } + const imageData = atlas.pages[rasterizedGlyph.pageIndex].source.getContext('2d')?.getImageData( + rasterizedGlyph.x, + rasterizedGlyph.y, + rasterizedGlyph.w, + rasterizedGlyph.h + ); + if (!imageData) { + return; + } + const canvas = new OffscreenCanvas(imageData.width, imageData.height); + const ctx = ensureNonNullable(canvas.getContext('2d')); + ctx.putImageData(imageData, 0, 0); + const blob = await canvas.convertToBlob({ type: 'image/png' }); + const resource = URI.joinPath(folders[0].uri, `glyph_${chars}_${metadata}_${fontSize}px_${fontFamily.replaceAll(/[,\\\/\.'\s]/g, '_')}.png`); + await fileService.writeFile(resource, VSBuffer.wrap(new Uint8Array(await blob.arrayBuffer()))); + }); + break; + } + } +} + +registerEditorAction(DebugEditorGpuRendererAction); diff --git a/src/vs/editor/contrib/hover/browser/contentHoverComputer.ts b/src/vs/editor/contrib/hover/browser/contentHoverComputer.ts index d5d0e6c85..c24cc1607 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverComputer.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverComputer.ts @@ -3,31 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IModelDecoration } from 'vs/editor/common/model'; -import { HoverStartSource, IHoverComputer } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { AsyncIterableObject } from 'vs/base/common/async'; - -export class ContentHoverComputer implements IHoverComputer { - - private _anchor: HoverAnchor | null = null; - public get anchor(): HoverAnchor | null { return this._anchor; } - public set anchor(value: HoverAnchor | null) { this._anchor = value; } - - private _shouldFocus: boolean = false; - public get shouldFocus(): boolean { return this._shouldFocus; } - public set shouldFocus(value: boolean) { this._shouldFocus = value; } - - private _source: HoverStartSource = HoverStartSource.Mouse; - public get source(): HoverStartSource { return this._source; } - public set source(value: HoverStartSource) { this._source = value; } +import { coalesce } from '../../../../base/common/arrays.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IActiveCodeEditor, ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IModelDecoration } from '../../../common/model.js'; +import { HoverStartSource, IHoverComputer } from './hoverOperation.js'; +import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IHoverPart } from './hoverTypes.js'; +import { AsyncIterableObject } from '../../../../base/common/async.js'; + +export interface ContentHoverComputerOptions { + shouldFocus: boolean; + anchor: HoverAnchor; + source: HoverStartSource; + insistOnKeepingHoverVisible: boolean; +} - private _insistOnKeepingHoverVisible: boolean = false; - public get insistOnKeepingHoverVisible(): boolean { return this._insistOnKeepingHoverVisible; } - public set insistOnKeepingHoverVisible(value: boolean) { this._insistOnKeepingHoverVisible = value; } +export class ContentHoverComputer implements IHoverComputer { constructor( private readonly _editor: ICodeEditor, @@ -73,8 +64,8 @@ export class ContentHoverComputer implements IHoverComputer { }); } - public computeAsync(token: CancellationToken): AsyncIterableObject { - const anchor = this._anchor; + public computeAsync(options: ContentHoverComputerOptions, token: CancellationToken): AsyncIterableObject { + const anchor = options.anchor; if (!this._editor.hasModel() || !anchor) { return AsyncIterableObject.EMPTY; @@ -92,16 +83,17 @@ export class ContentHoverComputer implements IHoverComputer { ); } - public computeSync(): IHoverPart[] { - if (!this._editor.hasModel() || !this._anchor) { + public computeSync(options: ContentHoverComputerOptions): IHoverPart[] { + if (!this._editor.hasModel()) { return []; } - const lineDecorations = ContentHoverComputer._getLineDecorations(this._editor, this._anchor); + const anchor = options.anchor; + const lineDecorations = ContentHoverComputer._getLineDecorations(this._editor, anchor); let result: IHoverPart[] = []; for (const participant of this._participants) { - result = result.concat(participant.computeSync(this._anchor, lineDecorations)); + result = result.concat(participant.computeSync(anchor, lineDecorations)); } return coalesce(result); diff --git a/src/vs/editor/contrib/hover/browser/contentHoverController2.ts b/src/vs/editor/contrib/hover/browser/contentHoverController.ts similarity index 89% rename from src/vs/editor/contrib/hover/browser/contentHoverController2.ts rename to src/vs/editor/contrib/hover/browser/contentHoverController.ts index e4ca28268..ba56f278b 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverController2.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverController.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DECREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID, SHOW_OR_FOCUS_HOVER_ACTION_ID } from 'vs/editor/contrib/hover/browser/hoverActionIds'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IEditorMouseEvent, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution, IScrollEvent } from 'vs/editor/common/editorCommon'; -import { HoverStartMode, HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IHoverWidget } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; -import { HoverVerbosityAction } from 'vs/editor/common/languages'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { isMousePositionWithinElement } from 'vs/editor/contrib/hover/browser/hoverUtils'; -import { ContentHoverWidgetWrapper } from 'vs/editor/contrib/hover/browser/contentHoverWidgetWrapper'; -import 'vs/css!./hover'; -import { Emitter } from 'vs/base/common/event'; +import { DECREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID, SHOW_OR_FOCUS_HOVER_ACTION_ID } from './hoverActionIds.js'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor, IEditorMouseEvent, IPartialEditorMouseEvent } from '../../../browser/editorBrowser.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution, IScrollEvent } from '../../../common/editorCommon.js'; +import { HoverStartMode, HoverStartSource } from './hoverOperation.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IHoverWidget } from './hoverTypes.js'; +import { InlineSuggestionHintsContentWidget } from '../../inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ResultKind } from '../../../../platform/keybinding/common/keybindingResolver.js'; +import { HoverVerbosityAction } from '../../../common/languages.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { isMousePositionWithinElement } from './hoverUtils.js'; +import { ContentHoverWidgetWrapper } from './contentHoverWidgetWrapper.js'; +import './hover.css'; +import { Emitter } from '../../../../base/common/event.js'; // sticky hover widget which doesn't disappear on focus out and such const _sticky = false diff --git a/src/vs/editor/contrib/hover/browser/contentHoverRendered.ts b/src/vs/editor/contrib/hover/browser/contentHoverRendered.ts index 9308e6f29..af9f9f739 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverRendered.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverRendered.ts @@ -3,25 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorHoverContext, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverParts, RenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ContentHoverComputer } from 'vs/editor/contrib/hover/browser/contentHoverComputer'; -import { EditorHoverStatusBar } from 'vs/editor/contrib/hover/browser/contentHoverStatusBar'; -import { HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { HoverResult } from 'vs/editor/contrib/hover/browser/contentHoverTypes'; -import * as dom from 'vs/base/browser/dom'; -import { HoverVerbosityAction } from 'vs/editor/common/languages'; -import { MarkdownHoverParticipant } from 'vs/editor/contrib/hover/browser/markdownHoverParticipant'; -import { ColorHoverParticipant } from 'vs/editor/contrib/colorPicker/browser/colorHoverParticipant'; -import { localize } from 'vs/nls'; -import { InlayHintsHover } from 'vs/editor/contrib/inlayHints/browser/inlayHintsHover'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { HoverAction } from 'vs/base/browser/ui/hover/hoverWidget'; +import { IEditorHoverContext, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverParts, RenderedHoverParts } from './hoverTypes.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { EditorHoverStatusBar } from './contentHoverStatusBar.js'; +import { HoverStartSource } from './hoverOperation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { ContentHoverResult } from './contentHoverTypes.js'; +import * as dom from '../../../../base/browser/dom.js'; +import { HoverVerbosityAction } from '../../../common/languages.js'; +import { MarkdownHoverParticipant } from './markdownHoverParticipant.js'; +import { HoverColorPickerParticipant } from '../../colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js'; +import { localize } from '../../../../nls.js'; +import { InlayHintsHover } from '../../inlayHints/browser/inlayHintsHover.js'; +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { HoverAction } from '../../../../base/browser/ui/hover/hoverWidget.js'; export class RenderedContentHover extends Disposable { @@ -39,14 +38,12 @@ export class RenderedContentHover extends Disposable { constructor( editor: ICodeEditor, - hoverResult: HoverResult, + hoverResult: ContentHoverResult, participants: IEditorHoverParticipant[], - computer: ContentHoverComputer, context: IEditorHoverContext, keybindingService: IKeybindingService ) { super(); - const anchor = hoverResult.anchor; const parts = hoverResult.hoverParts; this._renderedHoverParts = this._register(new RenderedContentHoverParts( editor, @@ -55,14 +52,16 @@ export class RenderedContentHover extends Disposable { keybindingService, context )); + const contentHoverComputerOptions = hoverResult.options; + const anchor = contentHoverComputerOptions.anchor; const { showAtPosition, showAtSecondaryPosition } = RenderedContentHover.computeHoverPositions(editor, anchor.range, parts); this.shouldAppearBeforeContent = parts.some(m => m.isBeforeContent); this.showAtPosition = showAtPosition; this.showAtSecondaryPosition = showAtSecondaryPosition; this.initialMousePosX = anchor.initialMousePosX; this.initialMousePosY = anchor.initialMousePosY; - this.shouldFocus = computer.shouldFocus; - this.source = computer.source; + this.shouldFocus = contentHoverComputerOptions.shouldFocus; + this.source = contentHoverComputerOptions.source; } public get domNode(): DocumentFragment { @@ -219,7 +218,7 @@ class RenderedContentHoverParts extends Disposable { private readonly _context: IEditorHoverContext; private _markdownHoverParticipant: MarkdownHoverParticipant | undefined; - private _colorHoverParticipant: ColorHoverParticipant | undefined; + private _colorHoverParticipant: HoverColorPickerParticipant | undefined; private _focusedHoverPartIndex: number = -1; constructor( @@ -329,7 +328,7 @@ class RenderedContentHoverParts extends Disposable { if (markdownHoverParticipant) { this._markdownHoverParticipant = markdownHoverParticipant as MarkdownHoverParticipant; } - this._colorHoverParticipant = participants.find(p => p instanceof ColorHoverParticipant); + this._colorHoverParticipant = participants.find(p => p instanceof HoverColorPickerParticipant); } public focusHoverPartWithIndex(index: number): void { diff --git a/src/vs/editor/contrib/hover/browser/contentHoverStatusBar.ts b/src/vs/editor/contrib/hover/browser/contentHoverStatusBar.ts index bb4395941..220b75976 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverStatusBar.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverStatusBar.ts @@ -2,11 +2,11 @@ * 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 { HoverAction } from 'vs/base/browser/ui/hover/hoverWidget'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IEditorHoverAction, IEditorHoverStatusBar } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import * as dom from '../../../../base/browser/dom.js'; +import { HoverAction } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IEditorHoverAction, IEditorHoverStatusBar } from './hoverTypes.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; const $ = dom.$; diff --git a/src/vs/editor/contrib/hover/browser/contentHoverTypes.ts b/src/vs/editor/contrib/hover/browser/contentHoverTypes.ts index a52d758ba..81bc25d35 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverTypes.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverTypes.ts @@ -3,37 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { HoverAnchor, IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; +import { ContentHoverComputerOptions } from './contentHoverComputer.js'; +import { HoverAnchor, IHoverPart } from './hoverTypes.js'; -export class HoverResult { +export class ContentHoverResult { constructor( - public readonly anchor: HoverAnchor, public readonly hoverParts: IHoverPart[], - public readonly isComplete: boolean + public readonly isComplete: boolean, + public readonly options: ContentHoverComputerOptions ) { } - public filter(anchor: HoverAnchor): HoverResult { + public filter(anchor: HoverAnchor): ContentHoverResult { const filteredHoverParts = this.hoverParts.filter((m) => m.isValidForHoverAnchor(anchor)); if (filteredHoverParts.length === this.hoverParts.length) { return this; } - return new FilteredHoverResult(this, this.anchor, filteredHoverParts, this.isComplete); + return new FilteredContentHoverResult(this, filteredHoverParts, this.isComplete, this.options); } } -export class FilteredHoverResult extends HoverResult { +export class FilteredContentHoverResult extends ContentHoverResult { constructor( - private readonly original: HoverResult, - anchor: HoverAnchor, + private readonly original: ContentHoverResult, messages: IHoverPart[], - isComplete: boolean + isComplete: boolean, + options: ContentHoverComputerOptions ) { - super(anchor, messages, isComplete); + super(messages, isComplete, options); } - public override filter(anchor: HoverAnchor): HoverResult { + public override filter(anchor: HoverAnchor): ContentHoverResult { return this.original.filter(anchor); } } diff --git a/src/vs/editor/contrib/hover/browser/contentHoverWidget.ts b/src/vs/editor/contrib/hover/browser/contentHoverWidget.ts index 37cf8740e..5dc301909 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverWidget.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverWidget.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ResizableContentWidget } from 'vs/editor/contrib/hover/browser/resizableContentWidget'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { getHoverAccessibleViewHint, HoverWidget } from 'vs/base/browser/ui/hover/hoverWidget'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { Emitter } from 'vs/base/common/event'; -import { RenderedContentHover } from 'vs/editor/contrib/hover/browser/contentHoverRendered'; +import * as dom from '../../../../base/browser/dom.js'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js'; +import { HoverStartSource } from './hoverOperation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ResizableContentWidget } from './resizableContentWidget.js'; +import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { getHoverAccessibleViewHint, HoverWidget } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { PositionAffinity } from '../../../common/model.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { RenderedContentHover } from './contentHoverRendered.js'; const HORIZONTAL_SCROLLING_BY = 30; const CONTAINER_HEIGHT_PADDING = 6; @@ -291,7 +291,7 @@ export class ContentHoverWidget extends ResizableContentWidget { private _updateMaxDimensions() { const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); - const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); + const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 750, ContentHoverWidget._lastDimensions.width); this._setHoverWidgetMaxDimensions(width, height); } diff --git a/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts b/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts index 492bce8b7..61c2be8e6 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts @@ -3,34 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { HoverOperation, HoverStartMode, HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { HoverAnchor, HoverParticipantRegistry, HoverRangeAnchor, IEditorHoverContext, IEditorHoverParticipant, IHoverPart, IHoverWidget } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { HoverVerbosityAction } from 'vs/editor/common/standalone/standaloneEnums'; -import { ContentHoverWidget } from 'vs/editor/contrib/hover/browser/contentHoverWidget'; -import { ContentHoverComputer } from 'vs/editor/contrib/hover/browser/contentHoverComputer'; -import { HoverResult } from 'vs/editor/contrib/hover/browser/contentHoverTypes'; -import { Emitter } from 'vs/base/common/event'; -import { RenderedContentHover } from 'vs/editor/contrib/hover/browser/contentHoverRendered'; -import { isMousePositionWithinElement } from 'vs/editor/contrib/hover/browser/hoverUtils'; +import * as dom from '../../../../base/browser/dom.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { TokenizationRegistry } from '../../../common/languages.js'; +import { HoverOperation, HoverResult, HoverStartMode, HoverStartSource } from './hoverOperation.js'; +import { HoverAnchor, HoverParticipantRegistry, HoverRangeAnchor, IEditorHoverContext, IEditorHoverParticipant, IHoverPart, IHoverWidget } from './hoverTypes.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { HoverVerbosityAction } from '../../../common/standalone/standaloneEnums.js'; +import { ContentHoverWidget } from './contentHoverWidget.js'; +import { ContentHoverComputer, ContentHoverComputerOptions } from './contentHoverComputer.js'; +import { ContentHoverResult } from './contentHoverTypes.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { RenderedContentHover } from './contentHoverRendered.js'; +import { isMousePositionWithinElement } from './hoverUtils.js'; export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidget { - private _currentResult: HoverResult | null = null; + private _currentResult: ContentHoverResult | null = null; private _renderedContentHover: RenderedContentHover | undefined; - private readonly _computer: ContentHoverComputer; private readonly _contentHoverWidget: ContentHoverWidget; private readonly _participants: IEditorHoverParticipant[]; - private readonly _hoverOperation: HoverOperation; + private readonly _hoverOperation: HoverOperation; private readonly _onContentsChanged = this._register(new Emitter()); public readonly onContentsChanged = this._onContentsChanged.event; @@ -43,8 +42,7 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge super(); this._contentHoverWidget = this._register(this._instantiationService.createInstance(ContentHoverWidget, this._editor)); this._participants = this._initializeHoverParticipants(); - this._computer = new ContentHoverComputer(this._editor, this._participants); - this._hoverOperation = this._register(new HoverOperation(this._editor, this._computer)); + this._hoverOperation = this._register(new HoverOperation(this._editor, new ContentHoverComputer(this._editor, this._participants))); this._registerListeners(); } @@ -63,12 +61,8 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge private _registerListeners(): void { this._register(this._hoverOperation.onResult((result) => { - if (!this._computer.anchor) { - // invalid state, ignore result - return; - } - const messages = (result.hasLoadingMessage ? this._addLoadingMessage(result.value) : result.value); - this._withResult(new HoverResult(this._computer.anchor, messages, result.isComplete)); + const messages = (result.hasLoadingMessage ? this._addLoadingMessage(result) : result.value); + this._withResult(new ContentHoverResult(messages, result.isComplete, result.options)); })); const contentHoverWidgetNode = this._contentHoverWidget.getDomNode(); this._register(dom.addStandardDisposableListener(contentHoverWidgetNode, 'keydown', (e) => { @@ -121,12 +115,12 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge return false; } // If mouse if not getting closer and anchor is defined, and the new anchor is the same as the previous anchor - const currentAnchorEqualsPreviousAnchor = this._currentResult!.anchor.equals(anchor); + const currentAnchorEqualsPreviousAnchor = this._currentResult && this._currentResult.options.anchor.equals(anchor); if (currentAnchorEqualsPreviousAnchor) { return true; } // If mouse if not getting closer and anchor is defined, and the new anchor is not compatible with the previous anchor - const currentAnchorCompatibleWithPreviousAnchor = anchor.canAdoptVisibleHover(this._currentResult!.anchor, this._contentHoverWidget.position); + const currentAnchorCompatibleWithPreviousAnchor = this._currentResult && anchor.canAdoptVisibleHover(this._currentResult.options.anchor, this._contentHoverWidget.position); if (!currentAnchorCompatibleWithPreviousAnchor) { this._setCurrentResult(null); this._startHoverOperationIfNecessary(anchor, mode, source, focus, false); @@ -134,25 +128,29 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge } // We aren't getting any closer to the hover, so we will filter existing results // and keep those which also apply to the new anchor. - this._setCurrentResult(this._currentResult!.filter(anchor)); + if (this._currentResult) { + this._setCurrentResult(this._currentResult.filter(anchor)); + } this._startHoverOperationIfNecessary(anchor, mode, source, focus, false); return true; } - private _startHoverOperationIfNecessary(anchor: HoverAnchor, mode: HoverStartMode, source: HoverStartSource, focus: boolean, insistOnKeepingHoverVisible: boolean): void { - const currentAnchorEqualToPreviousHover = this._computer.anchor && this._computer.anchor.equals(anchor); + private _startHoverOperationIfNecessary(anchor: HoverAnchor, mode: HoverStartMode, source: HoverStartSource, shouldFocus: boolean, insistOnKeepingHoverVisible: boolean): void { + const currentAnchorEqualToPreviousHover = this._hoverOperation.options && this._hoverOperation.options.anchor.equals(anchor); if (currentAnchorEqualToPreviousHover) { return; } this._hoverOperation.cancel(); - this._computer.anchor = anchor; - this._computer.shouldFocus = focus; - this._computer.source = source; - this._computer.insistOnKeepingHoverVisible = insistOnKeepingHoverVisible; - this._hoverOperation.start(mode); + const contentHoverComputerOptions: ContentHoverComputerOptions = { + anchor, + source, + shouldFocus, + insistOnKeepingHoverVisible + }; + this._hoverOperation.start(mode, contentHoverComputerOptions); } - private _setCurrentResult(hoverResult: HoverResult | null): void { + private _setCurrentResult(hoverResult: ContentHoverResult | null): void { let currentHoverResult = hoverResult; const currentResultEqualToPreviousResult = this._currentResult === currentHoverResult; if (currentResultEqualToPreviousResult) { @@ -170,24 +168,21 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge } } - private _addLoadingMessage(result: IHoverPart[]): IHoverPart[] { - if (!this._computer.anchor) { - return result; - } + private _addLoadingMessage(hoverResult: HoverResult): IHoverPart[] { for (const participant of this._participants) { if (!participant.createLoadingMessage) { continue; } - const loadingMessage = participant.createLoadingMessage(this._computer.anchor); + const loadingMessage = participant.createLoadingMessage(hoverResult.options.anchor); if (!loadingMessage) { continue; } - return result.slice(0).concat([loadingMessage]); + return hoverResult.value.slice(0).concat([loadingMessage]); } - return result; + return hoverResult.value; } - private _withResult(hoverResult: HoverResult): void { + private _withResult(hoverResult: ContentHoverResult): void { const previousHoverIsVisibleWithCompleteResult = this._contentHoverWidget.position && this._currentResult && this._currentResult.isComplete; if (!previousHoverIsVisibleWithCompleteResult) { this._setCurrentResult(hoverResult); @@ -199,7 +194,7 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge return; } const currentHoverResultIsEmpty = hoverResult.hoverParts.length === 0; - const insistOnKeepingPreviousHoverVisible = this._computer.insistOnKeepingHoverVisible; + const insistOnKeepingPreviousHoverVisible = hoverResult.options.insistOnKeepingHoverVisible; const shouldKeepPreviousHoverVisible = currentHoverResultIsEmpty && insistOnKeepingPreviousHoverVisible; if (shouldKeepPreviousHoverVisible) { // The hover would now hide normally, so we'll keep the previous messages @@ -208,9 +203,9 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge this._setCurrentResult(hoverResult); } - private _showHover(hoverResult: HoverResult): void { + private _showHover(hoverResult: ContentHoverResult): void { const context = this._getHoverContext(); - this._renderedContentHover = new RenderedContentHover(this._editor, hoverResult, this._participants, this._computer, context, this._keybindingService); + this._renderedContentHover = new RenderedContentHover(this._editor, hoverResult, this._participants, context, this._keybindingService); if (this._renderedContentHover.domNodeHasChildren) { this._contentHoverWidget.show(this._renderedContentHover); } else { @@ -371,7 +366,6 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge } public hide(): void { - this._computer.anchor = null; this._hoverOperation.cancel(); this._setCurrentResult(null); } diff --git a/src/vs/editor/contrib/hover/browser/getHover.ts b/src/vs/editor/contrib/hover/browser/getHover.ts index 9fc1d78fb..7c000ed2a 100644 --- a/src/vs/editor/contrib/hover/browser/getHover.ts +++ b/src/vs/editor/contrib/hover/browser/getHover.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AsyncIterableObject } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { ITextModel } from 'vs/editor/common/model'; -import { Hover, HoverProvider } from 'vs/editor/common/languages'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { AsyncIterableObject } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { registerModelAndPositionCommand } from '../../../browser/editorExtensions.js'; +import { Position } from '../../../common/core/position.js'; +import { ITextModel } from '../../../common/model.js'; +import { Hover, HoverProvider } from '../../../common/languages.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; export class HoverProviderResult { constructor( diff --git a/src/vs/editor/contrib/hover/browser/marginHoverComputer.ts b/src/vs/editor/contrib/hover/browser/glyphHoverComputer.ts similarity index 53% rename from src/vs/editor/contrib/hover/browser/marginHoverComputer.ts rename to src/vs/editor/contrib/hover/browser/glyphHoverComputer.ts index 0bc619481..760d00fb6 100644 --- a/src/vs/editor/contrib/hover/browser/marginHoverComputer.ts +++ b/src/vs/editor/contrib/hover/browser/glyphHoverComputer.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asArray } from 'vs/base/common/arrays'; -import { IMarkdownString, isEmptyMarkdownString } from 'vs/base/common/htmlContent'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IHoverComputer } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { GlyphMarginLane } from 'vs/editor/common/model'; +import { asArray } from '../../../../base/common/arrays.js'; +import { IMarkdownString, isEmptyMarkdownString } from '../../../../base/common/htmlContent.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IHoverComputer } from './hoverOperation.js'; +import { GlyphMarginLane } from '../../../common/model.js'; export type LaneOrLineNumber = GlyphMarginLane | 'lineNo'; @@ -15,33 +15,19 @@ export interface IHoverMessage { value: IMarkdownString; } -export class MarginHoverComputer implements IHoverComputer { - - private _lineNumber: number = -1; - private _laneOrLine: LaneOrLineNumber = GlyphMarginLane.Center; - - public get lineNumber(): number { - return this._lineNumber; - } - - public set lineNumber(value: number) { - this._lineNumber = value; - } - - public get lane(): LaneOrLineNumber { - return this._laneOrLine; - } +export interface GlyphHoverComputerOptions { + lineNumber: number; + laneOrLine: LaneOrLineNumber; +} - public set lane(value: LaneOrLineNumber) { - this._laneOrLine = value; - } +export class GlyphHoverComputer implements IHoverComputer { constructor( private readonly _editor: ICodeEditor ) { } - public computeSync(): IHoverMessage[] { + public computeSync(opts: GlyphHoverComputerOptions): IHoverMessage[] { const toHoverMessage = (contents: IMarkdownString): IHoverMessage => { return { @@ -49,17 +35,17 @@ export class MarginHoverComputer implements IHoverComputer { }; }; - const lineDecorations = this._editor.getLineDecorations(this._lineNumber); + const lineDecorations = this._editor.getLineDecorations(opts.lineNumber); const result: IHoverMessage[] = []; - const isLineHover = this._laneOrLine === 'lineNo'; + const isLineHover = opts.laneOrLine === 'lineNo'; if (!lineDecorations) { return result; } for (const d of lineDecorations) { const lane = d.options.glyphMargin?.position ?? GlyphMarginLane.Center; - if (!isLineHover && lane !== this._laneOrLine) { + if (!isLineHover && lane !== opts.laneOrLine) { continue; } diff --git a/src/vs/editor/contrib/hover/browser/marginHoverController.ts b/src/vs/editor/contrib/hover/browser/glyphHoverController.ts similarity index 76% rename from src/vs/editor/contrib/hover/browser/marginHoverController.ts rename to src/vs/editor/contrib/hover/browser/glyphHoverController.ts index 5b71c6682..c0d37ae82 100644 --- a/src/vs/editor/contrib/hover/browser/marginHoverController.ts +++ b/src/vs/editor/contrib/hover/browser/glyphHoverController.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IEditorMouseEvent, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution, IScrollEvent } from 'vs/editor/common/editorCommon'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IHoverWidget } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { isMousePositionWithinElement } from 'vs/editor/contrib/hover/browser/hoverUtils'; -import 'vs/css!./hover'; -import { MarginHoverWidget } from 'vs/editor/contrib/hover/browser/marginHoverWidget'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor, IEditorMouseEvent, IPartialEditorMouseEvent } from '../../../browser/editorBrowser.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution, IScrollEvent } from '../../../common/editorCommon.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IHoverWidget } from './hoverTypes.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { isMousePositionWithinElement } from './hoverUtils.js'; +import './hover.css'; +import { GlyphHoverWidget } from './glyphHoverWidget.js'; // sticky hover widget which doesn't disappear on focus out and such const _sticky = false @@ -31,7 +31,7 @@ interface IHoverState { mouseDown: boolean; } -export class MarginHoverController extends Disposable implements IEditorContribution { +export class GlyphHoverController extends Disposable implements IEditorContribution { public static readonly ID = 'editor.contrib.marginHover'; @@ -39,7 +39,7 @@ export class MarginHoverController extends Disposable implements IEditorContribu private readonly _listenersStore = new DisposableStore(); - private _glyphWidget: MarginHoverWidget | undefined; + private _glyphWidget: GlyphHoverWidget | undefined; private _mouseMoveEvent: IEditorMouseEvent | undefined; private _reactToEditorMouseMoveRunner: RunOnceScheduler; @@ -67,8 +67,8 @@ export class MarginHoverController extends Disposable implements IEditorContribu })); } - static get(editor: ICodeEditor): MarginHoverController | null { - return editor.getContribution(MarginHoverController.ID); + static get(editor: ICodeEditor): GlyphHoverController | null { + return editor.getContribution(GlyphHoverController.ID); } private _hookListeners(): void { @@ -116,17 +116,17 @@ export class MarginHoverController extends Disposable implements IEditorContribu private _onEditorMouseDown(mouseEvent: IEditorMouseEvent): void { this._hoverState.mouseDown = true; - const shouldNotHideCurrentHoverWidget = this._isMouseOnMarginHoverWidget(mouseEvent); + const shouldNotHideCurrentHoverWidget = this._isMouseOnGlyphHoverWidget(mouseEvent); if (shouldNotHideCurrentHoverWidget) { return; } this._hideWidgets(); } - private _isMouseOnMarginHoverWidget(mouseEvent: IPartialEditorMouseEvent): boolean { - const marginHoverWidgetNode = this._glyphWidget?.getDomNode(); - if (marginHoverWidgetNode) { - return isMousePositionWithinElement(marginHoverWidgetNode, mouseEvent.event.posx, mouseEvent.event.posy); + private _isMouseOnGlyphHoverWidget(mouseEvent: IPartialEditorMouseEvent): boolean { + const glyphHoverWidgetNode = this._glyphWidget?.getDomNode(); + if (glyphHoverWidgetNode) { + return isMousePositionWithinElement(glyphHoverWidgetNode, mouseEvent.event.posx, mouseEvent.event.posy); } return false; } @@ -141,7 +141,7 @@ export class MarginHoverController extends Disposable implements IEditorContribu } this._cancelScheduler(); - const shouldNotHideCurrentHoverWidget = this._isMouseOnMarginHoverWidget(mouseEvent); + const shouldNotHideCurrentHoverWidget = this._isMouseOnGlyphHoverWidget(mouseEvent); if (shouldNotHideCurrentHoverWidget) { return; } @@ -153,8 +153,8 @@ export class MarginHoverController extends Disposable implements IEditorContribu private _shouldNotRecomputeCurrentHoverWidget(mouseEvent: IEditorMouseEvent): boolean { const isHoverSticky = this._hoverSettings.sticky; - const isMouseOnMarginHoverWidget = this._isMouseOnMarginHoverWidget(mouseEvent); - return isHoverSticky && isMouseOnMarginHoverWidget; + const isMouseOnGlyphHoverWidget = this._isMouseOnGlyphHoverWidget(mouseEvent); + return isHoverSticky && isMouseOnGlyphHoverWidget; } private _onEditorMouseMove(mouseEvent: IEditorMouseEvent): void { @@ -212,9 +212,9 @@ export class MarginHoverController extends Disposable implements IEditorContribu this._glyphWidget?.hide(); } - private _getOrCreateGlyphWidget(): MarginHoverWidget { + private _getOrCreateGlyphWidget(): GlyphHoverWidget { if (!this._glyphWidget) { - this._glyphWidget = this._instantiationService.createInstance(MarginHoverWidget, this._editor); + this._glyphWidget = this._instantiationService.createInstance(GlyphHoverWidget, this._editor); } return this._glyphWidget; } diff --git a/src/vs/editor/contrib/hover/browser/marginHoverWidget.ts b/src/vs/editor/contrib/hover/browser/glyphHoverWidget.ts similarity index 68% rename from src/vs/editor/contrib/hover/browser/marginHoverWidget.ts rename to src/vs/editor/contrib/hover/browser/glyphHoverWidget.ts index e6fb9f4ce..8432aa39f 100644 --- a/src/vs/editor/contrib/hover/browser/marginHoverWidget.ts +++ b/src/vs/editor/contrib/hover/browser/glyphHoverWidget.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { ICodeEditor, IEditorMouseEvent, IOverlayWidget, IOverlayWidgetPosition, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { HoverOperation, HoverStartMode } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { HoverWidget } from 'vs/base/browser/ui/hover/hoverWidget'; -import { IHoverWidget } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { IHoverMessage, LaneOrLineNumber, MarginHoverComputer } from 'vs/editor/contrib/hover/browser/marginHoverComputer'; -import { isMousePositionWithinElement } from 'vs/editor/contrib/hover/browser/hoverUtils'; +import * as dom from '../../../../base/browser/dom.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { MarkdownRenderer } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { ICodeEditor, IEditorMouseEvent, IOverlayWidget, IOverlayWidgetPosition, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { HoverOperation, HoverResult, HoverStartMode } from './hoverOperation.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { HoverWidget } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { IHoverWidget } from './hoverTypes.js'; +import { IHoverMessage, LaneOrLineNumber, GlyphHoverComputer, GlyphHoverComputerOptions } from './glyphHoverComputer.js'; +import { isMousePositionWithinElement } from './hoverUtils.js'; const $ = dom.$; -export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHoverWidget { +export class GlyphHoverWidget extends Disposable implements IOverlayWidget, IHoverWidget { public static readonly ID = 'editor.contrib.modesGlyphHoverWidget'; @@ -29,10 +29,11 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo private _messages: IHoverMessage[]; private readonly _markdownRenderer: MarkdownRenderer; - private readonly _computer: MarginHoverComputer; - private readonly _hoverOperation: HoverOperation; + private readonly _hoverOperation: HoverOperation; private readonly _renderDisposeables = this._register(new DisposableStore()); + private _hoverComputerOptions: GlyphHoverComputerOptions | undefined; + constructor( editor: ICodeEditor, @ILanguageService languageService: ILanguageService, @@ -48,11 +49,8 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo this._hover.containerDomNode.classList.toggle('hidden', !this._isVisible); this._markdownRenderer = this._register(new MarkdownRenderer({ editor: this._editor }, languageService, openerService)); - this._computer = new MarginHoverComputer(this._editor); - this._hoverOperation = this._register(new HoverOperation(this._editor, this._computer)); - this._register(this._hoverOperation.onResult((result) => { - this._withResult(result.value); - })); + this._hoverOperation = this._register(new HoverOperation(this._editor, new GlyphHoverComputer(this._editor))); + this._register(this._hoverOperation.onResult((result) => this._withResult(result))); this._register(this._editor.onDidChangeModelDecorations(() => this._onModelDecorationsChanged())); this._register(this._editor.onDidChangeConfiguration((e: ConfigurationChangedEvent) => { @@ -67,12 +65,13 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo } public override dispose(): void { + this._hoverComputerOptions = undefined; this._editor.removeOverlayWidget(this); super.dispose(); } public getId(): string { - return MarginHoverWidget.ID; + return GlyphHoverWidget.ID; } public getDomNode(): HTMLElement { @@ -89,11 +88,11 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo } private _onModelDecorationsChanged(): void { - if (this._isVisible) { + if (this._isVisible && this._hoverComputerOptions) { // The decorations have changed and the hover is visible, // we need to recompute the displayed text this._hoverOperation.cancel(); - this._hoverOperation.start(HoverStartMode.Delayed); + this._hoverOperation.start(HoverStartMode.Delayed, this._hoverComputerOptions); } } @@ -111,22 +110,20 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo } private _startShowingAt(lineNumber: number, laneOrLine: LaneOrLineNumber): void { - if (this._computer.lineNumber === lineNumber && this._computer.lane === laneOrLine) { + if (this._hoverComputerOptions + && this._hoverComputerOptions.lineNumber === lineNumber + && this._hoverComputerOptions.laneOrLine === laneOrLine) { // We have to show the widget at the exact same line number as before, so no work is needed return; } - this._hoverOperation.cancel(); - this.hide(); - - this._computer.lineNumber = lineNumber; - this._computer.lane = laneOrLine; - this._hoverOperation.start(HoverStartMode.Delayed); + this._hoverComputerOptions = { lineNumber, laneOrLine }; + this._hoverOperation.start(HoverStartMode.Delayed, this._hoverComputerOptions); } public hide(): void { - this._computer.lineNumber = -1; + this._hoverComputerOptions = undefined; this._hoverOperation.cancel(); if (!this._isVisible) { return; @@ -135,17 +132,17 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo this._hover.containerDomNode.classList.toggle('hidden', !this._isVisible); } - private _withResult(result: IHoverMessage[]): void { - this._messages = result; + private _withResult(result: HoverResult): void { + this._messages = result.value; if (this._messages.length > 0) { - this._renderMessages(this._computer.lineNumber, this._messages); + this._renderMessages(result.options.lineNumber, result.options.laneOrLine, this._messages); } else { this.hide(); } } - private _renderMessages(lineNumber: number, messages: IHoverMessage[]): void { + private _renderMessages(lineNumber: number, laneOrLine: LaneOrLineNumber, messages: IHoverMessage[]): void { this._renderDisposeables.clear(); const fragment = document.createDocumentFragment(); @@ -159,7 +156,7 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo } this._updateContents(fragment); - this._showAt(lineNumber); + this._showAt(lineNumber, laneOrLine); } private _updateContents(node: Node): void { @@ -168,7 +165,7 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo this._updateFont(); } - private _showAt(lineNumber: number): void { + private _showAt(lineNumber: number, laneOrLine: LaneOrLineNumber): void { if (!this._isVisible) { this._isVisible = true; this._hover.containerDomNode.classList.toggle('hidden', !this._isVisible); @@ -180,7 +177,7 @@ export class MarginHoverWidget extends Disposable implements IOverlayWidget, IHo const lineHeight = this._editor.getOption(EditorOption.lineHeight); const nodeHeight = this._hover.containerDomNode.clientHeight; const top = topForLineNumber - editorScrollTop - ((nodeHeight - lineHeight) / 2); - const left = editorLayout.glyphMarginLeft + editorLayout.glyphMarginWidth + (this._computer.lane === 'lineNo' ? editorLayout.lineNumbersWidth : 0); + const left = editorLayout.glyphMarginLeft + editorLayout.glyphMarginWidth + (laneOrLine === 'lineNo' ? editorLayout.lineNumbersWidth : 0); this._hover.containerDomNode.style.left = `${left}px`; this._hover.containerDomNode.style.top = `${Math.max(Math.round(top), 0)}px`; } diff --git a/src/vs/editor/contrib/hover/browser/hover.css b/src/vs/editor/contrib/hover/browser/hover.css index 2520856e5..958f1ee9c 100644 --- a/src/vs/editor/contrib/hover/browser/hover.css +++ b/src/vs/editor/contrib/hover/browser/hover.css @@ -43,7 +43,7 @@ flex-direction: column; padding-left: 5px; padding-right: 5px; - justify-content: end; + justify-content: flex-end; border-right: 1px solid var(--vscode-editorHoverWidget-border); } diff --git a/src/vs/editor/contrib/hover/browser/hoverAccessibleViews.ts b/src/vs/editor/contrib/hover/browser/hoverAccessibleViews.ts index 05eff6acd..ffce8901c 100644 --- a/src/vs/editor/contrib/hover/browser/hoverAccessibleViews.ts +++ b/src/vs/editor/contrib/hover/browser/hoverAccessibleViews.ts @@ -2,25 +2,25 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ContentHoverController } from 'vs/editor/contrib/hover/browser/contentHoverController2'; -import { AccessibleViewType, AccessibleViewProviderId, AccessibleContentProvider, IAccessibleViewContentProvider, IAccessibleViewOptions } from 'vs/platform/accessibility/browser/accessibleView'; -import { IAccessibleViewImplentation } from 'vs/platform/accessibility/browser/accessibleViewRegistry'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { HoverVerbosityAction } from 'vs/editor/common/languages'; -import { DECREASE_HOVER_VERBOSITY_ACCESSIBLE_ACTION_ID, DECREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACCESSIBLE_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID } from 'vs/editor/contrib/hover/browser/hoverActionIds'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { Action, IAction } from 'vs/base/common/actions'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Codicon } from 'vs/base/common/codicons'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { labelForHoverVerbosityAction } from 'vs/editor/contrib/hover/browser/markdownHoverParticipant'; +import { localize } from '../../../../nls.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ContentHoverController } from './contentHoverController.js'; +import { AccessibleViewType, AccessibleViewProviderId, AccessibleContentProvider, IAccessibleViewContentProvider, IAccessibleViewOptions } from '../../../../platform/accessibility/browser/accessibleView.js'; +import { IAccessibleViewImplentation } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; +import { IContextViewService } from '../../../../platform/contextview/browser/contextView.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { HoverVerbosityAction } from '../../../common/languages.js'; +import { DECREASE_HOVER_VERBOSITY_ACCESSIBLE_ACTION_ID, DECREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACCESSIBLE_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID } from './hoverActionIds.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { Action, IAction } from '../../../../base/common/actions.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { labelForHoverVerbosityAction } from './markdownHoverParticipant.js'; namespace HoverAccessibilityHelpNLS { export const increaseVerbosity = localize('increaseVerbosity', '- The focused hover part verbosity level can be increased with the Increase Hover Verbosity command.', ``); diff --git a/src/vs/editor/contrib/hover/browser/hoverActionIds.ts b/src/vs/editor/contrib/hover/browser/hoverActionIds.ts index 2ade6360a..95cd48dda 100644 --- a/src/vs/editor/contrib/hover/browser/hoverActionIds.ts +++ b/src/vs/editor/contrib/hover/browser/hoverActionIds.ts @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; export const SHOW_OR_FOCUS_HOVER_ACTION_ID = 'editor.action.showHover'; export const SHOW_DEFINITION_PREVIEW_HOVER_ACTION_ID = 'editor.action.showDefinitionPreviewHover'; diff --git a/src/vs/editor/contrib/hover/browser/hoverActions.ts b/src/vs/editor/contrib/hover/browser/hoverActions.ts index 5e48e53d6..7a4fbfe62 100644 --- a/src/vs/editor/contrib/hover/browser/hoverActions.ts +++ b/src/vs/editor/contrib/hover/browser/hoverActions.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DECREASE_HOVER_VERBOSITY_ACTION_ID, DECREASE_HOVER_VERBOSITY_ACTION_LABEL, GO_TO_BOTTOM_HOVER_ACTION_ID, GO_TO_TOP_HOVER_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_LABEL, PAGE_DOWN_HOVER_ACTION_ID, PAGE_UP_HOVER_ACTION_ID, SCROLL_DOWN_HOVER_ACTION_ID, SCROLL_LEFT_HOVER_ACTION_ID, SCROLL_RIGHT_HOVER_ACTION_ID, SCROLL_UP_HOVER_ACTION_ID, SHOW_DEFINITION_PREVIEW_HOVER_ACTION_ID, SHOW_OR_FOCUS_HOVER_ACTION_ID } from 'vs/editor/contrib/hover/browser/hoverActionIds'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { GotoDefinitionAtPositionEditorContribution } from 'vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition'; -import { HoverStartMode, HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ContentHoverController } from 'vs/editor/contrib/hover/browser/contentHoverController2'; -import { HoverVerbosityAction } from 'vs/editor/common/languages'; -import * as nls from 'vs/nls'; -import 'vs/css!./hover'; +import { DECREASE_HOVER_VERBOSITY_ACTION_ID, DECREASE_HOVER_VERBOSITY_ACTION_LABEL, GO_TO_BOTTOM_HOVER_ACTION_ID, GO_TO_TOP_HOVER_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_LABEL, PAGE_DOWN_HOVER_ACTION_ID, PAGE_UP_HOVER_ACTION_ID, SCROLL_DOWN_HOVER_ACTION_ID, SCROLL_LEFT_HOVER_ACTION_ID, SCROLL_RIGHT_HOVER_ACTION_ID, SCROLL_UP_HOVER_ACTION_ID, SHOW_DEFINITION_PREVIEW_HOVER_ACTION_ID, SHOW_OR_FOCUS_HOVER_ACTION_ID } from './hoverActionIds.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { GotoDefinitionAtPositionEditorContribution } from '../../gotoSymbol/browser/link/goToDefinitionAtPosition.js'; +import { HoverStartMode, HoverStartSource } from './hoverOperation.js'; +import { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ContentHoverController } from './contentHoverController.js'; +import { HoverVerbosityAction } from '../../../common/languages.js'; +import * as nls from '../../../../nls.js'; +import './hover.css'; enum HoverFocusBehavior { NoAutoFocus = 'noAutoFocus', diff --git a/src/vs/editor/contrib/hover/browser/hoverContribution.ts b/src/vs/editor/contrib/hover/browser/hoverContribution.ts index 2724c71dd..0143aa6ac 100644 --- a/src/vs/editor/contrib/hover/browser/hoverContribution.ts +++ b/src/vs/editor/contrib/hover/browser/hoverContribution.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DecreaseHoverVerbosityLevel, GoToBottomHoverAction, GoToTopHoverAction, IncreaseHoverVerbosityLevel, PageDownHoverAction, PageUpHoverAction, ScrollDownHoverAction, ScrollLeftHoverAction, ScrollRightHoverAction, ScrollUpHoverAction, ShowDefinitionPreviewHoverAction, ShowOrFocusHoverAction } from 'vs/editor/contrib/hover/browser/hoverActions'; -import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { editorHoverBorder } from 'vs/platform/theme/common/colorRegistry'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { MarkdownHoverParticipant } from 'vs/editor/contrib/hover/browser/markdownHoverParticipant'; -import { MarkerHoverParticipant } from 'vs/editor/contrib/hover/browser/markerHoverParticipant'; -import { ContentHoverController } from 'vs/editor/contrib/hover/browser/contentHoverController2'; -import { MarginHoverController } from 'vs/editor/contrib/hover/browser/marginHoverController'; -import 'vs/css!./hover'; -import { AccessibleViewRegistry } from 'vs/platform/accessibility/browser/accessibleViewRegistry'; -import { ExtHoverAccessibleView, HoverAccessibilityHelp, HoverAccessibleView } from 'vs/editor/contrib/hover/browser/hoverAccessibleViews'; +import { DecreaseHoverVerbosityLevel, GoToBottomHoverAction, GoToTopHoverAction, IncreaseHoverVerbosityLevel, PageDownHoverAction, PageUpHoverAction, ScrollDownHoverAction, ScrollLeftHoverAction, ScrollRightHoverAction, ScrollUpHoverAction, ShowDefinitionPreviewHoverAction, ShowOrFocusHoverAction } from './hoverActions.js'; +import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { editorHoverBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { HoverParticipantRegistry } from './hoverTypes.js'; +import { MarkdownHoverParticipant } from './markdownHoverParticipant.js'; +import { MarkerHoverParticipant } from './markerHoverParticipant.js'; +import { ContentHoverController } from './contentHoverController.js'; +import { GlyphHoverController } from './glyphHoverController.js'; +import './hover.css'; +import { AccessibleViewRegistry } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; +import { ExtHoverAccessibleView, HoverAccessibilityHelp, HoverAccessibleView } from './hoverAccessibleViews.js'; registerEditorContribution(ContentHoverController.ID, ContentHoverController, EditorContributionInstantiation.BeforeFirstInteraction); -registerEditorContribution(MarginHoverController.ID, MarginHoverController, EditorContributionInstantiation.BeforeFirstInteraction); +registerEditorContribution(GlyphHoverController.ID, GlyphHoverController, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(ShowOrFocusHoverAction); registerEditorAction(ShowDefinitionPreviewHoverAction); registerEditorAction(ScrollUpHoverAction); diff --git a/src/vs/editor/contrib/hover/browser/hoverOperation.ts b/src/vs/editor/contrib/hover/browser/hoverOperation.ts index 79c56ade6..cb73dddfb 100644 --- a/src/vs/editor/contrib/hover/browser/hoverOperation.ts +++ b/src/vs/editor/contrib/hover/browser/hoverOperation.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AsyncIterableObject, CancelableAsyncIterableObject, createCancelableAsyncIterable, RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; - -export interface IHoverComputer { +import { AsyncIterableObject, CancelableAsyncIterableObject, createCancelableAsyncIterable, RunOnceScheduler } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; + +export interface IHoverComputer { /** * This is called after half the hover time */ - computeAsync?: (token: CancellationToken) => AsyncIterableObject; + computeAsync?: (args: TArgs, token: CancellationToken) => AsyncIterableObject; /** * This is called after all the hover time */ - computeSync?: () => T[]; + computeSync?: (args: TArgs) => TResult[]; } const enum HoverOperationState { @@ -40,11 +40,12 @@ export const enum HoverStartSource { Keyboard = 1 } -export class HoverResult { +export class HoverResult { constructor( - public readonly value: T[], + public readonly value: TResult[], public readonly isComplete: boolean, public readonly hasLoadingMessage: boolean, + public readonly options: TArgs ) { } } @@ -58,23 +59,24 @@ export class HoverResult { * - if there are sync or async results, they are rendered. * - at 900ms, if the async computation hasn't finished, a "Loading..." result is added. */ -export class HoverOperation extends Disposable { +export class HoverOperation extends Disposable { - private readonly _onResult = this._register(new Emitter>()); + private readonly _onResult = this._register(new Emitter>()); public readonly onResult = this._onResult.event; - private readonly _firstWaitScheduler = this._register(new RunOnceScheduler(() => this._triggerAsyncComputation(), 0)); - private readonly _secondWaitScheduler = this._register(new RunOnceScheduler(() => this._triggerSyncComputation(), 0)); - private readonly _loadingMessageScheduler = this._register(new RunOnceScheduler(() => this._triggerLoadingMessage(), 0)); + private readonly _asyncComputationScheduler = this._register(new Debouncer((options: TArgs) => this._triggerAsyncComputation(options), 0)); + private readonly _syncComputationScheduler = this._register(new Debouncer((options: TArgs) => this._triggerSyncComputation(options), 0)); + private readonly _loadingMessageScheduler = this._register(new Debouncer((options: TArgs) => this._triggerLoadingMessage(options), 0)); private _state = HoverOperationState.Idle; - private _asyncIterable: CancelableAsyncIterableObject | null = null; + private _asyncIterable: CancelableAsyncIterableObject | null = null; private _asyncIterableDone: boolean = false; - private _result: T[] = []; + private _result: TResult[] = []; + private _options: TArgs | undefined; constructor( private readonly _editor: ICodeEditor, - private readonly _computer: IHoverComputer + private readonly _computer: IHoverComputer ) { super(); } @@ -84,6 +86,7 @@ export class HoverOperation extends Disposable { this._asyncIterable.cancel(); this._asyncIterable = null; } + this._options = undefined; super.dispose(); } @@ -103,33 +106,31 @@ export class HoverOperation extends Disposable { return 3 * this._hoverTime; } - private _setState(state: HoverOperationState, fireResult: boolean = true): void { + private _setState(state: HoverOperationState, options: TArgs): void { this._state = state; - if (fireResult) { - this._fireResult(); - } + this._fireResult(options); } - private _triggerAsyncComputation(): void { - this._setState(HoverOperationState.SecondWait); - this._secondWaitScheduler.schedule(this._secondWaitTime); + private _triggerAsyncComputation(options: TArgs): void { + this._setState(HoverOperationState.SecondWait, options); + this._syncComputationScheduler.schedule(options, this._secondWaitTime); if (this._computer.computeAsync) { this._asyncIterableDone = false; - this._asyncIterable = createCancelableAsyncIterable(token => this._computer.computeAsync!(token)); + this._asyncIterable = createCancelableAsyncIterable(token => this._computer.computeAsync!(options, token)); (async () => { try { for await (const item of this._asyncIterable!) { if (item) { this._result.push(item); - this._fireResult(); + this._fireResult(options); } } this._asyncIterableDone = true; if (this._state === HoverOperationState.WaitingForAsync || this._state === HoverOperationState.WaitingForAsyncShowingLoading) { - this._setState(HoverOperationState.Idle); + this._setState(HoverOperationState.Idle, options); } } catch (e) { @@ -142,61 +143,86 @@ export class HoverOperation extends Disposable { } } - private _triggerSyncComputation(): void { + private _triggerSyncComputation(options: TArgs): void { if (this._computer.computeSync) { - this._result = this._result.concat(this._computer.computeSync()); + this._result = this._result.concat(this._computer.computeSync(options)); } - this._setState(this._asyncIterableDone ? HoverOperationState.Idle : HoverOperationState.WaitingForAsync); + this._setState(this._asyncIterableDone ? HoverOperationState.Idle : HoverOperationState.WaitingForAsync, options); } - private _triggerLoadingMessage(): void { + private _triggerLoadingMessage(options: TArgs): void { if (this._state === HoverOperationState.WaitingForAsync) { - this._setState(HoverOperationState.WaitingForAsyncShowingLoading); + this._setState(HoverOperationState.WaitingForAsyncShowingLoading, options); } } - private _fireResult(): void { + private _fireResult(options: TArgs): void { if (this._state === HoverOperationState.FirstWait || this._state === HoverOperationState.SecondWait) { // Do not send out results before the hover time return; } const isComplete = (this._state === HoverOperationState.Idle); const hasLoadingMessage = (this._state === HoverOperationState.WaitingForAsyncShowingLoading); - this._onResult.fire(new HoverResult(this._result.slice(0), isComplete, hasLoadingMessage)); + this._onResult.fire(new HoverResult(this._result.slice(0), isComplete, hasLoadingMessage, options)); } - public start(mode: HoverStartMode): void { + public start(mode: HoverStartMode, options: TArgs): void { if (mode === HoverStartMode.Delayed) { if (this._state === HoverOperationState.Idle) { - this._setState(HoverOperationState.FirstWait); - this._firstWaitScheduler.schedule(this._firstWaitTime); - this._loadingMessageScheduler.schedule(this._loadingMessageTime); + this._setState(HoverOperationState.FirstWait, options); + this._asyncComputationScheduler.schedule(options, this._firstWaitTime); + this._loadingMessageScheduler.schedule(options, this._loadingMessageTime); } } else { switch (this._state) { case HoverOperationState.Idle: - this._triggerAsyncComputation(); - this._secondWaitScheduler.cancel(); - this._triggerSyncComputation(); + this._triggerAsyncComputation(options); + this._syncComputationScheduler.cancel(); + this._triggerSyncComputation(options); break; case HoverOperationState.SecondWait: - this._secondWaitScheduler.cancel(); - this._triggerSyncComputation(); + this._syncComputationScheduler.cancel(); + this._triggerSyncComputation(options); break; } } } public cancel(): void { - this._firstWaitScheduler.cancel(); - this._secondWaitScheduler.cancel(); + this._asyncComputationScheduler.cancel(); + this._syncComputationScheduler.cancel(); this._loadingMessageScheduler.cancel(); if (this._asyncIterable) { this._asyncIterable.cancel(); this._asyncIterable = null; } this._result = []; - this._setState(HoverOperationState.Idle, false); + this._options = undefined; + this._state = HoverOperationState.Idle; + } + + public get options(): TArgs | undefined { + return this._options; } +} + +class Debouncer extends Disposable { + + private readonly _scheduler: RunOnceScheduler; + + private _options: TArgs | undefined; + constructor(runner: (options: TArgs) => void, debounceTimeMs: number) { + super(); + this._scheduler = this._register(new RunOnceScheduler(() => runner(this._options!), debounceTimeMs)); + } + + schedule(options: TArgs, debounceTimeMs: number): void { + this._options = options; + this._scheduler.schedule(debounceTimeMs); + } + + cancel(): void { + this._scheduler.cancel(); + } } diff --git a/src/vs/editor/contrib/hover/browser/hoverTypes.ts b/src/vs/editor/contrib/hover/browser/hoverTypes.ts index 4b23a8384..b557fce3b 100644 --- a/src/vs/editor/contrib/hover/browser/hoverTypes.ts +++ b/src/vs/editor/contrib/hover/browser/hoverTypes.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Dimension } from 'vs/base/browser/dom'; -import { AsyncIterableObject } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration } from 'vs/editor/common/model'; -import { BrandedService, IConstructorSignature } from 'vs/platform/instantiation/common/instantiation'; +import { Dimension } from '../../../../base/browser/dom.js'; +import { AsyncIterableObject } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor, IEditorMouseEvent } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IModelDecoration } from '../../../common/model.js'; +import { BrandedService, IConstructorSignature } from '../../../../platform/instantiation/common/instantiation.js'; export interface IHoverPart { /** diff --git a/src/vs/editor/contrib/hover/browser/hoverUtils.ts b/src/vs/editor/contrib/hover/browser/hoverUtils.ts index 3f9ab067c..7f4a74956 100644 --- a/src/vs/editor/contrib/hover/browser/hoverUtils.ts +++ b/src/vs/editor/contrib/hover/browser/hoverUtils.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; +import * as dom from '../../../../base/browser/dom.js'; export function isMousePositionWithinElement(element: HTMLElement, posx: number, posy: number): boolean { const elementRect = dom.getDomNodePagePosition(element); diff --git a/src/vs/editor/contrib/hover/browser/markdownHoverParticipant.ts b/src/vs/editor/contrib/hover/browser/markdownHoverParticipant.ts index aaeb5796a..db9528985 100644 --- a/src/vs/editor/contrib/hover/browser/markdownHoverParticipant.ts +++ b/src/vs/editor/contrib/hover/browser/markdownHoverParticipant.ts @@ -3,37 +3,37 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { asArray, compareBy, numberComparator } from 'vs/base/common/arrays'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { IMarkdownString, isEmptyMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; -import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { DECREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID } from 'vs/editor/contrib/hover/browser/hoverActionIds'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration, ITextModel } from 'vs/editor/common/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { HoverAnchor, HoverAnchorType, HoverRangeAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import * as nls from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Hover, HoverContext, HoverProvider, HoverVerbosityAction } from 'vs/editor/common/languages'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ClickAction, HoverPosition, KeyDownAction } from 'vs/base/browser/ui/hover/hoverWidget'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { IHoverService, WorkbenchHoverDelegate } from 'vs/platform/hover/browser/hover'; -import { AsyncIterableObject } from 'vs/base/common/async'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { getHoverProviderResultsAsAsyncIterable } from 'vs/editor/contrib/hover/browser/getHover'; -import { ICommandService } from 'vs/platform/commands/common/commands'; +import * as dom from '../../../../base/browser/dom.js'; +import { asArray, compareBy, numberComparator } from '../../../../base/common/arrays.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { IMarkdownString, isEmptyMarkdownString, MarkdownString } from '../../../../base/common/htmlContent.js'; +import { DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { MarkdownRenderer } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { DECREASE_HOVER_VERBOSITY_ACTION_ID, INCREASE_HOVER_VERBOSITY_ACTION_ID } from './hoverActionIds.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IModelDecoration, ITextModel } from '../../../common/model.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { HoverAnchor, HoverAnchorType, HoverRangeAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from './hoverTypes.js'; +import * as nls from '../../../../nls.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Hover, HoverContext, HoverProvider, HoverVerbosityAction } from '../../../common/languages.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ClickAction, HoverPosition, KeyDownAction } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { IHoverService, WorkbenchHoverDelegate } from '../../../../platform/hover/browser/hover.js'; +import { AsyncIterableObject } from '../../../../base/common/async.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { getHoverProviderResultsAsAsyncIterable } from './getHover.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; const $ = dom.$; const increaseHoverVerbosityIcon = registerIcon('hover-increase-verbosity', Codicon.add, nls.localize('increaseHoverVerbosity', 'Icon for increaseing hover verbosity.')); diff --git a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts index 033b85ce2..1a8c3709b 100644 --- a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts +++ b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { CancelablePromise, createCancelablePromise, disposableTimeout } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { basename } from 'vs/base/common/resources'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { CodeActionTriggerType } from 'vs/editor/common/languages'; -import { IModelDecoration } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IMarkerDecorationsService } from 'vs/editor/common/services/markerDecorations'; -import { getCodeActions, quickFixCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController'; -import { CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from 'vs/editor/contrib/codeAction/common/types'; -import { MarkerController, NextMarkerAction } from 'vs/editor/contrib/gotoError/browser/gotoError'; -import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import * as nls from 'vs/nls'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IMarker, IMarkerData, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { Progress } from 'vs/platform/progress/common/progress'; +import * as dom from '../../../../base/browser/dom.js'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { CancelablePromise, createCancelablePromise, disposableTimeout } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { basename } from '../../../../base/common/resources.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { CodeActionTriggerType } from '../../../common/languages.js'; +import { IModelDecoration } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IMarkerDecorationsService } from '../../../common/services/markerDecorations.js'; +import { getCodeActions, quickFixCommandId } from '../../codeAction/browser/codeAction.js'; +import { CodeActionController } from '../../codeAction/browser/codeActionController.js'; +import { CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../../codeAction/common/types.js'; +import { MarkerController, NextMarkerAction } from '../../gotoError/browser/gotoError.js'; +import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from './hoverTypes.js'; +import * as nls from '../../../../nls.js'; +import { ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IMarker, IMarkerData, MarkerSeverity } from '../../../../platform/markers/common/markers.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { Progress } from '../../../../platform/progress/common/progress.js'; const $ = dom.$; @@ -130,7 +130,7 @@ export class MarkerHoverParticipant implements IEditorHoverParticipant { this._openerService.open(code.target, { allowCommands: true }); diff --git a/src/vs/editor/contrib/hover/browser/resizableContentWidget.ts b/src/vs/editor/contrib/hover/browser/resizableContentWidget.ts index 72736b8ab..7ff606a1e 100644 --- a/src/vs/editor/contrib/hover/browser/resizableContentWidget.ts +++ b/src/vs/editor/contrib/hover/browser/resizableContentWidget.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ResizableHTMLElement } from 'vs/base/browser/ui/resizable/resizable'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import * as dom from 'vs/base/browser/dom'; +import { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import * as dom from '../../../../base/browser/dom.js'; const TOP_HEIGHT = 30; const BOTTOM_HEIGHT = 24; diff --git a/src/vs/editor/contrib/hover/test/browser/contentHover.test.ts b/src/vs/editor/contrib/hover/test/browser/contentHover.test.ts index 65762f590..65337368f 100644 --- a/src/vs/editor/contrib/hover/test/browser/contentHover.test.ts +++ b/src/vs/editor/contrib/hover/test/browser/contentHover.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { RenderedContentHover } from 'vs/editor/contrib/hover/browser/contentHoverRendered'; -import { IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { TestCodeEditorInstantiationOptions, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { RenderedContentHover } from '../../browser/contentHoverRendered.js'; +import { IHoverPart } from '../../browser/hoverTypes.js'; +import { TestCodeEditorInstantiationOptions, withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; suite('Content Hover', () => { diff --git a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts index 6b207f278..248747f56 100644 --- a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts +++ b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, timeout } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution, IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { IInplaceReplaceSupportResult } from 'vs/editor/common/languages'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import * as nls from 'vs/nls'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { InPlaceReplaceCommand } from './inPlaceReplaceCommand'; -import 'vs/css!./inPlaceReplace'; +import { CancelablePromise, createCancelablePromise, timeout } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { CodeEditorStateFlag, EditorState } from '../../editorState/browser/editorState.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { IInplaceReplaceSupportResult } from '../../../common/languages.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import * as nls from '../../../../nls.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { InPlaceReplaceCommand } from './inPlaceReplaceCommand.js'; +import './inPlaceReplace.css'; class InPlaceReplaceController implements IEditorContribution { diff --git a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplaceCommand.ts b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplaceCommand.ts index 83c220946..4bd38f64e 100644 --- a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplaceCommand.ts +++ b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplaceCommand.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; export class InPlaceReplaceCommand implements ICommand { diff --git a/src/vs/editor/contrib/indentation/browser/indentation.ts b/src/vs/editor/contrib/indentation/browser/indentation.ts index 84760fdb6..2773edebf 100644 --- a/src/vs/editor/contrib/indentation/browser/indentation.ts +++ b/src/vs/editor/contrib/indentation/browser/indentation.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import * as strings from 'vs/base/common/strings'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; -import { EditorAutoIndentStrategy, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder, IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; -import { TextEdit } from 'vs/editor/common/languages'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IndentConsts } from 'vs/editor/common/languages/supports/indentRules'; -import { IModelService } from 'vs/editor/common/services/model'; -import * as indentUtils from 'vs/editor/contrib/indentation/common/indentUtils'; -import * as nls from 'vs/nls'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { getGoodIndentForLine, getIndentMetadata } from 'vs/editor/common/languages/autoIndent'; -import { getReindentEditOperations } from '../common/indentation'; -import { getStandardTokenTypeAtPosition } from 'vs/editor/common/tokens/lineTokens'; -import { Position } from 'vs/editor/common/core/position'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import * as strings from '../../../../base/common/strings.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ShiftCommand } from '../../../common/commands/shiftCommand.js'; +import { EditorAutoIndentStrategy, EditorOption } from '../../../common/config/editorOptions.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder, IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { EndOfLineSequence, ITextModel } from '../../../common/model.js'; +import { TextEdit } from '../../../common/languages.js'; +import { StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { IndentConsts } from '../../../common/languages/supports/indentRules.js'; +import { IModelService } from '../../../common/services/model.js'; +import * as indentUtils from '../common/indentUtils.js'; +import * as nls from '../../../../nls.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { getGoodIndentForLine, getIndentMetadata } from '../../../common/languages/autoIndent.js'; +import { getReindentEditOperations } from '../common/indentation.js'; +import { getStandardTokenTypeAtPosition } from '../../../common/tokens/lineTokens.js'; +import { Position } from '../../../common/core/position.js'; export class IndentationToSpacesAction extends EditorAction { public static readonly ID = 'editor.action.indentationToSpaces'; diff --git a/src/vs/editor/contrib/indentation/common/indentation.ts b/src/vs/editor/contrib/indentation/common/indentation.ts index 599d8012e..f1046f847 100644 --- a/src/vs/editor/contrib/indentation/common/indentation.ts +++ b/src/vs/editor/contrib/indentation/common/indentation.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { normalizeIndentation } from 'vs/editor/common/core/indentation'; -import { Selection } from 'vs/editor/common/core/selection'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ProcessedIndentRulesSupport } from 'vs/editor/common/languages/supports/indentationLineProcessor'; -import { ITextModel } from 'vs/editor/common/model'; +import * as strings from '../../../../base/common/strings.js'; +import { ShiftCommand } from '../../../common/commands/shiftCommand.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { normalizeIndentation } from '../../../common/core/indentation.js'; +import { Selection } from '../../../common/core/selection.js'; +import { StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { ProcessedIndentRulesSupport } from '../../../common/languages/supports/indentationLineProcessor.js'; +import { ITextModel } from '../../../common/model.js'; export function getReindentEditOperations(model: ITextModel, languageConfigurationService: ILanguageConfigurationService, startLineNumber: number, endLineNumber: number): ISingleEditOperation[] { if (model.getLineCount() === 1 && model.getLineMaxColumn(1) === 1) { diff --git a/src/vs/editor/contrib/indentation/test/browser/indentation.test.ts b/src/vs/editor/contrib/indentation/test/browser/indentation.test.ts index 2beed4f82..b4019cbea 100644 --- a/src/vs/editor/contrib/indentation/test/browser/indentation.test.ts +++ b/src/vs/editor/contrib/indentation/test/browser/indentation.test.ts @@ -4,28 +4,28 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { MetadataConsts, StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { AutoIndentOnPaste, IndentationToSpacesCommand, IndentationToTabsCommand } from 'vs/editor/contrib/indentation/browser/indentation'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; -import { goIndentationRules, htmlIndentationRules, javascriptIndentationRules, latexIndentationRules, luaIndentationRules, phpIndentationRules, rubyIndentationRules } from 'vs/editor/test/common/modes/supports/indentationRules'; -import { cppOnEnterRules, htmlOnEnterRules, javascriptOnEnterRules, phpOnEnterRules } from 'vs/editor/test/common/modes/supports/onEnterRules'; -import { TypeOperations } from 'vs/editor/common/cursor/cursorTypeOperations'; -import { cppBracketRules, goBracketRules, htmlBracketRules, latexBracketRules, luaBracketRules, phpBracketRules, rubyBracketRules, typescriptBracketRules, vbBracketRules } from 'vs/editor/test/common/modes/supports/bracketRules'; -import { javascriptAutoClosingPairsRules, latexAutoClosingPairsRules } from 'vs/editor/test/common/modes/supports/autoClosingPairsRules'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { DisposableStore, IDisposable } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { MetadataConsts, StandardTokenType } from '../../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IState, ITokenizationSupport, TokenizationRegistry } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { NullState } from '../../../../common/languages/nullTokenize.js'; +import { AutoIndentOnPaste, IndentationToSpacesCommand, IndentationToTabsCommand } from '../../browser/indentation.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; +import { goIndentationRules, htmlIndentationRules, javascriptIndentationRules, latexIndentationRules, luaIndentationRules, phpIndentationRules, rubyIndentationRules } from '../../../../test/common/modes/supports/indentationRules.js'; +import { cppOnEnterRules, htmlOnEnterRules, javascriptOnEnterRules, phpOnEnterRules } from '../../../../test/common/modes/supports/onEnterRules.js'; +import { TypeOperations } from '../../../../common/cursor/cursorTypeOperations.js'; +import { cppBracketRules, goBracketRules, htmlBracketRules, latexBracketRules, luaBracketRules, phpBracketRules, rubyBracketRules, typescriptBracketRules, vbBracketRules } from '../../../../test/common/modes/supports/bracketRules.js'; +import { javascriptAutoClosingPairsRules, latexAutoClosingPairsRules } from '../../../../test/common/modes/supports/autoClosingPairsRules.js'; +import { LanguageService } from '../../../../common/services/languageService.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; export enum Language { TypeScript = 'ts-test', diff --git a/src/vs/editor/contrib/indentation/test/browser/indentationLineProcessor.test.ts b/src/vs/editor/contrib/indentation/test/browser/indentationLineProcessor.test.ts index 2004b864c..20a08cd14 100644 --- a/src/vs/editor/contrib/indentation/test/browser/indentationLineProcessor.test.ts +++ b/src/vs/editor/contrib/indentation/test/browser/indentationLineProcessor.test.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IndentationContextProcessor, ProcessedIndentRulesSupport } from 'vs/editor/common/languages/supports/indentationLineProcessor'; -import { Language, registerLanguage, registerLanguageConfiguration, registerTokenizationSupport, StandardTokenTypeData } from 'vs/editor/contrib/indentation/test/browser/indentation.test'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { Range } from 'vs/editor/common/core/range'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { ILanguageService } from 'vs/editor/common/languages/language'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { StandardTokenType } from '../../../../common/encodedTokenAttributes.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { IndentationContextProcessor, ProcessedIndentRulesSupport } from '../../../../common/languages/supports/indentationLineProcessor.js'; +import { Language, registerLanguage, registerLanguageConfiguration, registerTokenizationSupport, StandardTokenTypeData } from './indentation.test.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { Range } from '../../../../common/core/range.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { LanguageService } from '../../../../common/services/languageService.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; suite('Indentation Context Processor - TypeScript/JavaScript', () => { diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts index c5905ab7c..8ce3830a3 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CancellationError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { InlayHint, InlayHintList, InlayHintsProvider, Command } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { CancellationError, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { InlayHint, InlayHintList, InlayHintsProvider, Command } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { URI } from '../../../../base/common/uri.js'; export class InlayHintAnchor { constructor(readonly range: Range, readonly direction: 'before' | 'after') { } diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts index ae4d54b7d..508762b52 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { InlayHintsController } from 'vs/editor/contrib/inlayHints/browser/inlayHintsController'; -import { InlayHintsHover } from 'vs/editor/contrib/inlayHints/browser/inlayHintsHover'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { HoverParticipantRegistry } from '../../hover/browser/hoverTypes.js'; +import { InlayHintsController } from './inlayHintsController.js'; +import { InlayHintsHover } from './inlayHintsHover.js'; registerEditorContribution(InlayHintsController.ID, InlayHintsController, EditorContributionInstantiation.AfterFirstRender); HoverParticipantRegistry.register(InlayHintsHover); diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index accb88043..aa76c3459 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -3,38 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isHTMLElement, ModifierKeyEmitter } from 'vs/base/browser/dom'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { LRUCache } from 'vs/base/common/map'; -import { IRange } from 'vs/base/common/range'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { ClassNameReference, CssProperties, DynamicCssRules } from 'vs/editor/browser/editorDom'; -import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; -import { EditorOption, EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import * as languages from 'vs/editor/common/languages'; -import { IModelDeltaDecoration, InjectedTextCursorStops, InjectedTextOptions, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationInjectedTextOptions } from 'vs/editor/common/model/textModel'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { ClickLinkGesture, ClickLinkMouseEvent } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; -import { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from 'vs/editor/contrib/inlayHints/browser/inlayHints'; -import { goToDefinitionWithLocation, showGoToContextMenu } from 'vs/editor/contrib/inlayHints/browser/inlayHintsLocations'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import * as colors from 'vs/platform/theme/common/colorRegistry'; -import { themeColorFromId } from 'vs/platform/theme/common/themeService'; +import { isHTMLElement, ModifierKeyEmitter } from '../../../../base/browser/dom.js'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { disposableTimeout, RunOnceScheduler } from '../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { LRUCache } from '../../../../base/common/map.js'; +import { IRange } from '../../../../base/common/range.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { ClassNameReference, CssProperties, DynamicCssRules } from '../../../browser/editorDom.js'; +import { StableEditorScrollState } from '../../../browser/stableEditorScroll.js'; +import { EditorOption, EDITOR_FONT_DEFAULTS } from '../../../common/config/editorOptions.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import * as languages from '../../../common/languages.js'; +import { IModelDeltaDecoration, InjectedTextCursorStops, InjectedTextOptions, ITextModel, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { ClickLinkGesture, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js'; +import { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from './inlayHints.js'; +import { goToDefinitionWithLocation, showGoToContextMenu } from './inlayHintsLocations.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { createDecorator, IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js'; +import * as colors from '../../../../platform/theme/common/colorRegistry.js'; +import { themeColorFromId } from '../../../../platform/theme/common/themeService.js'; +import { Position } from '../../../common/core/position.js'; // --- hint caching service (per session) @@ -100,7 +101,7 @@ export class InlayHintsController implements IEditorContribution { static readonly ID: string = 'editor.contrib.InlayHints'; private static readonly _MAX_DECORATORS = 1500; - private static readonly _MAX_LABEL_LEN = 43; + private static readonly _whitespaceData = {}; static get(editor: ICodeEditor): InlayHintsController | undefined { return editor.getContribution(InlayHintsController.ID) ?? undefined; @@ -112,6 +113,7 @@ export class InlayHintsController implements IEditorContribution { private readonly _decorationsMetadata = new Map(); private readonly _ruleFactory = new DynamicCssRules(this._editor); + private _cursorInfo?: { position: Position; notEarlierThan: number }; private _activeRenderMode = RenderMode.Normal; private _activeInlayHintPart?: ActiveInlayHintInfo; @@ -257,12 +259,23 @@ export class InlayHintsController implements IEditorContribution { scheduler.schedule(); } })); + + const cursor = this._sessionDisposables.add(new MutableDisposable()); this._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => { cts?.cancel(); - // update less aggressive when typing - const delay = Math.max(scheduler.delay, 1250); - scheduler.schedule(delay); + // mark current cursor position and time after which the whole can be updated/redrawn + const delay = Math.max(scheduler.delay, 800); + this._cursorInfo = { position: this._editor.getPosition()!, notEarlierThan: Date.now() + delay }; + cursor.value = disposableTimeout(() => scheduler.schedule(0), delay); + + scheduler.schedule(); + })); + + this._sessionDisposables.add(this._editor.onDidChangeConfiguration(e => { + if (e.hasChanged(EditorOption.inlayHints)) { + scheduler.schedule(); + } })); // mouse gestures @@ -435,9 +448,65 @@ export class InlayHintsController implements IEditorContribution { private _updateHintsDecorators(ranges: readonly Range[], items: readonly InlayHintItem[]): void { + const itemFixedLengths = new Map(); + + if (this._cursorInfo + && this._cursorInfo.notEarlierThan > Date.now() + && ranges.some(range => range.containsPosition(this._cursorInfo!.position)) + ) { + // collect inlay hints that are on the same line and before the cursor. Those "old" hints + // define fixed lengths so that the cursor does not jump back and worth while typing. + const { position } = this._cursorInfo; + this._cursorInfo = undefined; + + const lengths = new Map(); + + for (const deco of this._editor.getLineDecorations(position.lineNumber) ?? []) { + + const data = this._decorationsMetadata.get(deco.id); + if (deco.range.startColumn > position.column) { + continue; + } + const opts = data?.decoration.options[data.item.anchor.direction]; + if (opts && opts.attachedData !== InlayHintsController._whitespaceData) { + const len = lengths.get(data.item) ?? 0; + lengths.set(data.item, len + opts.content.length); + } + } + + + // on the cursor line and before the cursor-column + const newItemsWithFixedLength = items.filter(item => item.anchor.range.startLineNumber === position.lineNumber && item.anchor.range.endColumn <= position.column); + const fixedLengths = Array.from(lengths.values()); + + // match up fixed lengths with items and distribute the remaining lengths to the last item + let lastItem: InlayHintItem | undefined; + while (true) { + const targetItem = newItemsWithFixedLength.shift(); + const fixedLength = fixedLengths.shift(); + + if (!fixedLength && !targetItem) { + break; // DONE + } + + if (targetItem) { + itemFixedLengths.set(targetItem, fixedLength ?? 0); + lastItem = targetItem; + + } else if (lastItem && fixedLength) { + // still lengths but no more item. give it all to the last + let len = itemFixedLengths.get(lastItem)!; + len += fixedLength; + len += fixedLengths.reduce((p, c) => p + c, 0); + fixedLengths.length = 0; + break; // DONE + } + } + } + // utils to collect/create injected text decorations const newDecorationsData: InlayHintDecorationRenderInfo[] = []; - const addInjectedText = (item: InlayHintItem, ref: ClassNameReference, content: string, cursorStops: InjectedTextCursorStops, attachedData?: RenderedInlayHintLabelPart): void => { + const addInjectedText = (item: InlayHintItem, ref: ClassNameReference, content: string, cursorStops: InjectedTextCursorStops, attachedData?: RenderedInlayHintLabelPart | object): void => { const opts: InjectedTextOptions = { content, inlineClassNameAffectsLetterSpacing: true, @@ -467,12 +536,13 @@ export class InlayHintsController implements IEditorContribution { width: `${(fontSize / 3) | 0}px`, display: 'inline-block' }); - addInjectedText(item, marginRule, '\u200a', isLast ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None); + addInjectedText(item, marginRule, '\u200a', isLast ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None, InlayHintsController._whitespaceData); }; // const { fontSize, fontFamily, padding, isUniform } = this._getLayoutInfo(); + const maxLength = this._editor.getOption(EditorOption.inlayHints).maximumLength; const fontFamilyVar = '--code-editorInlayHintsFontFamily'; this._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily); @@ -480,13 +550,14 @@ export class InlayHintsController implements IEditorContribution { type ILineInfo = { line: number; totalLen: number }; let currentLineInfo: ILineInfo = { line: 0, totalLen: 0 }; - for (const item of items) { + for (let i = 0; i < items.length; i++) { + const item = items[i]; if (currentLineInfo.line !== item.anchor.range.startLineNumber) { currentLineInfo = { line: item.anchor.range.startLineNumber, totalLen: 0 }; } - if (currentLineInfo.totalLen > InlayHintsController._MAX_LABEL_LEN) { + if (maxLength && currentLineInfo.totalLen > maxLength) { continue; } @@ -500,6 +571,9 @@ export class InlayHintsController implements IEditorContribution { ? [{ label: item.hint.label }] : item.hint.label; + const itemFixedLength = itemFixedLengths.get(item); + let itemActualLength = 0; + for (let i = 0; i < parts.length; i++) { const part = parts[i]; @@ -528,8 +602,27 @@ export class InlayHintsController implements IEditorContribution { } } + let textlabel = part.label; + currentLineInfo.totalLen += textlabel.length; + let tooLong = false; + const over = maxLength !== 0 ? (currentLineInfo.totalLen - maxLength) : 0; + if (over > 0) { + textlabel = textlabel.slice(0, -over) + '…'; + tooLong = true; + } + + itemActualLength += textlabel.length; + + const overFixedLength = itemFixedLength !== undefined ? (itemActualLength - itemFixedLength) : 0; + if (overFixedLength > 0) { + // longer than fixed length, trim + itemActualLength -= overFixedLength; + textlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…'; + tooLong = true; + } + if (padding) { - if (isFirst && isLast) { + if (isFirst && (isLast || tooLong)) { // only element cssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px`; cssProperties.borderRadius = `${(fontSize / 4) | 0}px`; @@ -537,7 +630,7 @@ export class InlayHintsController implements IEditorContribution { // first element cssProperties.padding = `1px 0 1px ${Math.max(1, fontSize / 4) | 0}px`; cssProperties.borderRadius = `${(fontSize / 4) | 0}px 0 0 ${(fontSize / 4) | 0}px`; - } else if (isLast) { + } else if ((isLast || tooLong)) { // last element cssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px 1px 0`; cssProperties.borderRadius = `0 ${(fontSize / 4) | 0}px ${(fontSize / 4) | 0}px 0`; @@ -546,15 +639,6 @@ export class InlayHintsController implements IEditorContribution { } } - let textlabel = part.label; - currentLineInfo.totalLen += textlabel.length; - let tooLong = false; - const over = currentLineInfo.totalLen - InlayHintsController._MAX_LABEL_LEN; - if (over > 0) { - textlabel = textlabel.slice(0, -over) + '…'; - tooLong = true; - } - addInjectedText( item, this._ruleFactory.createClassNameRef(cssProperties), @@ -568,6 +652,17 @@ export class InlayHintsController implements IEditorContribution { } } + if (itemFixedLength !== undefined && itemActualLength < itemFixedLength) { + // shorter than fixed length, pad + const pad = (itemFixedLength - itemActualLength); + addInjectedText( + item, + this._ruleFactory.createClassNameRef({}), + '\u200a'.repeat(pad), + InjectedTextCursorStops.None + ); + } + // whitespace trailing the actual label if (item.hint.paddingRight) { addInjectedWhitespace(item, true); diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsHover.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsHover.ts index 05703e108..7587ab9a7 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsHover.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsHover.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AsyncIterableObject } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IMarkdownString, isEmptyMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { IModelDecoration } from 'vs/editor/common/model'; -import { ModelDecorationInjectedTextOptions } from 'vs/editor/common/model/textModel'; -import { HoverAnchor, HoverForeignElementAnchor, IEditorHoverParticipant } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { getHoverProviderResultsAsAsyncIterable } from 'vs/editor/contrib/hover/browser/getHover'; -import { MarkdownHover, MarkdownHoverParticipant } from 'vs/editor/contrib/hover/browser/markdownHoverParticipant'; -import { RenderedInlayHintLabelPart, InlayHintsController } from 'vs/editor/contrib/inlayHints/browser/inlayHintsController'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { localize } from 'vs/nls'; -import * as platform from 'vs/base/common/platform'; -import { asCommandLink } from 'vs/editor/contrib/inlayHints/browser/inlayHints'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { ICommandService } from 'vs/platform/commands/common/commands'; +import { AsyncIterableObject } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IMarkdownString, isEmptyMarkdownString, MarkdownString } from '../../../../base/common/htmlContent.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { IModelDecoration } from '../../../common/model.js'; +import { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js'; +import { HoverAnchor, HoverForeignElementAnchor, IEditorHoverParticipant } from '../../hover/browser/hoverTypes.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { getHoverProviderResultsAsAsyncIterable } from '../../hover/browser/getHover.js'; +import { MarkdownHover, MarkdownHoverParticipant } from '../../hover/browser/markdownHoverParticipant.js'; +import { RenderedInlayHintLabelPart, InlayHintsController } from './inlayHintsController.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { localize } from '../../../../nls.js'; +import * as platform from '../../../../base/common/platform.js'; +import { asCommandLink } from './inlayHints.js'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; class InlayHintsHoverAnchor extends HoverForeignElementAnchor { constructor( diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts index 4228e0560..edf82acff 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Action, IAction, Separator } from 'vs/base/common/actions'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { Location } from 'vs/editor/common/languages'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { DefinitionAction, SymbolNavigationAction, SymbolNavigationAnchor } from 'vs/editor/contrib/gotoSymbol/browser/goToCommands'; -import { ClickLinkMouseEvent } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; -import { RenderedInlayHintLabelPart } from 'vs/editor/contrib/inlayHints/browser/inlayHintsController'; -import { PeekContext } from 'vs/editor/contrib/peekView/browser/peekView'; -import { isIMenuItem, MenuId, MenuItemAction, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; +import * as dom from '../../../../base/browser/dom.js'; +import { Action, IAction, Separator } from '../../../../base/common/actions.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { IActiveCodeEditor, ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { Location } from '../../../common/languages.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { DefinitionAction, SymbolNavigationAction, SymbolNavigationAnchor } from '../../gotoSymbol/browser/goToCommands.js'; +import { ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js'; +import { RenderedInlayHintLabelPart } from './inlayHintsController.js'; +import { PeekContext } from '../../peekView/browser/peekView.js'; +import { isIMenuItem, MenuId, MenuItemAction, MenuRegistry } from '../../../../platform/actions/common/actions.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js'; export async function showGoToContextMenu(accessor: ServicesAccessor, editor: ICodeEditor, anchor: HTMLElement, part: RenderedInlayHintLabelPart) { diff --git a/src/vs/editor/contrib/inlineCompletions/browser/controller/commands.ts b/src/vs/editor/contrib/inlineCompletions/browser/controller/commands.ts index 0c52cfed3..4e59d278b 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/controller/commands.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/controller/commands.ts @@ -3,21 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { transaction } from 'vs/base/common/observable'; -import { asyncTransaction } from 'vs/base/common/observableInternal/base'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId, inlineSuggestCommitId } from 'vs/editor/contrib/inlineCompletions/browser/controller/commandIds'; -import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { Context as SuggestContext } from 'vs/editor/contrib/suggest/browser/suggest'; -import * as nls from 'vs/nls'; -import { MenuId, Action2 } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js'; +import { asyncTransaction, transaction } from '../../../../../base/common/observable.js'; +import * as nls from '../../../../../nls.js'; +import { Action2, MenuId } from '../../../../../platform/actions/common/actions.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorAction, ServicesAccessor } from '../../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../../common/editorContextKeys.js'; +import { Context as SuggestContext } from '../../../suggest/browser/suggest.js'; +import { inlineSuggestCommitId, showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from './commandIds.js'; +import { InlineCompletionContextKeys } from './inlineCompletionContextKeys.js'; +import { InlineCompletionsController } from './inlineCompletionsController.js'; export class ShowNextInlineSuggestionAction extends EditorAction { public static ID = showNextInlineSuggestionActionId; @@ -139,22 +138,79 @@ export class AcceptInlineCompletion extends EditorAction { id: inlineSuggestCommitId, label: nls.localize('action.inlineSuggest.accept', "Accept Inline Suggestion"), alias: 'Accept Inline Suggestion', - precondition: InlineCompletionContextKeys.inlineSuggestionVisible, + precondition: ContextKeyExpr.or(InlineCompletionContextKeys.inlineSuggestionVisible, InlineCompletionContextKeys.inlineEditVisible), menuOpts: [{ menuId: MenuId.InlineSuggestionToolbar, title: nls.localize('accept', "Accept"), group: 'primary', order: 1, + }, { + menuId: MenuId.InlineEditsActions, + title: nls.localize('accept', "Accept"), + group: 'primary', + order: 1, }], kbOpts: { primary: KeyCode.Tab, weight: 200, + kbExpr: ContextKeyExpr.or( + ContextKeyExpr.and( + InlineCompletionContextKeys.inlineSuggestionVisible, + EditorContextKeys.tabMovesFocus.toNegated(), + SuggestContext.Visible.toNegated(), + EditorContextKeys.hoverFocused.toNegated(), + + InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize, + ), + ContextKeyExpr.and( + InlineCompletionContextKeys.inlineEditVisible, + EditorContextKeys.tabMovesFocus.toNegated(), + SuggestContext.Visible.toNegated(), + EditorContextKeys.hoverFocused.toNegated(), + + //InlineCompletionContextKeys.cursorInIndentation.toNegated(), + InlineCompletionContextKeys.hasSelection.toNegated(), + InlineCompletionContextKeys.cursorAtInlineEdit, + ) + ), + } + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + if (controller) { + controller.model.get()?.accept(controller.editor); + controller.editor.focus(); + } + } +} + +export class JumpToNextInlineEdit extends EditorAction { + constructor() { + super({ + id: 'editor.action.inlineSuggest.jump', + label: nls.localize('action.inlineSuggest.jump', "Jump to next inline edit"), + alias: 'Jump to next inline edit', + precondition: InlineCompletionContextKeys.inlineEditVisible, + menuOpts: [{ + menuId: MenuId.InlineEditsActions, + title: nls.localize('jump', "Jump"), + group: 'primary', + order: 2, + when: InlineCompletionContextKeys.cursorAtInlineEdit.toNegated(), + }], + kbOpts: { + primary: KeyCode.Tab, + weight: 201, kbExpr: ContextKeyExpr.and( - InlineCompletionContextKeys.inlineSuggestionVisible, + InlineCompletionContextKeys.inlineEditVisible, + //InlineCompletionContextKeys.cursorInIndentation.toNegated(), + InlineCompletionContextKeys.hasSelection.toNegated(), EditorContextKeys.tabMovesFocus.toNegated(), - InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize, SuggestContext.Visible.toNegated(), EditorContextKeys.hoverFocused.toNegated(), + InlineCompletionContextKeys.cursorAtInlineEdit.toNegated(), ), } }); @@ -163,8 +219,7 @@ export class AcceptInlineCompletion extends EditorAction { public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { const controller = InlineCompletionsController.get(editor); if (controller) { - controller.model.get()?.accept(controller.editor); - controller.editor.focus(); + controller.jump(); } } } @@ -177,7 +232,7 @@ export class HideInlineCompletion extends EditorAction { id: HideInlineCompletion.ID, label: nls.localize('action.inlineSuggest.hide', "Hide Inline Suggestion"), alias: 'Hide Inline Suggestion', - precondition: InlineCompletionContextKeys.inlineSuggestionVisible, + precondition: ContextKeyExpr.or(InlineCompletionContextKeys.inlineSuggestionVisible, InlineCompletionContextKeys.inlineEditVisible), kbOpts: { weight: 100, primary: KeyCode.Escape, diff --git a/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.ts b/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.ts index eb881f94f..18ac98528 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.ts @@ -3,20 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IObservable, autorun } from 'vs/base/common/observable'; -import { firstNonWhitespaceIndex } from 'vs/base/common/strings'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { RawContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; +import { IObservable, autorun } from '../../../../../base/common/observable.js'; +import { firstNonWhitespaceIndex } from '../../../../../base/common/strings.js'; +import { CursorColumns } from '../../../../common/core/cursorColumns.js'; +import { InlineCompletionsModel } from '../model/inlineCompletionsModel.js'; +import { RawContextKey, IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { localize } from '../../../../../nls.js'; +import { bindContextKey } from '../../../../../platform/observable/common/platformObservableUtils.js'; export class InlineCompletionContextKeys extends Disposable { + public static readonly inlineSuggestionVisible = new RawContextKey('inlineSuggestionVisible', false, localize('inlineSuggestionVisible', "Whether an inline suggestion is visible")); public static readonly inlineSuggestionHasIndentation = new RawContextKey('inlineSuggestionHasIndentation', false, localize('inlineSuggestionHasIndentation', "Whether the inline suggestion starts with whitespace")); public static readonly inlineSuggestionHasIndentationLessThanTabSize = new RawContextKey('inlineSuggestionHasIndentationLessThanTabSize', true, localize('inlineSuggestionHasIndentationLessThanTabSize', "Whether the inline suggestion starts with whitespace that is less than what would be inserted by tab")); public static readonly suppressSuggestions = new RawContextKey('inlineSuggestionSuppressSuggestions', undefined, localize('suppressSuggestions', "Whether suggestions should be suppressed for the current suggestion")); + public static readonly cursorInIndentation = new RawContextKey('cursorInIndentation', false, localize('cursorInIndentation', "Whether the cursor is in indentation")); + public static readonly hasSelection = new RawContextKey('editor.hasSelection', false, localize('editor.hasSelection', "Whether the editor has a selection")); + public static readonly cursorAtInlineEdit = new RawContextKey('cursorAtInlineEdit', false, localize('cursorAtInlineEdit', "Whether the cursor is at an inline edit")); + public static readonly inlineEditVisible = new RawContextKey('inlineEditIsVisible', false, localize('inlineEditVisible', "Whether an inline edit is visible")); + + public readonly inlineCompletionVisible = InlineCompletionContextKeys.inlineSuggestionVisible.bindTo(this.contextKeyService); public readonly inlineCompletionSuggestsIndentation = InlineCompletionContextKeys.inlineSuggestionHasIndentation.bindTo(this.contextKeyService); public readonly inlineCompletionSuggestsIndentationLessThanTabSize = InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize.bindTo(this.contextKeyService); @@ -28,6 +36,12 @@ export class InlineCompletionContextKeys extends Disposable { ) { super(); + this._register(bindContextKey( + InlineCompletionContextKeys.inlineEditVisible, + this.contextKeyService, + reader => this.model.read(reader)?.stateInlineEdit.read(reader) !== undefined + )); + this._register(autorun(reader => { /** @description update context key: inlineCompletionVisible, suppressSuggestions */ const model = this.model.read(reader); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.ts b/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.ts index 89e2ce519..53e1dca17 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.ts @@ -3,45 +3,50 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createStyleSheetFromObservable } from 'vs/base/browser/domObservable'; -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { timeout } from 'vs/base/common/async'; -import { cancelOnDispose } from 'vs/base/common/cancellation'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ITransaction, autorun, constObservable, derived, observableFromEvent, observableSignal, observableValue, transaction, waitForState } from 'vs/base/common/observable'; -import { ISettableObservable } from 'vs/base/common/observableInternal/base'; -import { derivedDisposable } from 'vs/base/common/observableInternal/derived'; -import { derivedObservableWithCache, mapObservableArrayCached } from 'vs/base/common/observableInternal/utils'; -import { isUndefined } from 'vs/base/common/types'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { observableCodeEditor, reactToChange, reactToChangeWithStore } from 'vs/editor/browser/observableCodeEditor'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { inlineSuggestCommitId } from 'vs/editor/contrib/inlineCompletions/browser/controller/commandIds'; -import { GhostTextView } from 'vs/editor/contrib/inlineCompletions/browser/view/ghostTextView'; -import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys'; -import { InlineCompletionsHintsWidget, InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { SuggestWidgetAdaptor } from 'vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdaptor'; -import { localize } from 'vs/nls'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { createStyleSheetFromObservable } from '../../../../../base/browser/domObservable.js'; +import { alert } from '../../../../../base/browser/ui/aria/aria.js'; +import { timeout } from '../../../../../base/common/async.js'; +import { cancelOnDispose } from '../../../../../base/common/cancellation.js'; +import { createHotClass, readHotReloadableExport } from '../../../../../base/common/hotReloadHelpers.js'; +import { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { ITransaction, autorun, constObservable, derived, derivedDisposable, derivedObservableWithCache, mapObservableArrayCached, observableFromEvent, observableSignal, runOnChange, runOnChangeWithStore, transaction, waitForState } from '../../../../../base/common/observable.js'; +import { isUndefined } from '../../../../../base/common/types.js'; +import { localize } from '../../../../../nls.js'; +import { IAccessibilityService } from '../../../../../platform/accessibility/common/accessibility.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { ICommandService } from '../../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { bindContextKey } from '../../../../../platform/observable/common/platformObservableUtils.js'; +import { hotClassGetOriginalInstance } from '../../../../../platform/observable/common/wrapInHotClass.js'; +import { CoreEditingCommands } from '../../../../browser/coreCommands.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { observableCodeEditor } from '../../../../browser/observableCodeEditor.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../common/core/lineRange.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { CursorChangeReason } from '../../../../common/cursorEvents.js'; +import { ILanguageFeatureDebounceService } from '../../../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { InlineCompletionsHintsWidget, InlineSuggestionHintsContentWidget } from '../hintsWidget/inlineCompletionsHintsWidget.js'; +import { InlineCompletionsModel } from '../model/inlineCompletionsModel.js'; +import { SuggestWidgetAdaptor } from '../model/suggestWidgetAdaptor.js'; +import { convertItemsToStableObservables } from '../utils.js'; +import { GhostTextView } from '../view/ghostText/ghostTextView.js'; +import { InlineEditsViewAndDiffProducer } from '../view/inlineEdits/inlineEditsView.js'; +import { inlineSuggestCommitId } from './commandIds.js'; +import { InlineCompletionContextKeys } from './inlineCompletionContextKeys.js'; export class InlineCompletionsController extends Disposable { + public static hot = createHotClass(InlineCompletionsController); + static ID = 'editor.contrib.inlineCompletionsController'; public static get(editor: ICodeEditor): InlineCompletionsController | null { - return editor.getContribution(InlineCompletionsController.ID); + return hotClassGetOriginalInstance(editor.getContribution(InlineCompletionsController.ID)); } private readonly _editorObs = observableCodeEditor(this.editor); @@ -105,16 +110,32 @@ export class InlineCompletionsController extends Disposable { private readonly _stablizedGhostTexts = convertItemsToStableObservables(this._ghostTexts, this._store); private readonly _ghostTextWidgets = mapObservableArrayCached(this, this._stablizedGhostTexts, (ghostText, store) => - store.add(this._instantiationService.createInstance(GhostTextView, this.editor, { - ghostText: ghostText, - minReservedLineCount: constObservable(0), - targetTextModel: this.model.map(v => v?.textModel), - })) + derivedDisposable((reader) => + this._instantiationService.createInstance(readHotReloadableExport(GhostTextView, reader), this.editor, { + ghostText: ghostText, + minReservedLineCount: constObservable(0), + targetTextModel: this.model.map(v => v?.textModel), + }) + ).recomputeInitiallyAndOnChange(store) ).recomputeInitiallyAndOnChange(this._store); + private readonly _inlineEdit = derived(this, reader => { + const s = this.model.read(reader)?.stateWithInlineEdit.read(reader); + if (s?.kind === 'inlineEdit') { + return s.inlineEdit; + } + return undefined; + }); + private readonly _everHadInlineEdit = derivedObservableWithCache(this, (reader, last) => last || !!this._inlineEdit.read(reader)); + protected readonly _inlineEditWidget = derivedDisposable(reader => { + if (!this._everHadInlineEdit.read(reader)) { return undefined; } + return this._instantiationService.createInstance(InlineEditsViewAndDiffProducer.hot.read(reader), this.editor, this._inlineEdit); + }) + .recomputeInitiallyAndOnChange(this._store); + private readonly _playAccessibilitySignal = observableSignal(this); - private readonly _fontFamily = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineSuggest).fontFamily); + private readonly _fontFamily = this._editorObs.getOption(EditorOption.inlineSuggest).map(val => val.fontFamily); constructor( public readonly editor: ICodeEditor, @@ -132,7 +153,7 @@ export class InlineCompletionsController extends Disposable { this._register(new InlineCompletionContextKeys(this._contextKeyService, this.model)); - this._register(reactToChange(this._editorObs.onDidType, (_value, _changes) => { + this._register(runOnChange(this._editorObs.onDidType, (_value, _changes) => { if (this._enabled.get()) { this.model.get()?.trigger(); } @@ -155,7 +176,7 @@ export class InlineCompletionsController extends Disposable { } })); - this._register(reactToChange(this._editorObs.selections, (_value, changes) => { + this._register(runOnChange(this._editorObs.selections, (_value, _, changes) => { if (changes.some(e => e.reason === CursorChangeReason.Explicit || e.source === 'api')) { this.model.get()?.stop(); } @@ -199,11 +220,11 @@ export class InlineCompletionsController extends Disposable { } return state?.inlineCompletion?.semanticId; }); - this._register(reactToChangeWithStore(derived(reader => { + this._register(runOnChangeWithStore(derived(reader => { this._playAccessibilitySignal.read(reader); currentInlineCompletionBySemanticId.read(reader); return {}; - }), async (_value, _deltas, store) => { + }), async (_value, _, _deltas, store) => { /** @description InlineCompletionsController.playAccessibilitySignalAndReadSuggestion */ const model = this.model.get(); const state = model?.state.get(); @@ -239,8 +260,43 @@ export class InlineCompletionsController extends Disposable { } })); this.editor.updateOptions({ inlineCompletionsAccessibilityVerbose: this._configurationService.getValue('accessibility.verbosity.inlineCompletions') }); + + this._register(bindContextKey( + InlineCompletionContextKeys.cursorInIndentation, + this._contextKeyService, + reader => this._cursorIsInIndentation.read(reader), + )); + + this._register(bindContextKey( + InlineCompletionContextKeys.hasSelection, + this._contextKeyService, + reader => !this._editorObs.cursorSelection.read(reader)?.isEmpty(), + )); + + this._register(bindContextKey( + InlineCompletionContextKeys.cursorAtInlineEdit, + this._contextKeyService, + reader => { + const cursorPos = this._editorObs.cursorPosition.read(reader); + if (cursorPos === null) { return false; } + const edit = this.model.read(reader)?.stateInlineEdit.read(reader); + if (!edit) { return false; } + return LineRange.fromRangeInclusive(edit.inlineEdit.range).contains(cursorPos.lineNumber); + } + )); + } + private readonly _cursorIsInIndentation = derived(this, reader => { + const cursorPos = this._editorObs.cursorPosition.read(reader); + if (cursorPos === null) { return false; } + const model = this._editorObs.model.read(reader); + if (!model) { return false; } + this._editorObs.versionId.read(reader); + const indentMaxColumn = model.getLineIndentColumn(cursorPos.lineNumber); + return cursorPos.column <= indentMaxColumn; + }); + public playAccessibilitySignal(tx: ITransaction) { this._playAccessibilitySignal.trigger(tx); } @@ -264,7 +320,7 @@ export class InlineCompletionsController extends Disposable { } public shouldShowHoverAtViewZone(viewZoneId: string): boolean { - return this._ghostTextWidgets.get()[0]?.ownsViewZone(viewZoneId) ?? false; + return this._ghostTextWidgets.get()[0]?.get().ownsViewZone(viewZoneId) ?? false; } public hide() { @@ -272,28 +328,17 @@ export class InlineCompletionsController extends Disposable { this.model.get()?.stop(tx); }); } -} -function convertItemsToStableObservables(items: IObservable, store: DisposableStore): IObservable[]> { - const result = observableValue[]>('result', []); - const innerObservables: ISettableObservable[] = []; - - store.add(autorun(reader => { - const itemsValue = items.read(reader); + public jump(): void { + const m = this.model.get(); + const s = m?.stateInlineEdit.get(); + if (!s) { return; } transaction(tx => { - if (itemsValue.length !== innerObservables.length) { - innerObservables.length = itemsValue.length; - for (let i = 0; i < innerObservables.length; i++) { - if (!innerObservables[i]) { - innerObservables[i] = observableValue('item', itemsValue[i]); - } - } - result.set([...innerObservables], tx); - } - innerObservables.forEach((o, i) => o.set(itemsValue[i], tx)); + m!.dontRefetchSignal.trigger(tx); + this.editor.setPosition(s.inlineEdit.range.getStartPosition(), 'inlineCompletions.jump'); + this.editor.revealLine(s.inlineEdit.range.startLineNumber); + this.editor.focus(); }); - })); - - return result; + } } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.ts b/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.ts index c2007e201..fefa9400d 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { autorun, constObservable } from 'vs/base/common/observable'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelDecoration } from 'vs/editor/common/model'; -import { HoverAnchor, HoverAnchorType, HoverForeignElementAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import * as nls from 'vs/nls'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import * as dom from '../../../../../base/browser/dom.js'; +import { MarkdownString } from '../../../../../base/common/htmlContent.js'; +import { DisposableStore, IDisposable } from '../../../../../base/common/lifecycle.js'; +import { autorun, constObservable } from '../../../../../base/common/observable.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Range } from '../../../../common/core/range.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { IModelDecoration } from '../../../../common/model.js'; +import { HoverAnchor, HoverAnchorType, HoverForeignElementAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from '../../../hover/browser/hoverTypes.js'; +import { InlineCompletionsController } from '../controller/inlineCompletionsController.js'; +import { InlineSuggestionHintsContentWidget } from './inlineCompletionsHintsWidget.js'; +import { MarkdownRenderer } from '../../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import * as nls from '../../../../../nls.js'; +import { IAccessibilityService } from '../../../../../platform/accessibility/common/accessibility.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { IOpenerService } from '../../../../../platform/opener/common/opener.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; export class InlineCompletionsHover implements IHoverPart { constructor( diff --git a/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts b/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts index 51b8f92eb..162509988 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts @@ -3,37 +3,36 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { h } from 'vs/base/browser/dom'; -import { ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { KeybindingLabel, unthemedKeybindingLabelOptions } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { Action, IAction, Separator } from 'vs/base/common/actions'; -import { equals } from 'vs/base/common/arrays'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, autorunWithStore, derived, derivedObservableWithCache, observableFromEvent } from 'vs/base/common/observable'; -import { derivedWithStore } from 'vs/base/common/observableInternal/derived'; -import { OS } from 'vs/base/common/platform'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./inlineCompletionsHintsWidget'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Command, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from 'vs/editor/contrib/inlineCompletions/browser/controller/commandIds'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { localize } from 'vs/nls'; -import { MenuEntryActionViewItem, createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuWorkbenchToolBarOptions, WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; +import { h } from '../../../../../base/browser/dom.js'; +import { ActionViewItem } from '../../../../../base/browser/ui/actionbar/actionViewItems.js'; +import { KeybindingLabel, unthemedKeybindingLabelOptions } from '../../../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { Action, IAction, Separator } from '../../../../../base/common/actions.js'; +import { equals } from '../../../../../base/common/arrays.js'; +import { RunOnceScheduler } from '../../../../../base/common/async.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; +import { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, autorun, autorunWithStore, derived, derivedObservableWithCache, derivedWithStore, observableFromEvent } from '../../../../../base/common/observable.js'; +import { OS } from '../../../../../base/common/platform.js'; +import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { localize } from '../../../../../nls.js'; +import { MenuEntryActionViewItem, createAndFillInActionBarActions } from '../../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IMenuWorkbenchToolBarOptions, WorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js'; +import { IMenuService, MenuId, MenuItemAction } from '../../../../../platform/actions/common/actions.js'; +import { ICommandService } from '../../../../../platform/commands/common/commands.js'; +import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; +import { registerIcon } from '../../../../../platform/theme/common/iconRegistry.js'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { Position } from '../../../../common/core/position.js'; +import { Command, InlineCompletionTriggerKind } from '../../../../common/languages.js'; +import { PositionAffinity } from '../../../../common/model.js'; +import { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from '../controller/commandIds.js'; +import { InlineCompletionsModel } from '../model/inlineCompletionsModel.js'; +import './inlineCompletionsHintsWidget.css'; export class InlineCompletionsHintsWidget extends Disposable { private readonly alwaysShowToolbar = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineSuggest).showToolbar === 'always'); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts index 25670498a..321a2d2e3 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts @@ -3,16 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { TriggerInlineSuggestionAction, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, AcceptNextWordOfInlineCompletion, AcceptInlineCompletion, HideInlineCompletion, ToggleAlwaysShowInlineSuggestionToolbar, AcceptNextLineOfInlineCompletion } from 'vs/editor/contrib/inlineCompletions/browser/controller/commands'; -import { InlineCompletionsHoverParticipant } from 'vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant'; -import { InlineCompletionsAccessibleView } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { AccessibleViewRegistry } from 'vs/platform/accessibility/browser/accessibleViewRegistry'; -import { registerAction2 } from 'vs/platform/actions/common/actions'; +import { AccessibleViewRegistry } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; +import { registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { wrapInHotClass1 } from '../../../../platform/observable/common/wrapInHotClass.js'; +import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { HoverParticipantRegistry } from '../../hover/browser/hoverTypes.js'; +import { AcceptInlineCompletion, AcceptNextLineOfInlineCompletion, AcceptNextWordOfInlineCompletion, HideInlineCompletion, JumpToNextInlineEdit, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, ToggleAlwaysShowInlineSuggestionToolbar, TriggerInlineSuggestionAction } from './controller/commands.js'; +import { InlineCompletionsController } from './controller/inlineCompletionsController.js'; +import { InlineCompletionsHoverParticipant } from './hintsWidget/hoverParticipant.js'; +import { InlineCompletionsAccessibleView } from './inlineCompletionsAccessibleView.js'; +import { InlineEditsAdapterContribution } from './model/inlineEditsAdapter.js'; -registerEditorContribution(InlineCompletionsController.ID, InlineCompletionsController, EditorContributionInstantiation.Eventually); +registerEditorContribution(InlineEditsAdapterContribution.ID, InlineEditsAdapterContribution, EditorContributionInstantiation.Eventually); + + +registerEditorContribution(InlineCompletionsController.ID, wrapInHotClass1(InlineCompletionsController.hot), EditorContributionInstantiation.Eventually); registerEditorAction(TriggerInlineSuggestionAction); registerEditorAction(ShowNextInlineSuggestionAction); @@ -21,8 +26,8 @@ registerEditorAction(AcceptNextWordOfInlineCompletion); registerEditorAction(AcceptNextLineOfInlineCompletion); registerEditorAction(AcceptInlineCompletion); registerEditorAction(HideInlineCompletion); +registerEditorAction(JumpToNextInlineEdit); registerAction2(ToggleAlwaysShowInlineSuggestionToolbar); HoverParticipantRegistry.register(InlineCompletionsHoverParticipant); - AccessibleViewRegistry.register(new InlineCompletionsAccessibleView()); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView.ts index 48226d2a4..e0954e2bd 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { AccessibleViewType, AccessibleViewProviderId, IAccessibleViewContentProvider } from 'vs/platform/accessibility/browser/accessibleView'; -import { IAccessibleViewImplentation } from 'vs/platform/accessibility/browser/accessibleViewRegistry'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { InlineCompletionContextKeys } from './controller/inlineCompletionContextKeys.js'; +import { InlineCompletionsController } from './controller/inlineCompletionsController.js'; +import { AccessibleViewType, AccessibleViewProviderId, IAccessibleViewContentProvider } from '../../../../platform/accessibility/browser/accessibleView.js'; +import { IAccessibleViewImplentation } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { InlineCompletionsModel } from './model/inlineCompletionsModel.js'; export class InlineCompletionsAccessibleView implements IAccessibleViewImplentation { readonly type = AccessibleViewType.View; diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/computeGhostText.ts similarity index 74% rename from src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit.ts rename to src/vs/editor/contrib/inlineCompletions/browser/model/computeGhostText.ts index 1cd4b90ae..f5bf06890 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/computeGhostText.ts @@ -3,32 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDiffChange, LcsDiff } from 'vs/base/common/diff/diff'; -import { commonPrefixLength, getLeadingWhitespace } from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { TextLength } from 'vs/editor/common/core/textLength'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; -import { GhostText, GhostTextPart } from 'vs/editor/contrib/inlineCompletions/browser/model/ghostText'; - -export function singleTextRemoveCommonPrefix(edit: SingleTextEdit, model: ITextModel, validModelRange?: Range): SingleTextEdit { - const modelRange = validModelRange ? edit.range.intersectRanges(validModelRange) : edit.range; - if (!modelRange) { - return edit; - } - const valueToReplace = model.getValueInRange(modelRange, EndOfLinePreference.LF); - const commonPrefixLen = commonPrefixLength(valueToReplace, edit.text); - const start = TextLength.ofText(valueToReplace.substring(0, commonPrefixLen)).addToPosition(edit.range.getStartPosition()); - const text = edit.text.substring(commonPrefixLen); - const range = Range.fromPositions(start, edit.range.getEndPosition()); - return new SingleTextEdit(range, text); -} - -export function singleTextEditAugments(edit: SingleTextEdit, base: SingleTextEdit): boolean { - // The augmented completion must replace the base range, but can replace even more - return edit.text.startsWith(base.text) && rangeExtends(edit.range, base.range); -} +import { IDiffChange, LcsDiff } from '../../../../../base/common/diff/diff.js'; +import { getLeadingWhitespace } from '../../../../../base/common/strings.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { ITextModel } from '../../../../common/model.js'; +import { GhostText, GhostTextPart } from './ghostText.js'; +import { singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js'; /** * @param previewSuffixLength Sets where to split `inlineCompletion.text`. @@ -58,27 +40,23 @@ export function computeGhostText( // ^^^^^^^^^^ ^^^^^^ sourceIndentationLength // ^^^^^^ replacedIndentation.length // ^^^ rangeThatDoesNotReplaceIndentation - // inlineCompletion.text: '··foo' // ^^ suggestionAddedIndentationLength - const suggestionAddedIndentationLength = getLeadingWhitespace(e.text).length; const replacedIndentation = sourceLine.substring(e.range.startColumn - 1, sourceIndentationLength); const [startPosition, endPosition] = [e.range.getStartPosition(), e.range.getEndPosition()]; - const newStartPosition = - startPosition.column + replacedIndentation.length <= endPosition.column - ? startPosition.delta(0, replacedIndentation.length) - : endPosition; + const newStartPosition = startPosition.column + replacedIndentation.length <= endPosition.column + ? startPosition.delta(0, replacedIndentation.length) + : endPosition; const rangeThatDoesNotReplaceIndentation = Range.fromPositions(newStartPosition, endPosition); - const suggestionWithoutIndentationChange = - e.text.startsWith(replacedIndentation) - // Adds more indentation without changing existing indentation: We can add ghost text for this - ? e.text.substring(replacedIndentation.length) - // Changes or removes existing indentation. Only add ghost text for the non-indentation part. - : e.text.substring(suggestionAddedIndentationLength); + const suggestionWithoutIndentationChange = e.text.startsWith(replacedIndentation) + // Adds more indentation without changing existing indentation: We can add ghost text for this + ? e.text.substring(replacedIndentation.length) + // Changes or removes existing indentation. Only add ghost text for the non-indentation part. + : e.text.substring(suggestionAddedIndentationLength); e = new SingleTextEdit(rangeThatDoesNotReplaceIndentation, suggestionWithoutIndentationChange); } @@ -139,11 +117,6 @@ export function computeGhostText( return new GhostText(lineNumber, parts); } -function rangeExtends(extendingRange: Range, rangeToExtend: Range): boolean { - return rangeToExtend.getStartPosition().equals(extendingRange.getStartPosition()) - && rangeToExtend.getEndPosition().isBeforeOrEqual(extendingRange.getEndPosition()); -} - let lastRequest: { originalValue: string; newValue: string; changes: readonly IDiffChange[] | undefined } | undefined = undefined; function cachingDiff(originalValue: string, newValue: string): readonly IDiffChange[] | undefined { if (lastRequest?.originalValue === originalValue && lastRequest?.newValue === newValue) { diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/ghostText.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/ghostText.ts index 47ee2e9f9..43cb07a89 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/ghostText.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/ghostText.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals } from 'vs/base/common/arrays'; -import { splitLines } from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { SingleTextEdit, TextEdit } from 'vs/editor/common/core/textEdit'; -import { ColumnRange } from 'vs/editor/contrib/inlineCompletions/browser/utils'; +import { equals } from '../../../../../base/common/arrays.js'; +import { splitLines } from '../../../../../base/common/strings.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { SingleTextEdit, TextEdit } from '../../../../common/core/textEdit.js'; +import { ColumnRange } from '../utils.js'; export class GhostText { constructor( diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts index de33bdea1..786529449 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts @@ -3,35 +3,37 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { compareBy, Permutation } from 'vs/base/common/arrays'; -import { mapFindFirst } from 'vs/base/common/arraysFind'; -import { itemsEquals } from 'vs/base/common/equals'; -import { BugIndicatingError, onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IObservable, IReader, ITransaction, autorun, derived, derivedHandleChanges, derivedOpts, observableSignal, observableValue, recomputeInitiallyAndOnChange, subtransaction, transaction } from 'vs/base/common/observable'; -import { commonPrefixLength, splitLinesIncludeSeparators } from 'vs/base/common/strings'; -import { isDefined } from 'vs/base/common/types'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { SingleTextEdit, TextEdit } from 'vs/editor/common/core/textEdit'; -import { TextLength } from 'vs/editor/common/core/textLength'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { Command, InlineCompletionContext, InlineCompletionTriggerKind, PartialAcceptTriggerKind } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; -import { IFeatureDebounceInformation } from 'vs/editor/common/services/languageFeatureDebounce'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { GhostText, GhostTextOrReplacement, ghostTextOrReplacementEquals, ghostTextsOrReplacementsEqual } from 'vs/editor/contrib/inlineCompletions/browser/model/ghostText'; -import { InlineCompletionWithUpdatedRange, InlineCompletionsSource } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource'; -import { computeGhostText, singleTextEditAugments, singleTextRemoveCommonPrefix } from 'vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit'; -import { SuggestItemInfo } from 'vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdaptor'; -import { addPositions, subtractPositions } from 'vs/editor/contrib/inlineCompletions/browser/utils'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { mapFindFirst } from '../../../../../base/common/arraysFind.js'; +import { itemsEquals } from '../../../../../base/common/equals.js'; +import { BugIndicatingError, onUnexpectedError, onUnexpectedExternalError } from '../../../../../base/common/errors.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, IReader, ITransaction, autorun, derived, derivedHandleChanges, derivedOpts, observableSignal, observableValue, recomputeInitiallyAndOnChange, subtransaction, transaction } from '../../../../../base/common/observable.js'; +import { commonPrefixLength } from '../../../../../base/common/strings.js'; +import { isDefined } from '../../../../../base/common/types.js'; +import { ICommandService } from '../../../../../platform/commands/common/commands.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditOperation } from '../../../../common/core/editOperation.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { TextLength } from '../../../../common/core/textLength.js'; +import { ScrollType } from '../../../../common/editorCommon.js'; +import { Command, InlineCompletionContext, InlineCompletionTriggerKind, PartialAcceptTriggerKind } from '../../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { EndOfLinePreference, ITextModel } from '../../../../common/model.js'; +import { IFeatureDebounceInformation } from '../../../../common/services/languageFeatureDebounce.js'; +import { IModelContentChangedEvent } from '../../../../common/textModelEvents.js'; +import { SnippetController2 } from '../../../snippet/browser/snippetController2.js'; +import { addPositions, getEndPositionsAfterApplying, substringPos, subtractPositions } from '../utils.js'; +import { computeGhostText } from './computeGhostText.js'; +import { GhostText, GhostTextOrReplacement, ghostTextOrReplacementEquals, ghostTextsOrReplacementsEqual } from './ghostText.js'; +import { InlineCompletionWithUpdatedRange, InlineCompletionsSource } from './inlineCompletionsSource.js'; +import { InlineEdit } from './inlineEdit.js'; +import { InlineCompletionItem } from './provideInlineCompletions.js'; +import { singleTextEditAugments, singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js'; +import { SuggestItemInfo } from './suggestWidgetAdaptor.js'; export class InlineCompletionsModel extends Disposable { private readonly _source = this._register(this._instantiationService.createInstance(InlineCompletionsSource, this.textModel, this._textModelVersionId, this._debounceValue)); @@ -92,9 +94,12 @@ export class InlineCompletionsModel extends Disposable { return VersionIdChangeReason.Other; } + public readonly dontRefetchSignal = observableSignal(this); + private readonly _fetchInlineCompletionsPromise = derivedHandleChanges({ owner: this, createEmptyChangeSummary: () => ({ + dontRefetch: false, preserveCurrentCompletion: false, inlineCompletionTriggerKind: InlineCompletionTriggerKind.Automatic }), @@ -104,10 +109,13 @@ export class InlineCompletionsModel extends Disposable { changeSummary.preserveCurrentCompletion = true; } else if (ctx.didChange(this._forceUpdateExplicitlySignal)) { changeSummary.inlineCompletionTriggerKind = InlineCompletionTriggerKind.Explicit; + } else if (ctx.didChange(this.dontRefetchSignal)) { + changeSummary.dontRefetch = true; } return true; }, }, (reader, changeSummary) => { + this.dontRefetchSignal.read(reader); this._forceUpdateExplicitlySignal.read(reader); const shouldUpdate = (this._enabled.read(reader) && this.selectedSuggestItem.read(reader)) || this._isActive.read(reader); if (!shouldUpdate) { @@ -131,6 +139,10 @@ export class InlineCompletionsModel extends Disposable { } const cursorPosition = this._primaryPosition.read(reader); + if (changeSummary.dontRefetch) { + return Promise.resolve(true); + } + const context: InlineCompletionContext = { triggerKind: changeSummary.inlineCompletionTriggerKind, selectedSuggestionInfo: suggestItem?.toSelectedSuggestionInfo(), @@ -161,12 +173,30 @@ export class InlineCompletionsModel extends Disposable { }); } - private readonly _filteredInlineCompletionItems = derivedOpts({ owner: this, equalsFn: itemsEquals() }, reader => { + private readonly _inlineCompletionItems = derivedOpts({ owner: this }, reader => { const c = this._source.inlineCompletions.read(reader); - if (!c) { return []; } + if (!c) { return undefined; } const cursorPosition = this._primaryPosition.read(reader); - const filteredCompletions = c.inlineCompletions.filter(c => c.isVisible(this.textModel, cursorPosition, reader)); - return filteredCompletions; + let inlineEditCompletion: InlineCompletionWithUpdatedRange | undefined = undefined; + const filteredCompletions: InlineCompletionWithUpdatedRange[] = []; + for (const completion of c.inlineCompletions) { + if (!completion.inlineCompletion.sourceInlineCompletion.isInlineEdit) { + if (completion.isVisible(this.textModel, cursorPosition, reader)) { + filteredCompletions.push(completion); + } + } else if (filteredCompletions.length === 0 && completion.inlineCompletion.sourceInlineCompletion.isInlineEdit) { + inlineEditCompletion = completion; + } + } + return { + items: filteredCompletions, + inlineEditCompletion, + }; + }); + + private readonly _filteredInlineCompletionItems = derivedOpts({ owner: this, equalsFn: itemsEquals() }, reader => { + const c = this._inlineCompletionItems.read(reader); + return c?.items ?? []; }); public readonly selectedInlineCompletionIndex = derived(this, (reader) => { @@ -203,23 +233,42 @@ export class InlineCompletionsModel extends Disposable { } }); - public readonly state = derivedOpts<{ + public readonly stateWithInlineEdit = derivedOpts<{ + kind: 'ghostText'; edits: readonly SingleTextEdit[]; primaryGhostText: GhostTextOrReplacement; ghostTexts: readonly GhostTextOrReplacement[]; suggestItem: SuggestItemInfo | undefined; inlineCompletion: InlineCompletionWithUpdatedRange | undefined; + } | { + kind: 'inlineEdit'; + edits: readonly SingleTextEdit[]; + inlineEdit: InlineEdit; + inlineCompletion: InlineCompletionWithUpdatedRange; } | undefined>({ owner: this, equalsFn: (a, b) => { if (!a || !b) { return a === b; } - return ghostTextsOrReplacementsEqual(a.ghostTexts, b.ghostTexts) - && a.inlineCompletion === b.inlineCompletion - && a.suggestItem === b.suggestItem; + + if (a.kind === 'ghostText' && b.kind === 'ghostText') { + return ghostTextsOrReplacementsEqual(a.ghostTexts, b.ghostTexts) + && a.inlineCompletion === b.inlineCompletion + && a.suggestItem === b.suggestItem; + } else if (a.kind === 'inlineEdit' && b.kind === 'inlineEdit') { + return a.inlineEdit.edit.equals(b.inlineEdit.edit); + } + return false; } }, (reader) => { const model = this.textModel; + const item = this._inlineCompletionItems.read(reader); + if (item?.inlineEditCompletion) { + let edit = item.inlineEditCompletion.toSingleTextEdit(reader); + edit = singleTextRemoveCommonPrefix(edit, model); + return { kind: 'inlineEdit', inlineEdit: new InlineEdit(edit), inlineCompletion: item.inlineEditCompletion, edits: [edit] }; + } + const suggestItem = this.selectedSuggestItem.read(reader); if (suggestItem) { const suggestCompletionEdit = singleTextRemoveCommonPrefix(suggestItem.toSingleTextEdit(), model); @@ -238,7 +287,7 @@ export class InlineCompletionsModel extends Disposable { .map((edit, idx) => computeGhostText(edit, model, mode, positions[idx], fullEditPreviewLength)) .filter(isDefined); const primaryGhostText = ghostTexts[0] ?? new GhostText(fullEdit.range.endLineNumber, []); - return { edits, primaryGhostText, ghostTexts, inlineCompletion: augmentation?.completion, suggestItem }; + return { kind: 'ghostText', edits, primaryGhostText, ghostTexts, inlineCompletion: augmentation?.completion, suggestItem }; } else { if (!this._isActive.read(reader)) { return undefined; } const inlineCompletion = this.selectedInlineCompletion.read(reader); @@ -252,10 +301,22 @@ export class InlineCompletionsModel extends Disposable { .map((edit, idx) => computeGhostText(edit, model, mode, positions[idx], 0)) .filter(isDefined); if (!ghostTexts[0]) { return undefined; } - return { edits, primaryGhostText: ghostTexts[0], ghostTexts, inlineCompletion, suggestItem: undefined }; + return { kind: 'ghostText', edits, primaryGhostText: ghostTexts[0], ghostTexts, inlineCompletion, suggestItem: undefined }; } }); + public readonly state = derived(reader => { + const s = this.stateWithInlineEdit.read(reader); + if (!s || s.kind !== 'ghostText') { return undefined; } + return s; + }); + + public readonly stateInlineEdit = derived(reader => { + const s = this.stateWithInlineEdit.read(reader); + if (!s || s.kind !== 'inlineEdit') { return undefined; } + return s; + }); + private _computeAugmentation(suggestCompletion: SingleTextEdit, reader: IReader | undefined) { const model = this.textModel; const suggestWidgetInlineCompletions = this._source.suggestWidgetInlineCompletions.read(reader); @@ -313,11 +374,19 @@ export class InlineCompletionsModel extends Disposable { throw new BugIndicatingError(); } - const state = this.state.get(); - if (!state || state.primaryGhostText.isEmpty() || !state.inlineCompletion) { + let completion: InlineCompletionItem; + + const state = this.stateWithInlineEdit.get(); + if (state?.kind === 'ghostText') { + if (!state || state.primaryGhostText.isEmpty() || !state.inlineCompletion) { + return; + } + completion = state.inlineCompletion.toInlineCompletion(undefined); + } else if (state?.kind === 'inlineEdit') { + completion = state.inlineCompletion.toInlineCompletion(undefined); + } else { return; } - const completion = state.inlineCompletion.toInlineCompletion(undefined); if (completion.command) { // Make sure the completion list will not be disposed. @@ -515,20 +584,3 @@ export function getSecondaryEdits(textModel: ITextModel, positions: readonly Pos return new SingleTextEdit(range, secondaryEditText); }); } - -function substringPos(text: string, pos: Position): string { - let subtext = ''; - const lines = splitLinesIncludeSeparators(text); - for (let i = pos.lineNumber - 1; i < lines.length; i++) { - subtext += lines[i].substring(i === pos.lineNumber - 1 ? pos.column - 1 : 0); - } - return subtext; -} - -function getEndPositionsAfterApplying(edits: readonly SingleTextEdit[]): Position[] { - const sortPerm = Permutation.createSortPermutation(edits, compareBy(e => e.range, Range.compareRangesUsingStarts)); - const edit = new TextEdit(sortPerm.apply(edits)); - const sortedNewRanges = edit.getNewRanges(); - const newRanges = sortPerm.inverse().apply(sortedNewRanges); - return newRanges.map(range => range.getEndPosition()); -} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.ts index 7886532f6..d1f365f34 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { equalsIfDefined, itemEquals } from 'vs/base/common/equals'; -import { matchesSubString } from 'vs/base/common/filters'; -import { Disposable, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, IReader, ITransaction, derivedOpts, disposableObservableValue, transaction } from 'vs/base/common/observable'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { TextLength } from 'vs/editor/common/core/textLength'; -import { InlineCompletionContext, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; -import { IFeatureDebounceInformation } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { InlineCompletionItem, InlineCompletionProviderResult, provideInlineCompletions } from 'vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions'; -import { singleTextRemoveCommonPrefix } from 'vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit'; +import { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js'; +import { equalsIfDefined, itemEquals } from '../../../../../base/common/equals.js'; +import { matchesSubString } from '../../../../../base/common/filters.js'; +import { Disposable, IDisposable, MutableDisposable } from '../../../../../base/common/lifecycle.js'; +import { IObservable, IReader, ITransaction, derivedOpts, disposableObservableValue, transaction } from '../../../../../base/common/observable.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { TextLength } from '../../../../common/core/textLength.js'; +import { InlineCompletionContext, InlineCompletionTriggerKind } from '../../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { EndOfLinePreference, ITextModel } from '../../../../common/model.js'; +import { IFeatureDebounceInformation } from '../../../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { InlineCompletionItem, InlineCompletionProviderResult, provideInlineCompletions } from './provideInlineCompletions.js'; +import { singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js'; export class InlineCompletionsSource extends Disposable { private readonly _updateOperation = this._register(new MutableDisposable()); @@ -26,21 +26,21 @@ export class InlineCompletionsSource extends Disposable { public readonly suggestWidgetInlineCompletions = disposableObservableValue('suggestWidgetInlineCompletions', undefined); constructor( - private readonly textModel: ITextModel, - private readonly versionId: IObservable, + private readonly _textModel: ITextModel, + private readonly _versionId: IObservable, private readonly _debounceValue: IFeatureDebounceInformation, - @ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService, - @ILanguageConfigurationService private readonly languageConfigurationService: ILanguageConfigurationService, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService, ) { super(); - this._register(this.textModel.onDidChangeContent(() => { + this._register(this._textModel.onDidChangeContent(() => { this._updateOperation.clear(); })); } public fetch(position: Position, context: InlineCompletionContext, activeInlineCompletion: InlineCompletionWithUpdatedRange | undefined): Promise { - const request = new UpdateRequest(position, context, this.textModel.getVersionId()); + const request = new UpdateRequest(position, context, this._textModel.getVersionId()); const target = context.selectedSuggestionInfo ? this.suggestWidgetInlineCompletions : this.inlineCompletions; @@ -59,34 +59,34 @@ export class InlineCompletionsSource extends Disposable { const shouldDebounce = updateOngoing || context.triggerKind === InlineCompletionTriggerKind.Automatic; if (shouldDebounce) { // This debounces the operation - await wait(this._debounceValue.get(this.textModel), source.token); + await wait(this._debounceValue.get(this._textModel), source.token); } - if (source.token.isCancellationRequested || this._store.isDisposed || this.textModel.getVersionId() !== request.versionId) { + if (source.token.isCancellationRequested || this._store.isDisposed || this._textModel.getVersionId() !== request.versionId) { return false; } const startTime = new Date(); const updatedCompletions = await provideInlineCompletions( - this.languageFeaturesService.inlineCompletionsProvider, + this._languageFeaturesService.inlineCompletionsProvider, position, - this.textModel, + this._textModel, context, source.token, - this.languageConfigurationService + this._languageConfigurationService ); - if (source.token.isCancellationRequested || this._store.isDisposed || this.textModel.getVersionId() !== request.versionId) { + if (source.token.isCancellationRequested || this._store.isDisposed || this._textModel.getVersionId() !== request.versionId) { return false; } const endTime = new Date(); - this._debounceValue.update(this.textModel, endTime.getTime() - startTime.getTime()); + this._debounceValue.update(this._textModel, endTime.getTime() - startTime.getTime()); - const completions = new UpToDateInlineCompletions(updatedCompletions, request, this.textModel, this.versionId); + const completions = new UpToDateInlineCompletions(updatedCompletions, request, this._textModel, this._versionId); if (activeInlineCompletion) { const asInlineCompletion = activeInlineCompletion.toInlineCompletion(undefined); - if (activeInlineCompletion.canBeReused(this.textModel, position) && !updatedCompletions.has(asInlineCompletion)) { + if (activeInlineCompletion.canBeReused(this._textModel, position) && !updatedCompletions.has(asInlineCompletion)) { completions.prepend(activeInlineCompletion.inlineCompletion, asInlineCompletion.range, true); } } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.ts new file mode 100644 index 000000000..2daf10bd1 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.ts @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; + +export class InlineEdit { + constructor( + public readonly edit: SingleTextEdit, + ) { } + + public get range() { + return this.edit.range; + } + + public get text() { + return this.edit.text; + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineEditsAdapter.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineEditsAdapter.ts new file mode 100644 index 000000000..ad131e62b --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineEditsAdapter.ts @@ -0,0 +1,80 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { autorunWithStore, observableSignalFromEvent } from '../../../../../base/common/observable.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { observableConfigValue } from '../../../../../platform/observable/common/platformObservableUtils.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { IInlineEdit, InlineCompletions, InlineCompletionsProvider, InlineEditProvider, InlineEditTriggerKind } from '../../../../common/languages.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; + +export class InlineEditsAdapterContribution extends Disposable { + public static ID = 'editor.contrib.inlineEditsAdapter'; + public static isFirst = true; + + constructor( + _editor: ICodeEditor, + @IInstantiationService private readonly instantiationService: IInstantiationService, + ) { + super(); + + if (InlineEditsAdapterContribution.isFirst) { + InlineEditsAdapterContribution.isFirst = false; + this.instantiationService.createInstance(InlineEditsAdapter); + } + } +} + +export class InlineEditsAdapter extends Disposable { + public static experimentalInlineEditsEnabled = 'editor.inlineSuggest.experimentalInlineEditsEnabled'; + private readonly _inlineCompletionInlineEdits = observableConfigValue(InlineEditsAdapter.experimentalInlineEditsEnabled, false, this._configurationService); + + constructor( + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @IConfigurationService private readonly _configurationService: IConfigurationService, + ) { + super(); + + const didChangeSignal = observableSignalFromEvent('didChangeSignal', this._languageFeaturesService.inlineEditProvider.onDidChange); + + this._register(autorunWithStore((reader, store) => { + if (!this._inlineCompletionInlineEdits.read(reader)) { return; } + didChangeSignal.read(reader); + + store.add(this._languageFeaturesService.inlineCompletionsProvider.register('*', { + provideInlineCompletions: async (model, position, context, token) => { + const allInlineEditProvider = _languageFeaturesService.inlineEditProvider.all(model); + const inlineEdits = await Promise.all(allInlineEditProvider.map(async provider => { + const result = await provider.provideInlineEdit(model, { + triggerKind: InlineEditTriggerKind.Automatic, + }, token); + if (!result) { return undefined; } + return { result, provider }; + })); + + const definedEdits = inlineEdits.filter(e => !!e); + return { + edits: definedEdits, + items: definedEdits.map(e => { + return { + range: e.result.range, + insertText: e.result.text, + command: e.result.accepted, + isInlineEdit: true, + }; + }), + }; + }, + freeInlineCompletions: (c) => { + for (const e of c.edits) { + e.provider.freeInlineEdit(e.result); + } + }, + } as InlineCompletionsProvider }[] }>)); + })); + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts index b1139b429..fc7e6b42e 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts @@ -3,23 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assertNever } from 'vs/base/common/assert'; -import { DeferredPromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { SetMap } from 'vs/base/common/map'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { Command, InlineCompletion, InlineCompletionContext, InlineCompletionProviderGroupId, InlineCompletions, InlineCompletionsProvider } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { fixBracketsInLine } from 'vs/editor/common/model/bracketPairsTextModelPart/fixBrackets'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { getReadonlyEmptyArray } from '../utils'; -import { SnippetParser, Text } from 'vs/editor/contrib/snippet/browser/snippetParser'; +import { assertNever } from '../../../../../base/common/assert.js'; +import { DeferredPromise } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { SetMap } from '../../../../../base/common/map.js'; +import { onUnexpectedExternalError } from '../../../../../base/common/errors.js'; +import { IDisposable } from '../../../../../base/common/lifecycle.js'; +import { ISingleEditOperation } from '../../../../common/core/editOperation.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import { Command, InlineCompletion, InlineCompletionContext, InlineCompletionProviderGroupId, InlineCompletions, InlineCompletionsProvider } from '../../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { ITextModel } from '../../../../common/model.js'; +import { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { getReadonlyEmptyArray } from '../utils.js'; +import { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js'; +import { LineEditWithAdditionalLines } from '../../../../common/tokenizationTextModelPart.js'; +import { OffsetRange } from '../../../../common/core/offsetRange.js'; export async function provideInlineCompletions( registry: LanguageFeatureRegistry, @@ -73,7 +75,7 @@ export async function provideInlineCompletions( return undefined; } - function processProvider(provider: InlineCompletionsProvider): Result { + function processProvider(provider: InlineCompletionsProvider): Result { const state = states.get(provider); if (state) { return state; @@ -104,7 +106,7 @@ export async function provideInlineCompletions( const completions = await provider.provideInlineCompletions(model, positionOrRange, context, token); return completions; } else { - const completions = await provider.provideInlineEdits?.(model, positionOrRange, context, token); + const completions = await provider.provideInlineEditsForRange?.(model, positionOrRange, context, token); return completions; } } catch (e) { @@ -333,8 +335,9 @@ function closeBrackets(text: string, position: Position, model: ITextModel, lang const lineStart = model.getLineContent(position.lineNumber).substring(0, position.column - 1); const newLine = lineStart + text; - const newTokens = model.tokenization.tokenizeLineWithEdit(position, newLine.length - (position.column - 1), text); - const slicedTokens = newTokens?.sliceAndInflate(position.column - 1, newLine.length, 0); + const edit = LineEditWithAdditionalLines.replace(OffsetRange.ofStartAndLength(position.column - 1, newLine.length - (position.column - 1)), text); + const newTokens = model.tokenization.tokenizeLineWithEdit(position.lineNumber, edit); + const slicedTokens = newTokens?.mainLineTokens?.sliceAndInflate(position.column - 1, newLine.length, 0); if (!slicedTokens) { return text; } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEditHelpers.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEditHelpers.ts new file mode 100644 index 000000000..3c4d51ef8 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/singleTextEditHelpers.ts @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { commonPrefixLength } from '../../../../../base/common/strings.js'; +import { Range } from '../../../../common/core/range.js'; +import { TextLength } from '../../../../common/core/textLength.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { EndOfLinePreference, ITextModel } from '../../../../common/model.js'; + +export function singleTextRemoveCommonPrefix(edit: SingleTextEdit, model: ITextModel, validModelRange?: Range): SingleTextEdit { + const modelRange = validModelRange ? edit.range.intersectRanges(validModelRange) : edit.range; + if (!modelRange) { + return edit; + } + const normalizedText = edit.text.replaceAll('\r\n', '\n'); + const valueToReplace = model.getValueInRange(modelRange, EndOfLinePreference.LF); + const commonPrefixLen = commonPrefixLength(valueToReplace, normalizedText); + const start = TextLength.ofText(valueToReplace.substring(0, commonPrefixLen)).addToPosition(edit.range.getStartPosition()); + const text = normalizedText.substring(commonPrefixLen); + const range = Range.fromPositions(start, edit.range.getEndPosition()); + return new SingleTextEdit(range, text); +} + +export function singleTextEditAugments(edit: SingleTextEdit, base: SingleTextEdit): boolean { + // The augmented completion must replace the base range, but can replace even more + return edit.text.startsWith(base.text) && rangeExtends(edit.range, base.range); +} + +function rangeExtends(extendingRange: Range, rangeToExtend: Range): boolean { + return rangeToExtend.getStartPosition().equals(extendingRange.getStartPosition()) + && rangeToExtend.getEndPosition().isBeforeOrEqual(extendingRange.getEndPosition()); +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdaptor.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdaptor.ts index a4167b43a..cb86cfea8 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdaptor.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdaptor.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { compareBy, numberComparator } from 'vs/base/common/arrays'; -import { findFirstMax } from 'vs/base/common/arraysFind'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { singleTextEditAugments, singleTextRemoveCommonPrefix } from 'vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { SnippetSession } from 'vs/editor/contrib/snippet/browser/snippetSession'; -import { CompletionItem } from 'vs/editor/contrib/suggest/browser/suggest'; -import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; +import { compareBy, numberComparator } from '../../../../../base/common/arrays.js'; +import { findFirstMax } from '../../../../../base/common/arraysFind.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from '../../../../common/languages.js'; +import { ITextModel } from '../../../../common/model.js'; +import { singleTextEditAugments, singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js'; +import { SnippetParser } from '../../../snippet/browser/snippetParser.js'; +import { SnippetSession } from '../../../snippet/browser/snippetSession.js'; +import { CompletionItem } from '../../../suggest/browser/suggest.js'; +import { SuggestController } from '../../../suggest/browser/suggestController.js'; export class SuggestWidgetAdaptor extends Disposable { private isSuggestWidgetVisible: boolean = false; diff --git a/src/vs/editor/contrib/inlineCompletions/browser/utils.ts b/src/vs/editor/contrib/inlineCompletions/browser/utils.ts index 20236aade..0b1a504e5 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/utils.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/utils.ts @@ -3,13 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BugIndicatingError } from 'vs/base/common/errors'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorunOpts } from 'vs/base/common/observable'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDeltaDecoration } from 'vs/editor/common/model'; +import { Permutation, compareBy } from '../../../../base/common/arrays.js'; +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IObservable, observableValue, ISettableObservable, autorun, transaction } from '../../../../base/common/observable.js'; +import { splitLinesIncludeSeparators } from '../../../../base/common/strings.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { SingleTextEdit, TextEdit } from '../../../common/core/textEdit.js'; const array: ReadonlyArray = []; export function getReadonlyEmptyArray(): readonly T[] { @@ -36,21 +37,6 @@ export class ColumnRange { } } -export function applyObservableDecorations(editor: ICodeEditor, decorations: IObservable): IDisposable { - const d = new DisposableStore(); - const decorationsCollection = editor.createDecorationsCollection(); - d.add(autorunOpts({ debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => { - const d = decorations.read(reader); - decorationsCollection.set(d); - })); - d.add({ - dispose: () => { - decorationsCollection.clear(); - } - }); - return d; -} - export function addPositions(pos1: Position, pos2: Position): Position { return new Position(pos1.lineNumber + pos2.lineNumber - 1, pos2.lineNumber === 1 ? pos1.column + pos2.column - 1 : pos2.column); } @@ -58,3 +44,44 @@ export function addPositions(pos1: Position, pos2: Position): Position { export function subtractPositions(pos1: Position, pos2: Position): Position { return new Position(pos1.lineNumber - pos2.lineNumber + 1, pos1.lineNumber - pos2.lineNumber === 0 ? pos1.column - pos2.column + 1 : pos1.column); } + +export function substringPos(text: string, pos: Position): string { + let subtext = ''; + const lines = splitLinesIncludeSeparators(text); + for (let i = pos.lineNumber - 1; i < lines.length; i++) { + subtext += lines[i].substring(i === pos.lineNumber - 1 ? pos.column - 1 : 0); + } + return subtext; +} + +export function getEndPositionsAfterApplying(edits: readonly SingleTextEdit[]): Position[] { + const sortPerm = Permutation.createSortPermutation(edits, compareBy(e => e.range, Range.compareRangesUsingStarts)); + const edit = new TextEdit(sortPerm.apply(edits)); + const sortedNewRanges = edit.getNewRanges(); + const newRanges = sortPerm.inverse().apply(sortedNewRanges); + return newRanges.map(range => range.getEndPosition()); +} + +export function convertItemsToStableObservables(items: IObservable, store: DisposableStore): IObservable[]> { + const result = observableValue[]>('result', []); + const innerObservables: ISettableObservable[] = []; + + store.add(autorun(reader => { + const itemsValue = items.read(reader); + + transaction(tx => { + if (itemsValue.length !== innerObservables.length) { + innerObservables.length = itemsValue.length; + for (let i = 0; i < innerObservables.length; i++) { + if (!innerObservables[i]) { + innerObservables[i] = observableValue('item', itemsValue[i]); + } + } + result.set([...innerObservables], tx); + } + innerObservables.forEach((o, i) => o.set(itemsValue[i], tx)); + }); + })); + + return result; +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.css b/src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.css similarity index 90% rename from src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.css rename to src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.css index ea7193a13..1ed8b6d0b 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.css +++ b/src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.css @@ -36,7 +36,12 @@ .monaco-editor .ghost-text-decoration, .monaco-editor .ghost-text-decoration-preview, .monaco-editor .suggest-preview-text .ghost-text { - color: var(--vscode-editorGhostText-foreground) !important; + &.syntax-highlighted { + opacity: 0.7; + } + &:not(.syntax-highlighted) { + color: var(--vscode-editorGhostText-foreground); + } background-color: var(--vscode-editorGhostText-background); border: 1px solid var(--vscode-editorGhostText-border); } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts b/src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts new file mode 100644 index 000000000..8bff9b3ef --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts @@ -0,0 +1,365 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js'; +import { Event } from '../../../../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../../../../base/common/lifecycle.js'; +import { IObservable, autorun, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js'; +import * as strings from '../../../../../../base/common/strings.js'; +import { applyFontInfo } from '../../../../../browser/config/domFontInfo.js'; +import { ICodeEditor } from '../../../../../browser/editorBrowser.js'; +import { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js'; +import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js'; +import { OffsetEdit, SingleOffsetEdit } from '../../../../../common/core/offsetEdit.js'; +import { Position } from '../../../../../common/core/position.js'; +import { Range } from '../../../../../common/core/range.js'; +import { StringBuilder } from '../../../../../common/core/stringBuilder.js'; +import { ILanguageService } from '../../../../../common/languages/language.js'; +import { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js'; +import { LineEditWithAdditionalLines } from '../../../../../common/tokenizationTextModelPart.js'; +import { LineTokens } from '../../../../../common/tokens/lineTokens.js'; +import { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js'; +import { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js'; +import { InlineDecorationType } from '../../../../../common/viewModel.js'; +import { GhostText, GhostTextReplacement } from '../../model/ghostText.js'; +import { ColumnRange } from '../../utils.js'; +import './ghostTextView.css'; + +export interface IGhostTextWidgetModel { + readonly targetTextModel: IObservable; + readonly ghostText: IObservable; + readonly minReservedLineCount: IObservable; +} + +export class GhostTextView extends Disposable { + private readonly _isDisposed = observableValue(this, false); + private readonly _editorObs = observableCodeEditor(this._editor); + + constructor( + private readonly _editor: ICodeEditor, + private readonly _model: IGhostTextWidgetModel, + @ILanguageService private readonly _languageService: ILanguageService, + ) { + super(); + + this._register(toDisposable(() => { this._isDisposed.set(true, undefined); })); + this._register(this._editorObs.setDecorations(this.decorations)); + } + + private readonly _useSyntaxHighlighting = this._editorObs.getOption(EditorOption.inlineSuggest).map(v => v.syntaxHighlightingEnabled); + + private readonly uiState = derived(this, reader => { + if (this._isDisposed.read(reader)) { return undefined; } + const textModel = this._editorObs.model.read(reader); + if (textModel !== this._model.targetTextModel.read(reader)) { return undefined; } + const ghostText = this._model.ghostText.read(reader); + if (!ghostText) { return undefined; } + + const replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined; + + const syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader); + const extraClassName = syntaxHighlightingEnabled ? ' syntax-highlighted' : ''; + const { inlineTexts, additionalLines, hiddenRange } = computeGhostTextViewData(ghostText, textModel, 'ghost-text' + extraClassName); + + const edit = new OffsetEdit(inlineTexts.map(t => SingleOffsetEdit.insert(t.column - 1, t.text))); + const tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLineWithEdit(ghostText.lineNumber, new LineEditWithAdditionalLines( + edit, + additionalLines.map(l => l.content) + )) : undefined; + const newRanges = edit.getNewTextRanges(); + const inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.mainLineTokens?.getTokensInRange(newRanges[idx]) })); + + const tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => ({ + content: tokens?.additionalLines?.[idx] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec), + decorations: l.decorations, + })); + + return { + replacedRange, + inlineTexts: inlineTextsWithTokens, + additionalLines: tokenizedAdditionalLines, + hiddenRange, + lineNumber: ghostText.lineNumber, + additionalReservedLineCount: this._model.minReservedLineCount.read(reader), + targetTextModel: textModel, + syntaxHighlightingEnabled, + }; + }); + + private readonly decorations = derived(this, reader => { + const uiState = this.uiState.read(reader); + if (!uiState) { return []; } + + const decorations: IModelDeltaDecoration[] = []; + + const extraClassName = uiState.syntaxHighlightingEnabled ? ' syntax-highlighted' : ''; + + if (uiState.replacedRange) { + decorations.push({ + range: uiState.replacedRange.toRange(uiState.lineNumber), + options: { inlineClassName: 'inline-completion-text-to-replace' + extraClassName, description: 'GhostTextReplacement' } + }); + } + + if (uiState.hiddenRange) { + decorations.push({ + range: uiState.hiddenRange.toRange(uiState.lineNumber), + options: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', } + }); + } + + for (const p of uiState.inlineTexts) { + decorations.push({ + range: Range.fromPositions(new Position(uiState.lineNumber, p.column)), + options: { + description: 'ghost-text-decoration', + after: { + content: p.text, + tokens: p.tokens, + inlineClassName: p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration' + extraClassName, + cursorStops: InjectedTextCursorStops.Left + }, + showIfCollapsed: true, + } + }); + } + + return decorations; + }); + + private readonly additionalLinesWidget = this._register( + new AdditionalLinesWidget( + this._editor, + derived(reader => { + /** @description lines */ + const uiState = this.uiState.read(reader); + return uiState ? { + lineNumber: uiState.lineNumber, + additionalLines: uiState.additionalLines, + minReservedLineCount: uiState.additionalReservedLineCount, + targetTextModel: uiState.targetTextModel, + } : undefined; + }) + ) + ); + + public ownsViewZone(viewZoneId: string): boolean { + return this.additionalLinesWidget.viewZoneId === viewZoneId; + } +} + +function computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) { + const inlineTexts: { column: number; text: string; preview: boolean }[] = []; + const additionalLines: { content: string; decorations: LineDecoration[] }[] = []; + + function addToAdditionalLines(lines: readonly string[], className: string | undefined) { + if (additionalLines.length > 0) { + const lastLine = additionalLines[additionalLines.length - 1]; + if (className) { + lastLine.decorations.push(new LineDecoration( + lastLine.content.length + 1, + lastLine.content.length + 1 + lines[0].length, + className, + InlineDecorationType.Regular + )); + } + lastLine.content += lines[0]; + + lines = lines.slice(1); + } + for (const line of lines) { + additionalLines.push({ + content: line, + decorations: className ? [new LineDecoration( + 1, + line.length + 1, + className, + InlineDecorationType.Regular + )] : [] + }); + } + } + + const textBufferLine = textModel.getLineContent(ghostText.lineNumber); + + let hiddenTextStartColumn: number | undefined = undefined; + let lastIdx = 0; + for (const part of ghostText.parts) { + let lines = part.lines; + if (hiddenTextStartColumn === undefined) { + inlineTexts.push({ column: part.column, text: lines[0], preview: part.preview }); + lines = lines.slice(1); + } else { + addToAdditionalLines([textBufferLine.substring(lastIdx, part.column - 1)], undefined); + } + + if (lines.length > 0) { + addToAdditionalLines(lines, ghostTextClassName); + if (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) { + hiddenTextStartColumn = part.column; + } + } + + lastIdx = part.column - 1; + } + if (hiddenTextStartColumn !== undefined) { + addToAdditionalLines([textBufferLine.substring(lastIdx)], undefined); + } + + const hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined; + + return { + inlineTexts, + additionalLines, + hiddenRange, + }; +} + +export class AdditionalLinesWidget extends Disposable { + private _viewZoneId: string | undefined = undefined; + public get viewZoneId(): string | undefined { return this._viewZoneId; } + + private readonly editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter( + this.editor.onDidChangeConfiguration, + e => e.hasChanged(EditorOption.disableMonospaceOptimizations) + || e.hasChanged(EditorOption.stopRenderingLineAfter) + || e.hasChanged(EditorOption.renderWhitespace) + || e.hasChanged(EditorOption.renderControlCharacters) + || e.hasChanged(EditorOption.fontLigatures) + || e.hasChanged(EditorOption.fontInfo) + || e.hasChanged(EditorOption.lineHeight) + )); + + constructor( + private readonly editor: ICodeEditor, + private readonly lines: IObservable<{ + targetTextModel: ITextModel; + lineNumber: number; + additionalLines: LineData[]; + minReservedLineCount: number; + } | undefined> + ) { + super(); + + this._register(autorun(reader => { + /** @description update view zone */ + const lines = this.lines.read(reader); + this.editorOptionsChanged.read(reader); + + if (lines) { + this.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount); + } else { + this.clear(); + } + })); + } + + public override dispose(): void { + super.dispose(); + this.clear(); + } + + private clear(): void { + this.editor.changeViewZones((changeAccessor) => { + if (this._viewZoneId) { + changeAccessor.removeZone(this._viewZoneId); + this._viewZoneId = undefined; + } + }); + } + + private updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void { + const textModel = this.editor.getModel(); + if (!textModel) { + return; + } + + const { tabSize } = textModel.getOptions(); + + this.editor.changeViewZones((changeAccessor) => { + if (this._viewZoneId) { + changeAccessor.removeZone(this._viewZoneId); + this._viewZoneId = undefined; + } + + const heightInLines = Math.max(additionalLines.length, minReservedLineCount); + if (heightInLines > 0) { + const domNode = document.createElement('div'); + renderLines(domNode, tabSize, additionalLines, this.editor.getOptions()); + + this._viewZoneId = changeAccessor.addZone({ + afterLineNumber: lineNumber, + heightInLines: heightInLines, + domNode, + afterColumnAffinity: PositionAffinity.Right + }); + } + }); + } +} + +export interface LineData { + content: LineTokens; // Must not contain a linebreak! + decorations: LineDecoration[]; +} + +function renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions): void { + const disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations); + const stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter); + // To avoid visual confusion, we don't want to render visible whitespace + const renderWhitespace = 'none'; + const renderControlCharacters = opts.get(EditorOption.renderControlCharacters); + const fontLigatures = opts.get(EditorOption.fontLigatures); + const fontInfo = opts.get(EditorOption.fontInfo); + const lineHeight = opts.get(EditorOption.lineHeight); + + const sb = new StringBuilder(10000); + sb.appendString('
'); + + for (let i = 0, len = lines.length; i < len; i++) { + const lineData = lines[i]; + const lineTokens = lineData.content; + sb.appendString('
'); + + const line = lineTokens.getLineContent(); + const isBasicASCII = strings.isBasicASCII(line); + const containsRTL = strings.containsRTL(line); + + renderViewLine(new RenderLineInput( + (fontInfo.isMonospace && !disableMonospaceOptimizations), + fontInfo.canUseHalfwidthRightwardsArrow, + line, + false, + isBasicASCII, + containsRTL, + 0, + lineTokens, + lineData.decorations, + tabSize, + 0, + fontInfo.spaceWidth, + fontInfo.middotWidth, + fontInfo.wsmiddotWidth, + stopRenderingLineAfter, + renderWhitespace, + renderControlCharacters, + fontLigatures !== EditorFontLigatures.OFF, + null + ), sb); + + sb.appendString('
'); + } + sb.appendString('
'); + + applyFontInfo(domNode, fontInfo); + const html = sb.build(); + const trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html; + domNode.innerHTML = trustedhtml as string; +} + +export const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value }); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.ts b/src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.ts deleted file mode 100644 index 843a13eca..000000000 --- a/src/vs/editor/contrib/inlineCompletions/browser/view/ghostTextView.ts +++ /dev/null @@ -1,328 +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 { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { Event } from 'vs/base/common/event'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, derived, observableFromEvent, observableSignalFromEvent, observableValue } from 'vs/base/common/observable'; -import * as strings from 'vs/base/common/strings'; -import 'vs/css!./ghostTextView'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from 'vs/editor/common/model'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { InlineDecorationType } from 'vs/editor/common/viewModel'; -import { GhostText, GhostTextReplacement } from 'vs/editor/contrib/inlineCompletions/browser/model/ghostText'; -import { ColumnRange, applyObservableDecorations } from 'vs/editor/contrib/inlineCompletions/browser/utils'; - -export const GHOST_TEXT_DESCRIPTION = 'ghost-text'; -export interface IGhostTextWidgetModel { - readonly targetTextModel: IObservable; - readonly ghostText: IObservable; - readonly minReservedLineCount: IObservable; -} - -export class GhostTextView extends Disposable { - private readonly isDisposed = observableValue(this, false); - private readonly currentTextModel = observableFromEvent(this, this.editor.onDidChangeModel, () => /** @description editor.model */ this.editor.getModel()); - - constructor( - private readonly editor: ICodeEditor, - private readonly model: IGhostTextWidgetModel, - @ILanguageService private readonly languageService: ILanguageService, - ) { - super(); - - this._register(toDisposable(() => { this.isDisposed.set(true, undefined); })); - this._register(applyObservableDecorations(this.editor, this.decorations)); - } - - private readonly uiState = derived(this, reader => { - if (this.isDisposed.read(reader)) { - return undefined; - } - const textModel = this.currentTextModel.read(reader); - if (textModel !== this.model.targetTextModel.read(reader)) { - return undefined; - } - const ghostText = this.model.ghostText.read(reader); - if (!ghostText) { - return undefined; - } - - const replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined; - - const inlineTexts: { column: number; text: string; preview: boolean }[] = []; - const additionalLines: LineData[] = []; - - function addToAdditionalLines(lines: readonly string[], className: string | undefined) { - if (additionalLines.length > 0) { - const lastLine = additionalLines[additionalLines.length - 1]; - if (className) { - lastLine.decorations.push(new LineDecoration(lastLine.content.length + 1, lastLine.content.length + 1 + lines[0].length, className, InlineDecorationType.Regular)); - } - lastLine.content += lines[0]; - - lines = lines.slice(1); - } - for (const line of lines) { - additionalLines.push({ - content: line, - decorations: className ? [new LineDecoration(1, line.length + 1, className, InlineDecorationType.Regular)] : [] - }); - } - } - - const textBufferLine = textModel.getLineContent(ghostText.lineNumber); - - let hiddenTextStartColumn: number | undefined = undefined; - let lastIdx = 0; - for (const part of ghostText.parts) { - let lines = part.lines; - if (hiddenTextStartColumn === undefined) { - inlineTexts.push({ - column: part.column, - text: lines[0], - preview: part.preview, - }); - lines = lines.slice(1); - } else { - addToAdditionalLines([textBufferLine.substring(lastIdx, part.column - 1)], undefined); - } - - if (lines.length > 0) { - addToAdditionalLines(lines, GHOST_TEXT_DESCRIPTION); - if (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) { - hiddenTextStartColumn = part.column; - } - } - - lastIdx = part.column - 1; - } - if (hiddenTextStartColumn !== undefined) { - addToAdditionalLines([textBufferLine.substring(lastIdx)], undefined); - } - - const hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined; - - return { - replacedRange, - inlineTexts, - additionalLines, - hiddenRange, - lineNumber: ghostText.lineNumber, - additionalReservedLineCount: this.model.minReservedLineCount.read(reader), - targetTextModel: textModel, - }; - }); - - private readonly decorations = derived(this, reader => { - const uiState = this.uiState.read(reader); - if (!uiState) { - return []; - } - - const decorations: IModelDeltaDecoration[] = []; - - if (uiState.replacedRange) { - decorations.push({ - range: uiState.replacedRange.toRange(uiState.lineNumber), - options: { inlineClassName: 'inline-completion-text-to-replace', description: 'GhostTextReplacement' } - }); - } - - if (uiState.hiddenRange) { - decorations.push({ - range: uiState.hiddenRange.toRange(uiState.lineNumber), - options: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', } - }); - } - - for (const p of uiState.inlineTexts) { - decorations.push({ - range: Range.fromPositions(new Position(uiState.lineNumber, p.column)), - options: { - description: GHOST_TEXT_DESCRIPTION, - after: { content: p.text, inlineClassName: p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration', cursorStops: InjectedTextCursorStops.Left }, - showIfCollapsed: true, - } - }); - } - - return decorations; - }); - - private readonly additionalLinesWidget = this._register( - new AdditionalLinesWidget( - this.editor, - this.languageService.languageIdCodec, - derived(reader => { - /** @description lines */ - const uiState = this.uiState.read(reader); - return uiState ? { - lineNumber: uiState.lineNumber, - additionalLines: uiState.additionalLines, - minReservedLineCount: uiState.additionalReservedLineCount, - targetTextModel: uiState.targetTextModel, - } : undefined; - }) - ) - ); - - public ownsViewZone(viewZoneId: string): boolean { - return this.additionalLinesWidget.viewZoneId === viewZoneId; - } -} - -export class AdditionalLinesWidget extends Disposable { - private _viewZoneId: string | undefined = undefined; - public get viewZoneId(): string | undefined { return this._viewZoneId; } - - private readonly editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter( - this.editor.onDidChangeConfiguration, - e => e.hasChanged(EditorOption.disableMonospaceOptimizations) - || e.hasChanged(EditorOption.stopRenderingLineAfter) - || e.hasChanged(EditorOption.renderWhitespace) - || e.hasChanged(EditorOption.renderControlCharacters) - || e.hasChanged(EditorOption.fontLigatures) - || e.hasChanged(EditorOption.fontInfo) - || e.hasChanged(EditorOption.lineHeight) - )); - - constructor( - private readonly editor: ICodeEditor, - private readonly languageIdCodec: ILanguageIdCodec, - private readonly lines: IObservable<{ targetTextModel: ITextModel; lineNumber: number; additionalLines: LineData[]; minReservedLineCount: number } | undefined> - ) { - super(); - - this._register(autorun(reader => { - /** @description update view zone */ - const lines = this.lines.read(reader); - this.editorOptionsChanged.read(reader); - - if (lines) { - this.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount); - } else { - this.clear(); - } - })); - } - - public override dispose(): void { - super.dispose(); - this.clear(); - } - - private clear(): void { - this.editor.changeViewZones((changeAccessor) => { - if (this._viewZoneId) { - changeAccessor.removeZone(this._viewZoneId); - this._viewZoneId = undefined; - } - }); - } - - private updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void { - const textModel = this.editor.getModel(); - if (!textModel) { - return; - } - - const { tabSize } = textModel.getOptions(); - - this.editor.changeViewZones((changeAccessor) => { - if (this._viewZoneId) { - changeAccessor.removeZone(this._viewZoneId); - this._viewZoneId = undefined; - } - - const heightInLines = Math.max(additionalLines.length, minReservedLineCount); - if (heightInLines > 0) { - const domNode = document.createElement('div'); - renderLines(domNode, tabSize, additionalLines, this.editor.getOptions(), this.languageIdCodec); - - this._viewZoneId = changeAccessor.addZone({ - afterLineNumber: lineNumber, - heightInLines: heightInLines, - domNode, - afterColumnAffinity: PositionAffinity.Right - }); - } - }); - } -} - -export interface LineData { - content: string; // Must not contain a linebreak! - decorations: LineDecoration[]; -} - -function renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, languageIdCodec: ILanguageIdCodec): void { - const disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations); - const stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter); - // To avoid visual confusion, we don't want to render visible whitespace - const renderWhitespace = 'none'; - const renderControlCharacters = opts.get(EditorOption.renderControlCharacters); - const fontLigatures = opts.get(EditorOption.fontLigatures); - const fontInfo = opts.get(EditorOption.fontInfo); - const lineHeight = opts.get(EditorOption.lineHeight); - - const sb = new StringBuilder(10000); - sb.appendString('
'); - - for (let i = 0, len = lines.length; i < len; i++) { - const lineData = lines[i]; - const line = lineData.content; - sb.appendString('
'); - - const isBasicASCII = strings.isBasicASCII(line); - const containsRTL = strings.containsRTL(line); - const lineTokens = LineTokens.createEmpty(line, languageIdCodec); - - renderViewLine(new RenderLineInput( - (fontInfo.isMonospace && !disableMonospaceOptimizations), - fontInfo.canUseHalfwidthRightwardsArrow, - line, - false, - isBasicASCII, - containsRTL, - 0, - lineTokens, - lineData.decorations, - tabSize, - 0, - fontInfo.spaceWidth, - fontInfo.middotWidth, - fontInfo.wsmiddotWidth, - stopRenderingLineAfter, - renderWhitespace, - renderControlCharacters, - fontLigatures !== EditorFontLigatures.OFF, - null - ), sb); - - sb.appendString('
'); - } - sb.appendString('
'); - - applyFontInfo(domNode, fontInfo); - const html = sb.build(); - const trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html; - domNode.innerHTML = trustedhtml as string; -} - -export const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value }); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.css b/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.css new file mode 100644 index 000000000..6c65ff7d8 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.css @@ -0,0 +1,138 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/* + @keyframes blink { 50% { border-color: orange; } } +*/ + +.monaco-editor div.inline-edits-view-indicator { + display: flex; + + z-index: 1000000; + height: 20px; + + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); + border-radius: 3px; + + align-items: center; + padding: 2px; + padding-right: 10px; + margin: 0 4px; + + /* + animation: blink 1s; + animation-iteration-count: 3; + */ + + opacity: 0; + + &.contained { + transition: opacity 0.2s ease-in-out; + transition-delay: 0.4s; + } + + + &.top { + opacity: 1; + + .icon { + transform: rotate(90deg); + } + } + + &.bottom { + opacity: 1; + + .icon { + transform: rotate(-90deg); + } + } + + .icon { + display: flex; + align-items: center; + margin: 0 2px; + transform: none; + transition: transform 0.2s ease-in-out; + } + + .label { + margin: 0 2px; + + display: flex; + justify-content: center; + width: 100%; + } +} + +.monaco-editor div.inline-edits-view { + --widget-color: var(--vscode-editorHoverWidget-background); + + &.toolbarDropdownVisible, + .editorContainer:hover { + .toolbar { + display: block; + } + } + + .editorContainer { + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); + border-radius: 3px; + + .toolbar { + display: none; + border-top: 1px solid rgba(69, 69, 69, 0.5); + background-color: var(--vscode-editorHoverWidget-statusBarBackground); + + a { + color: var(--vscode-foreground); + } + + a:hover { + color: var(--vscode-foreground); + } + + .keybinding { + display: flex; + margin-left: 4px; + opacity: 0.6; + } + + .keybinding .monaco-keybinding-key { + font-size: 8px; + padding: 2px 3px; + } + + .availableSuggestionCount a { + display: flex; + min-width: 19px; + justify-content: center; + } + + .inlineSuggestionStatusBarItemLabel { + margin-right: 2px; + } + + } + + .preview { + .monaco-editor { + .view-overlays .current-line-exact { + border: none; + } + + .current-line-margin { + border: none; + } + + --vscode-editor-background: var(--widget-color); + } + } + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.ts b/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.ts new file mode 100644 index 000000000..fc42e61d8 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.ts @@ -0,0 +1,418 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { h } from '../../../../../../base/browser/dom.js'; +import { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { numberComparator } from '../../../../../../base/common/arrays.js'; +import { findFirstMin } from '../../../../../../base/common/arraysFind.js'; +import { Codicon } from '../../../../../../base/common/codicons.js'; +import { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js'; +import { Disposable } from '../../../../../../base/common/lifecycle.js'; +import { autorun, constObservable, derived, derivedDisposable, derivedWithCancellationToken, IObservable, observableFromEvent, ObservablePromise } from '../../../../../../base/common/observable.js'; +import { getIndentationLength, splitLines } from '../../../../../../base/common/strings.js'; +import { MenuWorkbenchToolBar } from '../../../../../../platform/actions/browser/toolbar.js'; +import { MenuId, MenuItemAction } from '../../../../../../platform/actions/common/actions.js'; +import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; +import { ICodeEditor } from '../../../../../browser/editorBrowser.js'; +import { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js'; +import { EmbeddedCodeEditorWidget } from '../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { IDiffProviderFactoryService } from '../../../../../browser/widget/diffEditor/diffProviderFactoryService.js'; +import { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecorationEmpty, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from '../../../../../browser/widget/diffEditor/registrations.contribution.js'; +import { appendRemoveOnDispose, applyStyle } from '../../../../../browser/widget/diffEditor/utils.js'; +import { EditorOption } from '../../../../../common/config/editorOptions.js'; +import { LineRange } from '../../../../../common/core/lineRange.js'; +import { OffsetRange } from '../../../../../common/core/offsetRange.js'; +import { Position } from '../../../../../common/core/position.js'; +import { Range } from '../../../../../common/core/range.js'; +import { ArrayText, SingleTextEdit, TextEdit } from '../../../../../common/core/textEdit.js'; +import { TextLength } from '../../../../../common/core/textLength.js'; +import { lineRangeMappingFromRangeMappings, RangeMapping } from '../../../../../common/diff/rangeMapping.js'; +import { IModelDeltaDecoration } from '../../../../../common/model.js'; +import { TextModel } from '../../../../../common/model/textModel.js'; +import { TextModelText } from '../../../../../common/model/textModelText.js'; +import { IModelService } from '../../../../../common/services/model.js'; +import { InlineEdit } from '../../model/inlineEdit.js'; +import './inlineEditsView.css'; +import { applyEditToModifiedRangeMappings, maxLeftInRange, Point, StatusBarViewItem, UniqueUriGenerator } from './utils.js'; + +export class InlineEditsViewAndDiffProducer extends Disposable { + public static readonly hot = createHotClass(InlineEditsViewAndDiffProducer); + + private readonly _modelUriGenerator = new UniqueUriGenerator('inline-edits'); + + private readonly _originalModel = derivedDisposable(() => this._modelService.createModel( + '', null, this._modelUriGenerator.getUniqueUri())).keepObserved(this._store); + private readonly _modifiedModel = derivedDisposable(() => this._modelService.createModel( + '', null, this._modelUriGenerator.getUniqueUri())).keepObserved(this._store); + + private readonly _inlineEditPromise = derivedWithCancellationToken | undefined>(this, (reader, token) => { + const edit = this._edit.read(reader); + if (!edit) { return undefined; } + const range = edit.range; + if (edit.text.trim() === '') { + return undefined; + } + + this._originalModel.get().setValue(this._editor.getModel()!.getValueInRange(range)); + this._modifiedModel.get().setValue(edit.text); + + const d = this._diffProviderFactoryService.createDiffProvider({ diffAlgorithm: 'advanced' }); + return ObservablePromise.fromFn(async () => { + const result = await d.computeDiff(this._originalModel.get(), this._modifiedModel.get(), { + computeMoves: false, + ignoreTrimWhitespace: false, + maxComputationTimeMs: 1000, + }, token); + + if (result.identical) { return undefined; } + + const rangeStartPos = Range.lift(edit.range).getStartPosition(); + const innerChanges = result.changes.flatMap(c => c.innerChanges!); + + function addRangeToPos(pos: Position, range: Range): Range { + const start = TextLength.fromPosition(range.getStartPosition()); + return TextLength.ofRange(range).createRange(start.addToPosition(pos)); + } + + const edits = innerChanges.map(c => new SingleTextEdit(addRangeToPos(rangeStartPos, c.originalRange), this._modifiedModel.get()!.getValueInRange(c.modifiedRange))); + + /*if (edit.range.startColumn !== 1) { + const range = edit.range; + const textBefore = this._editor.getModel()!.getValueInRange(new Range(range.startLineNumber, 1, range.startLineNumber, range.startColumn)); + const skippedTextEdit = TextEdit.insert(new Position(1, 1), textBefore); + innerChanges = applyEditToOriginalRangeMappings(innerChanges, skippedTextEdit); + }*/ + + return new InlineEditWithChanges(new TextEdit(edits)); + }); + }); + + private readonly _inlineEdit = this._inlineEditPromise.map((p, reader) => p?.promiseResult?.read(reader)?.data); + + constructor( + private readonly _editor: ICodeEditor, + private readonly _edit: IObservable, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @IDiffProviderFactoryService private readonly _diffProviderFactoryService: IDiffProviderFactoryService, + @IModelService private readonly _modelService: IModelService, + ) { + super(); + + this._register(new InlineEditsView(this._editor, this._inlineEdit, this._instantiationService)); + } +} + +export class InlineEditWithChanges { + public readonly originalLineRange = LineRange.fromRangeInclusive(RangeMapping.fromEditJoin(this.diffedTextEdit).originalRange); + public readonly modifiedLineRange = LineRange.fromRangeInclusive(RangeMapping.fromEditJoin(this.diffedTextEdit).modifiedRange); + + constructor( + public readonly diffedTextEdit: TextEdit, + ) { + } +} + +export class InlineEditsView extends Disposable { + private readonly _editorObs = observableCodeEditor(this._editor); + + private readonly _elements = h('div.inline-edits-view', { + style: { + position: 'absolute', + overflow: 'visible', + top: '0px', + left: '0px', + }, + }, [ + h('div.editorContainer@editorContainer', { style: { position: 'absolute' } }, [ + h('div.preview@editor', { style: {} }), + h('div.toolbar@toolbar', { style: {} }), + ]), + ]); + + private readonly _indicator = h('div.inline-edits-view-indicator', { + style: { + position: 'absolute', + overflow: 'visible', + }, + }, [ + h('div.icon', {}, [ + renderIcon(Codicon.arrowLeft), + ]), + h('div.label', {}, [ + ' inline edit' + ]) + ]); + + private readonly _previewEditorWidth = derived(this, reader => { + const edit = this._edit.read(reader); + if (!edit) { return 0; } + + return maxLeftInRange(this._previewEditorObs, edit.modifiedLineRange, reader); + }); + + constructor( + private readonly _editor: ICodeEditor, + private readonly _edit: IObservable, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + ) { + super(); + const visible = derived(this, reader => this._edit.read(reader) !== undefined); + this._register(applyStyle(this._elements.root, { + display: derived(this, reader => visible.read(reader) ? 'block' : 'none') + })); + + this._register(appendRemoveOnDispose(this._editor.getDomNode()!, this._elements.root)); + + this._register(observableCodeEditor(_editor).createOverlayWidget({ + domNode: this._elements.root, + position: constObservable(null), + allowEditorOverflow: false, + minContentWidthInPx: derived(reader => { + const x = this._layout1.read(reader)?.left; + if (x === undefined) { return 0; } + const width = this._previewEditorWidth.read(reader); + return x + width; + }), + })); + + this._register(observableCodeEditor(_editor).createOverlayWidget({ + domNode: this._indicator.root, + position: constObservable(null), + allowEditorOverflow: false, + minContentWidthInPx: constObservable(0), + })); + + this._previewEditor.setModel(this._previewTextModel); + + this._register(this._previewEditorObs.setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? []))); + + this._register(observableCodeEditor(_editor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? []))); + + this._register(autorun(reader => { + const layoutInfo = this._layout.read(reader); + if (!layoutInfo) { + this._indicator.root.style.visibility = 'hidden'; + return; + } + this._indicator.root.style.visibility = ''; + + const { topEdit, editHeight } = layoutInfo; + + this._elements.editorContainer.style.top = `${topEdit.y}px`; + this._elements.editorContainer.style.left = `${topEdit.x}px`; + + const width = this._previewEditorWidth.read(reader); + this._previewEditor.layout({ height: editHeight, width }); + + const i = this._editorObs.layoutInfo.read(reader); + + + const range = new OffsetRange(0, i.height - 30); + + this._indicator.root.classList.toggle('top', topEdit.y < range.start); + this._indicator.root.classList.toggle('bottom', topEdit.y > range.endExclusive); + this._indicator.root.classList.toggle('contained', range.contains(topEdit.y)); + + + this._indicator.root.style.top = `${range.clip(topEdit.y)}px`; + this._indicator.root.style.right = `${i.minimap.minimapWidth + i.verticalScrollbarWidth}px`; + })); + + const toolbarDropdownVisible = observableFromEvent(this, this._toolbar.onDidChangeDropdownVisibility, (e) => e ?? false); + + this._register(autorun(reader => { + this._elements.root.classList.toggle('toolbarDropdownVisible', toolbarDropdownVisible.read(reader)); + })); + } + + private readonly _uiState = derived(this, reader => { + const edit = this._edit.read(reader); + if (!edit) { return undefined; } + + let newText = edit.diffedTextEdit.apply(new TextModelText(this._editor.getModel()!)); + + let mappings = RangeMapping.fromEdit(edit.diffedTextEdit); + + const newLines = splitLines(newText); + + function offsetRangeToRange(offsetRange: OffsetRange, startPos: Position): Range { + return new Range( + startPos.lineNumber, + startPos.column + offsetRange.start, + startPos.lineNumber, + startPos.column + offsetRange.endExclusive, + ); + } + + const edits: SingleTextEdit[] = []; + const minIndent = findFirstMin(edit.modifiedLineRange.mapToLineArray(l => getIndentationLength(newLines[l - 1])), numberComparator)!; + edit.modifiedLineRange.forEach(lineNumber => { + edits.push(new SingleTextEdit(offsetRangeToRange(new OffsetRange(0, minIndent), new Position(lineNumber, 1)), '')); + }); + const indentationAdjustmentEdit = new TextEdit(edits); + + newText = indentationAdjustmentEdit.applyToString(newText); + mappings = applyEditToModifiedRangeMappings(mappings, indentationAdjustmentEdit); + + const diff = lineRangeMappingFromRangeMappings(mappings, new TextModelText(this._editor.getModel()!), new ArrayText(newLines)); + + return { + diff, + edit, + newText, + newTextLineCount: edit.modifiedLineRange.length, + }; + }); + + protected readonly _toolbar = this._register(this._instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.toolbar, MenuId.InlineEditsActions, { + menuOptions: { renderShortTitle: true }, + toolbarOptions: { + primaryGroup: g => g.startsWith('primary'), + }, + actionViewItemProvider: (action, options) => { + if (action instanceof MenuItemAction) { + return this._instantiationService.createInstance(StatusBarViewItem, action, undefined); + } + return undefined; + }, + })); + private readonly _previewTextModel = this._register(this._instantiationService.createInstance( + TextModel, + '', + this._editor.getModel()!.getLanguageId(), + { ...TextModel.DEFAULT_CREATION_OPTIONS, bracketPairColorizationOptions: { enabled: true, independentColorPoolPerBracketType: false } }, + null + )); + + private readonly _previewEditor = this._register(this._instantiationService.createInstance( + EmbeddedCodeEditorWidget, + this._elements.editor, + { + glyphMargin: false, + lineNumbers: 'off', + minimap: { enabled: false }, + guides: { + indentation: false, + bracketPairs: false, + bracketPairsHorizontal: false, + highlightActiveIndentation: false, + }, + folding: false, + selectOnLineNumbers: false, + selectionHighlight: false, + columnSelection: false, + overviewRulerBorder: false, + overviewRulerLanes: 0, + lineDecorationsWidth: 0, + lineNumbersMinChars: 0, + bracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false }, + scrollBeyondLastLine: false, + scrollbar: { + vertical: 'hidden', + horizontal: 'hidden', + }, + readOnly: true, + }, + { contributions: [], }, + this._editor + )); + + private readonly _previewEditorObs = observableCodeEditor(this._previewEditor); + + private readonly _ensureModelTextIsSet = derived(reader => { + const uiState = this._uiState.read(reader); + if (!uiState) { return; } + + this._previewTextModel.setValue(uiState.newText); + const range = uiState.edit.originalLineRange; + + this._previewEditor.setHiddenAreas([ + new Range(1, 1, range.startLineNumber - 1, 1), + new Range(range.startLineNumber + uiState.newTextLineCount, 1, this._previewTextModel.getLineCount() + 1, 1), + ], undefined, true); + + }).recomputeInitiallyAndOnChange(this._store); + + private readonly _decorations = derived(this, (reader) => { + this._ensureModelTextIsSet.read(reader); + const s = this._uiState.read(reader); + if (!s) { return undefined; } + const diff = s.diff; + const originalDecorations: IModelDeltaDecoration[] = []; + const modifiedDecorations: IModelDeltaDecoration[] = []; + + for (const m of diff) { + if (m.modified.isEmpty || m.original.isEmpty) { + if (!m.original.isEmpty) { + originalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration }); + } + if (!m.modified.isEmpty) { + modifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration }); + } + } else { + for (const i of m.innerChanges || []) { + // Don't show empty markers outside the line range + if (m.original.contains(i.originalRange.startLineNumber)) { + originalDecorations.push({ + range: i.originalRange, options: i.originalRange.isEmpty() ? diffDeleteDecorationEmpty : { + className: 'char-delete', + description: 'char-delete', + shouldFillLineOnLineBreak: false, + } + }); + } + if (m.modified.contains(i.modifiedRange.startLineNumber)) { + modifiedDecorations.push({ range: i.modifiedRange, options: i.modifiedRange.isEmpty() ? diffAddDecorationEmpty : diffAddDecoration }); + } + } + } + } + + return { originalDecorations, modifiedDecorations }; + }); + + private readonly _layout1 = derived(this, reader => { + const inlineEdit = this._edit.read(reader); + if (!inlineEdit) { return null; } + + const maxLeft = maxLeftInRange(this._editorObs, inlineEdit.originalLineRange, reader); + + const contentLeft = this._editorObs.layoutInfoContentLeft.read(reader); + return { left: contentLeft + maxLeft }; + }); + + private readonly _layout = derived(this, (reader) => { + const inlineEdit = this._edit.read(reader); + if (!inlineEdit) { return null; } + + const range = inlineEdit.originalLineRange; + + const scrollLeft = this._editorObs.scrollLeft.read(reader); + + const left = this._layout1.read(reader)!.left + 20 - scrollLeft; + + const selectionTop = this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader); + const selectionBottom = this._editor.getTopForLineNumber(range.endLineNumberExclusive) - this._editorObs.scrollTop.read(reader); + + const topCode = new Point(left, selectionTop); + const bottomCode = new Point(left, selectionBottom); + const codeHeight = selectionBottom - selectionTop; + + const codeEditDist = 50; + const editHeight = this._editor.getOption(EditorOption.lineHeight) * inlineEdit.modifiedLineRange.length; + + const topEdit = new Point(left + codeEditDist, selectionTop); + const bottomEdit = new Point(left + codeEditDist, selectionBottom); + + return { + topCode, + bottomCode, + codeHeight, + topEdit, + bottomEdit, + editHeight, + }; + }); +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils.ts b/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils.ts new file mode 100644 index 000000000..ee3c11fcd --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils.ts @@ -0,0 +1,86 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { h } from '../../../../../../base/browser/dom.js'; +import { KeybindingLabel, unthemedKeybindingLabelOptions } from '../../../../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { IReader } from '../../../../../../base/common/observable.js'; +import { OS } from '../../../../../../base/common/platform.js'; +import { URI } from '../../../../../../base/common/uri.js'; +import { MenuEntryActionViewItem } from '../../../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { ObservableCodeEditor } from '../../../../../browser/observableCodeEditor.js'; +import { LineRange } from '../../../../../common/core/lineRange.js'; +import { TextEdit } from '../../../../../common/core/textEdit.js'; +import { RangeMapping } from '../../../../../common/diff/rangeMapping.js'; + +export function maxLeftInRange(editor: ObservableCodeEditor, range: LineRange, reader: IReader): number { + editor.layoutInfo.read(reader); + editor.value.read(reader); + const model = editor.model.get()!; + if (!model) { return 0; } + let maxLeft = 0; + + editor.scrollTop.read(reader); + for (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) { + const column = model.getLineMaxColumn(i); + const left = editor.editor.getOffsetForColumn(i, column); + maxLeft = Math.max(maxLeft, left); + } + return maxLeft; +} + +export class StatusBarViewItem extends MenuEntryActionViewItem { + protected override updateLabel() { + const kb = this._keybindingService.lookupKeybinding(this._action.id, this._contextKeyService); + if (!kb) { + return super.updateLabel(); + } + if (this.label) { + const div = h('div.keybinding').root; + const keybindingLabel = this._register(new KeybindingLabel(div, OS, { disableTitle: true, ...unthemedKeybindingLabelOptions })); + keybindingLabel.set(kb); + this.label.textContent = this._action.label; + this.label.appendChild(div); + this.label.classList.add('inlineSuggestionStatusBarItemLabel'); + } + } + + protected override updateTooltip(): void { + // NOOP, disable tooltip + } +} + +export class Point { + constructor( + public readonly x: number, + public readonly y: number, + ) { } + + public add(other: Point): Point { + return new Point(this.x + other.x, this.y + other.y); + } + + public deltaX(delta: number): Point { + return new Point(this.x + delta, this.y); + } +} +export class UniqueUriGenerator { + private static _modelId = 0; + + constructor( + public readonly scheme: string + ) { } + + public getUniqueUri(): URI { + return URI.from({ scheme: this.scheme, path: new Date().toString() + String(UniqueUriGenerator._modelId++) }); + } +} +export function applyEditToModifiedRangeMappings(rangeMapping: RangeMapping[], edit: TextEdit): RangeMapping[] { + const updatedMappings: RangeMapping[] = []; + for (const m of rangeMapping) { + const updatedRange = edit.mapRange(m.modifiedRange); + updatedMappings.push(new RangeMapping(m.originalRange, updatedRange)); + } + return updatedMappings; +} diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsModel.test.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsModel.test.ts index 852b9d331..6ba5f06b1 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsModel.test.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsModel.test.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Position } from 'vs/editor/common/core/position'; -import { getSecondaryEdits } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { Range } from 'vs/editor/common/core/range'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Position } from '../../../../common/core/position.js'; +import { getSecondaryEdits } from '../../browser/model/inlineCompletionsModel.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { Range } from '../../../../common/core/range.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('inlineCompletionModel', () => { diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts index 089471c4a..28bd5ab66 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts @@ -4,25 +4,25 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { timeout } from 'vs/base/common/async'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { InlineCompletionsProvider } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { GhostTextContext, MockInlineCompletionsProvider } from 'vs/editor/contrib/inlineCompletions/test/browser/utils'; -import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withAsyncTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { Selection } from 'vs/editor/common/core/selection'; -import { computeGhostText } from 'vs/editor/contrib/inlineCompletions/browser/model/singleTextEdit'; +import { timeout } from '../../../../../base/common/async.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { InlineCompletionsProvider } from '../../../../common/languages.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { ViewModel } from '../../../../common/viewModel/viewModelImpl.js'; +import { InlineCompletionsController } from '../../browser/controller/inlineCompletionsController.js'; +import { InlineCompletionsModel } from '../../browser/model/inlineCompletionsModel.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { GhostTextContext, MockInlineCompletionsProvider } from './utils.js'; +import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withAsyncTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { IAccessibilitySignalService } from '../../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { computeGhostText } from '../../browser/model/computeGhostText.js'; suite('Inline Completions', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts index 11f88ae2f..aa8fe85b0 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { mock } from 'vs/base/test/common/mock'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { Range } from 'vs/editor/common/core/range'; -import { CompletionItemKind, CompletionItemProvider } from 'vs/editor/common/languages'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { GhostTextContext } from 'vs/editor/contrib/inlineCompletions/test/browser/utils'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; -import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withAsyncTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { IMenu, IMenuService } from 'vs/platform/actions/common/actions'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; +import { timeout } from '../../../../../base/common/async.js'; +import { Event } from '../../../../../base/common/event.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { Range } from '../../../../common/core/range.js'; +import { CompletionItemKind, CompletionItemProvider } from '../../../../common/languages.js'; +import { IEditorWorkerService } from '../../../../common/services/editorWorker.js'; +import { ViewModel } from '../../../../common/viewModel/viewModelImpl.js'; +import { GhostTextContext } from './utils.js'; +import { SnippetController2 } from '../../../snippet/browser/snippetController2.js'; +import { SuggestController } from '../../../suggest/browser/suggestController.js'; +import { ISuggestMemoryService } from '../../../suggest/browser/suggestMemory.js'; +import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withAsyncTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { IMenu, IMenuService } from '../../../../../platform/actions/common/actions.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { MockKeybindingService } from '../../../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { ILogService, NullLogService } from '../../../../../platform/log/common/log.js'; +import { InMemoryStorageService, IStorageService } from '../../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../../../platform/telemetry/common/telemetryUtils.js'; import assert from 'assert'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { autorun } from 'vs/base/common/observable'; -import { setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { InlineCompletionsModel } from '../../browser/model/inlineCompletionsModel.js'; +import { InlineCompletionsController } from '../../browser/controller/inlineCompletionsController.js'; +import { autorun } from '../../../../../base/common/observable.js'; +import { setUnexpectedErrorHandler } from '../../../../../base/common/errors.js'; +import { IAccessibilitySignalService } from '../../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('Suggest Widget Model', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts index 1c1d7724b..9cd0d1146 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { CoreEditingCommands, CoreNavigationCommands } from 'vs/editor/browser/coreCommands'; -import { Position } from 'vs/editor/common/core/position'; -import { ITextModel } from 'vs/editor/common/model'; -import { InlineCompletion, InlineCompletionContext, InlineCompletionsProvider } from 'vs/editor/common/languages'; -import { ITestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel'; -import { autorun } from 'vs/base/common/observable'; +import { timeout } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { CoreEditingCommands, CoreNavigationCommands } from '../../../../browser/coreCommands.js'; +import { Position } from '../../../../common/core/position.js'; +import { ITextModel } from '../../../../common/model.js'; +import { InlineCompletion, InlineCompletionContext, InlineCompletionsProvider } from '../../../../common/languages.js'; +import { ITestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { InlineCompletionsModel } from '../../browser/model/inlineCompletionsModel.js'; +import { autorun } from '../../../../../base/common/observable.js'; export class MockInlineCompletionsProvider implements InlineCompletionsProvider { private returnValue: InlineCompletion[] = []; diff --git a/src/vs/editor/contrib/inlineEdit/browser/commands.ts b/src/vs/editor/contrib/inlineEdit/browser/commands.ts index d7e1f4fe8..268fba622 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/commands.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/commands.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { inlineEditAcceptId, inlineEditJumpBackId, inlineEditJumpToId, inlineEditRejectId } from 'vs/editor/contrib/inlineEdit/browser/commandIds'; -import { InlineEditController } from 'vs/editor/contrib/inlineEdit/browser/inlineEditController'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { inlineEditAcceptId, inlineEditJumpBackId, inlineEditJumpToId, inlineEditRejectId } from './commandIds.js'; +import { InlineEditController } from './inlineEditController.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export class AcceptInlineEdit extends EditorAction { constructor() { diff --git a/src/vs/editor/contrib/inlineEdit/browser/ghostTextWidget.ts b/src/vs/editor/contrib/inlineEdit/browser/ghostTextWidget.ts index ca3dc5bc3..5941538ef 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/ghostTextWidget.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/ghostTextWidget.ts @@ -3,20 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, derived, observableFromEvent, observableValue } from 'vs/base/common/observable'; -import 'vs/css!./inlineEdit'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops } from 'vs/editor/common/model'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { InlineDecorationType } from 'vs/editor/common/viewModel'; -import { AdditionalLinesWidget, LineData } from 'vs/editor/contrib/inlineCompletions/browser/view/ghostTextView'; -import { GhostText } from 'vs/editor/contrib/inlineCompletions/browser/model/ghostText'; -import { ColumnRange, applyObservableDecorations } from 'vs/editor/contrib/inlineCompletions/browser/utils'; -import { diffDeleteDecoration, diffLineDeleteDecorationBackgroundWithIndicator } from 'vs/editor/browser/widget/diffEditor/registrations.contribution'; +import { Disposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, derived, observableFromEvent, observableValue } from '../../../../base/common/observable.js'; +import './inlineEdit.css'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops } from '../../../common/model.js'; +import { LineDecoration } from '../../../common/viewLayout/lineDecorations.js'; +import { InlineDecorationType } from '../../../common/viewModel.js'; +import { AdditionalLinesWidget, LineData } from '../../inlineCompletions/browser/view/ghostText/ghostTextView.js'; +import { GhostText } from '../../inlineCompletions/browser/model/ghostText.js'; +import { ColumnRange } from '../../inlineCompletions/browser/utils.js'; +import { diffDeleteDecoration, diffLineDeleteDecorationBackgroundWithIndicator } from '../../../browser/widget/diffEditor/registrations.contribution.js'; +import { LineTokens } from '../../../common/tokens/lineTokens.js'; +import { observableCodeEditor } from '../../../browser/observableCodeEditor.js'; export const INLINE_EDIT_DESCRIPTION = 'inline-edit'; export interface IGhostTextWidgetModel { @@ -28,17 +30,20 @@ export interface IGhostTextWidgetModel { export class GhostTextWidget extends Disposable { private readonly isDisposed = observableValue(this, false); - private readonly currentTextModel = observableFromEvent(this, this.editor.onDidChangeModel, () => /** @description editor.model */ this.editor.getModel()); + private readonly currentTextModel = observableFromEvent(this, this._editor.onDidChangeModel, () => /** @description editor.model */ this._editor.getModel()); + + private readonly _editorObs = observableCodeEditor(this._editor); constructor( - private readonly editor: ICodeEditor, + private readonly _editor: ICodeEditor, readonly model: IGhostTextWidgetModel, @ILanguageService private readonly languageService: ILanguageService, ) { super(); this._register(toDisposable(() => { this.isDisposed.set(true, undefined); })); - this._register(applyObservableDecorations(this.editor, this.decorations)); + + this._register(this._editorObs.setDecorations(this.decorations)); } private readonly uiState = derived(this, reader => { @@ -54,7 +59,6 @@ export class GhostTextWidget extends Disposable { return undefined; } - let range = this.model.range?.read(reader); //if range is empty, we want to remove it if (range && range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) { @@ -68,13 +72,20 @@ export class GhostTextWidget extends Disposable { const isPureRemove = ghostText.parts.length === 1 && ghostText.parts[0].lines.every(l => l.length === 0); const inlineTexts: { column: number; text: string; preview: boolean }[] = []; - const additionalLines: LineData[] = []; + const additionalLines: { content: string; decorations: LineDecoration[] }[] = []; function addToAdditionalLines(lines: readonly string[], className: string | undefined) { if (additionalLines.length > 0) { const lastLine = additionalLines[additionalLines.length - 1]; if (className) { - lastLine.decorations.push(new LineDecoration(lastLine.content.length + 1, lastLine.content.length + 1 + lines[0].length, className, InlineDecorationType.Regular)); + lastLine.decorations.push( + new LineDecoration( + lastLine.content.length + 1, + lastLine.content.length + 1 + lines[0].length, + className, + InlineDecorationType.Regular + ) + ); } lastLine.content += lines[0]; @@ -207,14 +218,16 @@ export class GhostTextWidget extends Disposable { private readonly additionalLinesWidget = this._register( new AdditionalLinesWidget( - this.editor, - this.languageService.languageIdCodec, + this._editor, derived(reader => { /** @description lines */ const uiState = this.uiState.read(reader); return uiState && !uiState.isPureRemove && (uiState.isSingleLine || !uiState.range) ? { lineNumber: uiState.lineNumber, - additionalLines: uiState.additionalLines, + additionalLines: uiState.additionalLines.map(l => ({ + content: LineTokens.createEmpty(l.content, this.languageService.languageIdCodec), + decorations: l.decorations + } satisfies LineData)), minReservedLineCount: uiState.additionalReservedLineCount, targetTextModel: uiState.targetTextModel, } : undefined; diff --git a/src/vs/editor/contrib/inlineEdit/browser/hoverParticipant.ts b/src/vs/editor/contrib/inlineEdit/browser/hoverParticipant.ts index cfacc7732..41ffacc77 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/hoverParticipant.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/hoverParticipant.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { constObservable } from 'vs/base/common/observable'; -import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration } from 'vs/editor/common/model'; -import { HoverAnchor, HoverAnchorType, HoverForeignElementAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { InlineEditController } from 'vs/editor/contrib/inlineEdit/browser/inlineEditController'; -import { InlineEditHintsContentWidget } from 'vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget'; -import * as nls from 'vs/nls'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { constObservable } from '../../../../base/common/observable.js'; +import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { IModelDecoration } from '../../../common/model.js'; +import { HoverAnchor, HoverAnchorType, HoverForeignElementAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverPart, IRenderedHoverParts, RenderedHoverParts } from '../../hover/browser/hoverTypes.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { InlineEditController } from './inlineEditController.js'; +import { InlineEditHintsContentWidget } from './inlineEditHintsWidget.js'; +import * as nls from '../../../../nls.js'; export class InlineEditHover implements IHoverPart { constructor( diff --git a/src/vs/editor/contrib/inlineEdit/browser/inlineEdit.contribution.ts b/src/vs/editor/contrib/inlineEdit/browser/inlineEdit.contribution.ts index 0be0d1254..9f5a6c3df 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/inlineEdit.contribution.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/inlineEdit.contribution.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from '../../../browser/editorExtensions.js'; // import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { AcceptInlineEdit, JumpBackInlineEdit, JumpToInlineEdit, RejectInlineEdit, TriggerInlineEdit } from 'vs/editor/contrib/inlineEdit/browser/commands'; +import { AcceptInlineEdit, JumpBackInlineEdit, JumpToInlineEdit, RejectInlineEdit, TriggerInlineEdit } from './commands.js'; // import { InlineEditHoverParticipant } from 'vs/editor/contrib/inlineEdit/browser/hoverParticipant'; -import { InlineEditController } from 'vs/editor/contrib/inlineEdit/browser/inlineEditController'; +import { InlineEditController } from './inlineEditController.js'; registerEditorAction(AcceptInlineEdit); registerEditorAction(RejectInlineEdit); diff --git a/src/vs/editor/contrib/inlineEdit/browser/inlineEditController.ts b/src/vs/editor/contrib/inlineEdit/browser/inlineEditController.ts index 3f47517ce..fdd3995ab 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/inlineEditController.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/inlineEditController.ts @@ -3,29 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ISettableObservable, autorun, constObservable, observableFromEvent, observableSignalFromEvent, observableValue, transaction } from 'vs/base/common/observable'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { GhostTextWidget } from 'vs/editor/contrib/inlineEdit/browser/ghostTextWidget'; -import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IInlineEdit, InlineEditTriggerKind } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { GhostText, GhostTextPart } from 'vs/editor/contrib/inlineCompletions/browser/model/ghostText'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { InlineEditHintsWidget } from 'vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { createStyleSheet2 } from 'vs/base/browser/dom'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { derivedDisposable } from 'vs/base/common/observableInternal/derived'; -import { InlineEditSideBySideWidget } from 'vs/editor/contrib/inlineEdit/browser/inlineEditSideBySideWidget'; -import { IDiffProviderFactoryService } from 'vs/editor/browser/widget/diffEditor/diffProviderFactoryService'; -import { IModelService } from 'vs/editor/common/services/model'; +import { createStyleSheet2 } from '../../../../base/browser/dom.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { ISettableObservable, autorun, constObservable, derived, derivedDisposable, observableFromEvent, observableSignalFromEvent, observableValue, transaction } from '../../../../base/common/observable.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { observableConfigValue } from '../../../../platform/observable/common/platformObservableUtils.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IDiffProviderFactoryService } from '../../../browser/widget/diffEditor/diffProviderFactoryService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IInlineEdit, InlineEditTriggerKind } from '../../../common/languages.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { IModelService } from '../../../common/services/model.js'; +import { GhostText, GhostTextPart } from '../../inlineCompletions/browser/model/ghostText.js'; +import { InlineEditsAdapter } from '../../inlineCompletions/browser/model/inlineEditsAdapter.js'; +import { GhostTextWidget } from './ghostTextWidget.js'; +import { InlineEditHintsWidget } from './inlineEditHintsWidget.js'; +import { InlineEditSideBySideWidget } from './inlineEditSideBySideWidget.js'; export class InlineEditController extends Disposable { static ID = 'editor.contrib.inlineEditController'; @@ -73,7 +74,11 @@ export class InlineEditController extends Disposable { private _jumpBackPosition: Position | undefined; private _isAccepting: ISettableObservable = observableValue(this, false); - private readonly _enabled = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineEdit).enabled); + private readonly _inlineCompletionInlineEdits = observableConfigValue(InlineEditsAdapter.experimentalInlineEditsEnabled, false, this._configurationService); + + private readonly _inlineEditEnabled = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineEdit).enabled); + private readonly _enabled = derived(this, reader => this._inlineEditEnabled.read(reader) && !this._inlineCompletionInlineEdits.read(reader)); + private readonly _fontFamily = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineEdit).fontFamily); diff --git a/src/vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget.ts b/src/vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget.ts index cb2453ab6..6bbbe5fce 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { h } from 'vs/base/browser/dom'; -import { KeybindingLabel, unthemedKeybindingLabelOptions } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { IAction, Separator } from 'vs/base/common/actions'; -import { equals } from 'vs/base/common/arrays'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, autorun, autorunWithStore, derived, observableFromEvent } from 'vs/base/common/observable'; -import { OS } from 'vs/base/common/platform'; -import 'vs/css!./inlineEditHintsWidget'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { GhostTextWidget } from 'vs/editor/contrib/inlineEdit/browser/ghostTextWidget'; -import { MenuEntryActionViewItem, createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuWorkbenchToolBarOptions, WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { h } from '../../../../base/browser/dom.js'; +import { KeybindingLabel, unthemedKeybindingLabelOptions } from '../../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { IAction, Separator } from '../../../../base/common/actions.js'; +import { equals } from '../../../../base/common/arrays.js'; +import { Disposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, autorun, autorunWithStore, derived, observableFromEvent } from '../../../../base/common/observable.js'; +import { OS } from '../../../../base/common/platform.js'; +import './inlineEditHintsWidget.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { PositionAffinity } from '../../../common/model.js'; +import { GhostTextWidget } from './ghostTextWidget.js'; +import { MenuEntryActionViewItem, createAndFillInActionBarActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IMenuWorkbenchToolBarOptions, WorkbenchToolBar } from '../../../../platform/actions/browser/toolbar.js'; +import { IMenuService, MenuId, MenuItemAction } from '../../../../platform/actions/common/actions.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; export class InlineEditHintsWidget extends Disposable { private readonly alwaysShowToolbar = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineEdit).showToolbar === 'always'); diff --git a/src/vs/editor/contrib/inlineEdit/browser/inlineEditSideBySideWidget.ts b/src/vs/editor/contrib/inlineEdit/browser/inlineEditSideBySideWidget.ts index 777a8b15a..4655e8118 100644 --- a/src/vs/editor/contrib/inlineEdit/browser/inlineEditSideBySideWidget.ts +++ b/src/vs/editor/contrib/inlineEdit/browser/inlineEditSideBySideWidget.ts @@ -3,28 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $ } from 'vs/base/browser/dom'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ObservablePromise, autorun, autorunWithStore, derived, observableSignalFromEvent } from 'vs/base/common/observable'; -import { derivedDisposable } from 'vs/base/common/observableInternal/derived'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./inlineEditSideBySideWidget'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { IDiffProviderFactoryService } from 'vs/editor/browser/widget/diffEditor/diffProviderFactoryService'; -import { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from 'vs/editor/browser/widget/diffEditor/registrations.contribution'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { IInlineEdit } from 'vs/editor/common/languages'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { IModelDeltaDecoration } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { $ } from '../../../../base/browser/dom.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Disposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable, ObservablePromise, autorun, autorunWithStore, derived, derivedDisposable, observableSignalFromEvent } from '../../../../base/common/observable.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from '../../../browser/editorBrowser.js'; +import { observableCodeEditor } from '../../../browser/observableCodeEditor.js'; +import { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { IDiffProviderFactoryService } from '../../../browser/widget/diffEditor/diffProviderFactoryService.js'; +import { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from '../../../browser/widget/diffEditor/registrations.contribution.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { DetailedLineRangeMapping } from '../../../common/diff/rangeMapping.js'; +import { IInlineEdit } from '../../../common/languages.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../common/languages/modesRegistry.js'; +import { IModelDeltaDecoration } from '../../../common/model.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { IModelService } from '../../../common/services/model.js'; +import './inlineEditSideBySideWidget.css'; function* range(start: number, end: number, step = 1) { if (end === undefined) { [end, start] = [start, 0]; } diff --git a/src/vs/editor/contrib/inlineEdits/browser/commands.ts b/src/vs/editor/contrib/inlineEdits/browser/commands.ts deleted file mode 100644 index ec7255fd9..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/commands.ts +++ /dev/null @@ -1,185 +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 { Codicon } from 'vs/base/common/codicons'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { transaction } from 'vs/base/common/observable'; -import { asyncTransaction } from 'vs/base/common/observableInternal/base'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { inlineEditAcceptId, inlineEditVisible, showNextInlineEditActionId, showPreviousInlineEditActionId } from 'vs/editor/contrib/inlineEdits/browser/consts'; -import { InlineEditsController } from 'vs/editor/contrib/inlineEdits/browser/inlineEditsController'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; - - -function labelAndAlias(str: nls.ILocalizedString): { label: string; alias: string } { - return { - label: str.value, - alias: str.original, - }; -} - -export class ShowNextInlineEditAction extends EditorAction { - public static ID = showNextInlineEditActionId; - constructor() { - super({ - id: ShowNextInlineEditAction.ID, - ...labelAndAlias(nls.localize2('action.inlineEdits.showNext', "Show Next Inline Edit")), - precondition: ContextKeyExpr.and(EditorContextKeys.writable, inlineEditVisible), - kbOpts: { - weight: 100, - primary: KeyMod.Alt | KeyCode.BracketRight, - }, - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = InlineEditsController.get(editor); - controller?.model.get()?.next(); - } -} - -export class ShowPreviousInlineEditAction extends EditorAction { - public static ID = showPreviousInlineEditActionId; - constructor() { - super({ - id: ShowPreviousInlineEditAction.ID, - ...labelAndAlias(nls.localize2('action.inlineEdits.showPrevious', "Show Previous Inline Edit")), - precondition: ContextKeyExpr.and(EditorContextKeys.writable, inlineEditVisible), - kbOpts: { - weight: 100, - primary: KeyMod.Alt | KeyCode.BracketLeft, - }, - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = InlineEditsController.get(editor); - controller?.model.get()?.previous(); - } -} - -export class TriggerInlineEditAction extends EditorAction { - constructor() { - super({ - id: 'editor.action.inlineEdits.trigger', - ...labelAndAlias(nls.localize2('action.inlineEdits.trigger', "Trigger Inline Edit")), - precondition: EditorContextKeys.writable - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = InlineEditsController.get(editor); - await asyncTransaction(async tx => { - /** @description triggerExplicitly from command */ - await controller?.model.get()?.triggerExplicitly(tx); - }); - } -} - -export class AcceptInlineEdit extends EditorAction { - constructor() { - super({ - id: inlineEditAcceptId, - ...labelAndAlias(nls.localize2('action.inlineEdits.accept', "Accept Inline Edit")), - precondition: inlineEditVisible, - menuOpts: { - menuId: MenuId.InlineEditsActions, - title: nls.localize('inlineEditsActions', "Accept Inline Edit"), - group: 'primary', - order: 1, - icon: Codicon.check, - }, - kbOpts: { - primary: KeyMod.CtrlCmd | KeyCode.Space, - weight: 20000, - kbExpr: inlineEditVisible, - } - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - if (editor instanceof EmbeddedCodeEditorWidget) { - editor = editor.getParentEditor(); - } - const controller = InlineEditsController.get(editor); - if (controller) { - controller.model.get()?.accept(controller.editor); - controller.editor.focus(); - } - } -} - -/* -TODO@hediet -export class PinInlineEdit extends EditorAction { - constructor() { - super({ - id: 'editor.action.inlineEdits.pin', - ...labelAndAlias(nls.localize2('action.inlineEdits.pin', "Pin Inline Edit")), - precondition: undefined, - kbOpts: { - primary: KeyMod.Shift | KeyCode.Space, - weight: 20000, - } - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = InlineEditsController.get(editor); - if (controller) { - controller.model.get()?.togglePin(); - } - } -} - -MenuRegistry.appendMenuItem(MenuId.InlineEditsActions, { - command: { - id: 'editor.action.inlineEdits.pin', - title: nls.localize('Pin', "Pin"), - icon: Codicon.pin, - }, - group: 'primary', - order: 1, - when: isPinnedContextKey.negate(), -}); - -MenuRegistry.appendMenuItem(MenuId.InlineEditsActions, { - command: { - id: 'editor.action.inlineEdits.unpin', - title: nls.localize('Unpin', "Unpin"), - icon: Codicon.pinned, - }, - group: 'primary', - order: 1, - when: isPinnedContextKey, -});*/ - -export class HideInlineEdit extends EditorAction { - public static ID = 'editor.action.inlineEdits.hide'; - - constructor() { - super({ - id: HideInlineEdit.ID, - ...labelAndAlias(nls.localize2('action.inlineEdits.hide', "Hide Inline Edit")), - precondition: inlineEditVisible, - kbOpts: { - weight: 100, - primary: KeyCode.Escape, - } - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = InlineEditsController.get(editor); - transaction(tx => { - controller?.model.get()?.stop(tx); - }); - } -} diff --git a/src/vs/editor/contrib/inlineEdits/browser/consts.ts b/src/vs/editor/contrib/inlineEdits/browser/consts.ts deleted file mode 100644 index 9ad19e98a..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/consts.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 { localize } from 'vs/nls'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; - -export const inlineEditAcceptId = 'editor.action.inlineEdits.accept'; - -export const showPreviousInlineEditActionId = 'editor.action.inlineEdits.showPrevious'; - -export const showNextInlineEditActionId = 'editor.action.inlineEdits.showNext'; - -export const inlineEditVisible = new RawContextKey('inlineEditsVisible', false, localize('inlineEditsVisible', "Whether an inline edit is visible")); -export const isPinnedContextKey = new RawContextKey('inlineEditsIsPinned', false, localize('isPinned', "Whether an inline edit is visible")); diff --git a/src/vs/editor/contrib/inlineEdits/browser/inlineEdits.contribution.ts b/src/vs/editor/contrib/inlineEdits/browser/inlineEdits.contribution.ts deleted file mode 100644 index ae8b7182a..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/inlineEdits.contribution.ts +++ /dev/null @@ -1,19 +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 { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { - TriggerInlineEditAction, ShowNextInlineEditAction, ShowPreviousInlineEditAction, - AcceptInlineEdit, HideInlineEdit, -} from 'vs/editor/contrib/inlineEdits/browser/commands'; -import { InlineEditsController } from 'vs/editor/contrib/inlineEdits/browser/inlineEditsController'; - -registerEditorContribution(InlineEditsController.ID, InlineEditsController, EditorContributionInstantiation.Eventually); - -registerEditorAction(TriggerInlineEditAction); -registerEditorAction(ShowNextInlineEditAction); -registerEditorAction(ShowPreviousInlineEditAction); -registerEditorAction(AcceptInlineEdit); -registerEditorAction(HideInlineEdit); diff --git a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsController.ts b/src/vs/editor/contrib/inlineEdits/browser/inlineEditsController.ts deleted file mode 100644 index 9055ec567..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsController.ts +++ /dev/null @@ -1,97 +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 { Disposable } from 'vs/base/common/lifecycle'; -import { derived, derivedObservableWithCache, IReader, ISettableObservable, observableValue } from 'vs/base/common/observable'; -import { derivedDisposable, derivedWithSetter } from 'vs/base/common/observableInternal/derived'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { readHotReloadableExport } from 'vs/base/common/hotReloadHelpers'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { inlineEditVisible, isPinnedContextKey } from 'vs/editor/contrib/inlineEdits/browser/consts'; -import { InlineEditsModel } from 'vs/editor/contrib/inlineEdits/browser/inlineEditsModel'; -import { InlineEditsWidget } from 'vs/editor/contrib/inlineEdits/browser/inlineEditsWidget'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { bindContextKey, observableConfigValue } from 'vs/platform/observable/common/platformObservableUtils'; - -export class InlineEditsController extends Disposable { - static ID = 'editor.contrib.inlineEditsController'; - - public static get(editor: ICodeEditor): InlineEditsController | null { - return editor.getContribution(InlineEditsController.ID); - } - - private readonly _enabled = observableConfigValue('editor.inlineEdits.enabled', false, this._configurationService); - private readonly _editorObs = observableCodeEditor(this.editor); - private readonly _selection = derived(this, reader => this._editorObs.cursorSelection.read(reader) ?? new Selection(1, 1, 1, 1)); - - private readonly _debounceValue = this._debounceService.for( - this._languageFeaturesService.inlineCompletionsProvider, - 'InlineEditsDebounce', - { min: 50, max: 50 } - ); - - public readonly model = derivedDisposable(this, reader => { - if (!this._enabled.read(reader)) { - return undefined; - } - if (this._editorObs.isReadonly.read(reader)) { return undefined; } - const textModel = this._editorObs.model.read(reader); - if (!textModel) { return undefined; } - - const model: InlineEditsModel = this._instantiationService.createInstance( - readHotReloadableExport(InlineEditsModel, reader), - textModel, - this._editorObs.versionId, - this._selection, - this._debounceValue, - ); - - return model; - }); - - private readonly _hadInlineEdit = derivedObservableWithCache(this, (reader, lastValue) => lastValue || this.model.read(reader)?.inlineEdit.read(reader) !== undefined); - - protected readonly _widget = derivedDisposable(this, reader => { - if (!this._hadInlineEdit.read(reader)) { return undefined; } - - return this._instantiationService.createInstance( - readHotReloadableExport(InlineEditsWidget, reader), - this.editor, - this.model.map((m, reader) => m?.inlineEdit.read(reader)), - flattenSettableObservable((reader) => this.model.read(reader)?.userPrompt ?? observableValue('empty', '')), - ); - }); - - constructor( - public readonly editor: ICodeEditor, - @IInstantiationService private readonly _instantiationService: IInstantiationService, - @IContextKeyService private readonly _contextKeyService: IContextKeyService, - @ILanguageFeatureDebounceService private readonly _debounceService: ILanguageFeatureDebounceService, - @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, - @IConfigurationService private readonly _configurationService: IConfigurationService, - ) { - super(); - - this._register(bindContextKey(inlineEditVisible, this._contextKeyService, r => !!this.model.read(r)?.inlineEdit.read(r))); - this._register(bindContextKey(isPinnedContextKey, this._contextKeyService, r => !!this.model.read(r)?.isPinned.read(r))); - - this.model.recomputeInitiallyAndOnChange(this._store); - this._widget.recomputeInitiallyAndOnChange(this._store); - } -} - -function flattenSettableObservable(fn: (reader: IReader | undefined) => ISettableObservable): ISettableObservable { - return derivedWithSetter(undefined, reader => { - const obs = fn(reader); - return obs.read(reader); - }, (value, tx) => { - fn(undefined).set(value, tx); - }); -} diff --git a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsModel.ts b/src/vs/editor/contrib/inlineEdits/browser/inlineEditsModel.ts deleted file mode 100644 index 9c03abe68..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsModel.ts +++ /dev/null @@ -1,289 +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 { timeout } from 'vs/base/common/async'; -import { CancellationToken, cancelOnDispose } from 'vs/base/common/cancellation'; -import { itemsEquals, structuralEquals } from 'vs/base/common/equals'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IObservable, ISettableObservable, ITransaction, ObservablePromise, derived, derivedHandleChanges, derivedOpts, disposableObservableValue, observableSignal, observableValue, recomputeInitiallyAndOnChange, subtransaction } from 'vs/base/common/observable'; -import { derivedDisposable } from 'vs/base/common/observableInternal/derived'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IDiffProviderFactoryService } from 'vs/editor/browser/widget/diffEditor/diffProviderFactoryService'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Command, InlineCompletionContext, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { IFeatureDebounceInformation } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { InlineCompletionItem, InlineCompletionProviderResult, provideInlineCompletions } from 'vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions'; -import { InlineEdit } from 'vs/editor/contrib/inlineEdits/browser/inlineEditsWidget'; - -export class InlineEditsModel extends Disposable { - private static _modelId = 0; - private static _createUniqueUri(): URI { - return URI.from({ scheme: 'inline-edits', path: new Date().toString() + String(InlineEditsModel._modelId++) }); - } - - private readonly _forceUpdateExplicitlySignal = observableSignal(this); - - // We use a semantic id to keep the same inline completion selected even if the provider reorders the completions. - private readonly _selectedInlineCompletionId = observableValue(this, undefined); - - private readonly _isActive = observableValue(this, false); - - private readonly _originalModel = derivedDisposable(() => this._modelService.createModel('', null, InlineEditsModel._createUniqueUri())).keepObserved(this._store); - private readonly _modifiedModel = derivedDisposable(() => this._modelService.createModel('', null, InlineEditsModel._createUniqueUri())).keepObserved(this._store); - - private readonly _pinnedRange = new TrackedRange(this.textModel, this._textModelVersionId); - - public readonly isPinned = this._pinnedRange.range.map(range => !!range); - - public readonly userPrompt: ISettableObservable = observableValue(this, undefined); - - constructor( - public readonly textModel: ITextModel, - public readonly _textModelVersionId: IObservable, - private readonly _selection: IObservable, - protected readonly _debounceValue: IFeatureDebounceInformation, - @ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService, - @IDiffProviderFactoryService private readonly _diffProviderFactoryService: IDiffProviderFactoryService, - @IModelService private readonly _modelService: IModelService, - ) { - super(); - - this._register(recomputeInitiallyAndOnChange(this._fetchInlineEditsPromise)); - } - - public readonly inlineEdit = derived(this, reader => { - return this._inlineEdit.read(reader)?.promiseResult.read(reader)?.data; - }); - - public readonly _inlineEdit = derived | undefined>(this, reader => { - const edit = this.selectedInlineEdit.read(reader); - if (!edit) { return undefined; } - const range = edit.inlineCompletion.range; - if (edit.inlineCompletion.insertText.trim() === '') { - return undefined; - } - - let newLines = edit.inlineCompletion.insertText.split(/\r\n|\r|\n/); - - function removeIndentation(lines: string[]): string[] { - const indentation = lines[0].match(/^\s*/)?.[0] ?? ''; - return lines.map(l => l.replace(new RegExp('^' + indentation), '')); - } - newLines = removeIndentation(newLines); - - const existing = this.textModel.getValueInRange(range); - let existingLines = existing.split(/\r\n|\r|\n/); - existingLines = removeIndentation(existingLines); - this._originalModel.get().setValue(existingLines.join('\n')); - this._modifiedModel.get().setValue(newLines.join('\n')); - - const d = this._diffProviderFactoryService.createDiffProvider({ diffAlgorithm: 'advanced' }); - return ObservablePromise.fromFn(async () => { - const result = await d.computeDiff(this._originalModel.get(), this._modifiedModel.get(), { - computeMoves: false, - ignoreTrimWhitespace: false, - maxComputationTimeMs: 1000, - }, CancellationToken.None); - - if (result.identical) { - return undefined; - } - - return new InlineEdit(LineRange.fromRangeInclusive(range), removeIndentation(newLines), result.changes); - }); - }); - - private readonly _fetchStore = this._register(new DisposableStore()); - - private readonly _inlineEditsFetchResult = disposableObservableValue(this, undefined); - private readonly _inlineEdits = derivedOpts({ owner: this, equalsFn: structuralEquals }, reader => { - return this._inlineEditsFetchResult.read(reader)?.completions.map(c => new InlineEditData(c)) ?? []; - }); - - private readonly _fetchInlineEditsPromise = derivedHandleChanges({ - owner: this, - createEmptyChangeSummary: () => ({ - inlineCompletionTriggerKind: InlineCompletionTriggerKind.Automatic - }), - handleChange: (ctx, changeSummary) => { - /** @description fetch inline completions */ - if (ctx.didChange(this._forceUpdateExplicitlySignal)) { - changeSummary.inlineCompletionTriggerKind = InlineCompletionTriggerKind.Explicit; - } - return true; - }, - }, async (reader, changeSummary) => { - this._fetchStore.clear(); - this._forceUpdateExplicitlySignal.read(reader); - /*if (!this._isActive.read(reader)) { - return undefined; - }*/ - this._textModelVersionId.read(reader); - - function mapValue(value: T, fn: (value: T) => TOut): TOut { - return fn(value); - } - - const selection = this._pinnedRange.range.read(reader) ?? mapValue(this._selection.read(reader), v => v.isEmpty() ? undefined : v); - if (!selection) { - this._inlineEditsFetchResult.set(undefined, undefined); - this.userPrompt.set(undefined, undefined); - return undefined; - } - const context: InlineCompletionContext = { - triggerKind: changeSummary.inlineCompletionTriggerKind, - selectedSuggestionInfo: undefined, - userPrompt: this.userPrompt.read(reader), - }; - - const token = cancelOnDispose(this._fetchStore); - await timeout(200, token); - const result = await provideInlineCompletions(this.languageFeaturesService.inlineCompletionsProvider, selection, this.textModel, context, token); - if (token.isCancellationRequested) { - return; - } - - this._inlineEditsFetchResult.set(result, undefined); - }); - - public async trigger(tx?: ITransaction): Promise { - this._isActive.set(true, tx); - await this._fetchInlineEditsPromise.get(); - } - - public async triggerExplicitly(tx?: ITransaction): Promise { - subtransaction(tx, tx => { - this._isActive.set(true, tx); - this._forceUpdateExplicitlySignal.trigger(tx); - }); - await this._fetchInlineEditsPromise.get(); - } - - public stop(tx?: ITransaction): void { - subtransaction(tx, tx => { - this.userPrompt.set(undefined, tx); - this._isActive.set(false, tx); - this._inlineEditsFetchResult.set(undefined, tx); - this._pinnedRange.setRange(undefined, tx); - //this._source.clear(tx); - }); - } - - private readonly _filteredInlineEditItems = derivedOpts({ owner: this, equalsFn: itemsEquals() }, reader => { - return this._inlineEdits.read(reader); - }); - - public readonly selectedInlineCompletionIndex = derived(this, (reader) => { - const selectedInlineCompletionId = this._selectedInlineCompletionId.read(reader); - const filteredCompletions = this._filteredInlineEditItems.read(reader); - const idx = this._selectedInlineCompletionId === undefined ? -1 - : filteredCompletions.findIndex(v => v.semanticId === selectedInlineCompletionId); - if (idx === -1) { - // Reset the selection so that the selection does not jump back when it appears again - this._selectedInlineCompletionId.set(undefined, undefined); - return 0; - } - return idx; - }); - - public readonly selectedInlineEdit = derived(this, (reader) => { - const filteredCompletions = this._filteredInlineEditItems.read(reader); - const idx = this.selectedInlineCompletionIndex.read(reader); - return filteredCompletions[idx]; - }); - - public readonly activeCommands = derivedOpts({ owner: this, equalsFn: itemsEquals() }, - r => this.selectedInlineEdit.read(r)?.inlineCompletion.source.inlineCompletions.commands ?? [] - ); - - private async _deltaSelectedInlineCompletionIndex(delta: 1 | -1): Promise { - await this.triggerExplicitly(); - - const completions = this._filteredInlineEditItems.get() || []; - if (completions.length > 0) { - const newIdx = (this.selectedInlineCompletionIndex.get() + delta + completions.length) % completions.length; - this._selectedInlineCompletionId.set(completions[newIdx].semanticId, undefined); - } else { - this._selectedInlineCompletionId.set(undefined, undefined); - } - } - - public async next(): Promise { - await this._deltaSelectedInlineCompletionIndex(1); - } - - public async previous(): Promise { - await this._deltaSelectedInlineCompletionIndex(-1); - } - - public togglePin(): void { - if (this.isPinned.get()) { - this._pinnedRange.setRange(undefined, undefined); - } else { - this._pinnedRange.setRange(this._selection.get(), undefined); - } - } - - public async accept(editor: ICodeEditor): Promise { - if (editor.getModel() !== this.textModel) { - throw new BugIndicatingError(); - } - const edit = this.selectedInlineEdit.get(); - if (!edit) { - return; - } - - editor.pushUndoStop(); - editor.executeEdits( - 'inlineSuggestion.accept', - [ - edit.inlineCompletion.toSingleTextEdit().toSingleEditOperation() - ] - ); - this.stop(); - } -} - -class InlineEditData { - public readonly semanticId = this.inlineCompletion.hash(); - - constructor(public readonly inlineCompletion: InlineCompletionItem) { - - } -} - -class TrackedRange extends Disposable { - private readonly _decorations = observableValue(this, []); - - constructor( - private readonly _textModel: ITextModel, - private readonly _versionId: IObservable, - ) { - super(); - this._register(toDisposable(() => { - this._textModel.deltaDecorations(this._decorations.get(), []); - })); - } - - setRange(range: Range | undefined, tx: ITransaction | undefined): void { - this._decorations.set(this._textModel.deltaDecorations(this._decorations.get(), range ? [{ range, options: { description: 'trackedRange' } }] : []), tx); - } - - public readonly range = derived(this, reader => { - this._versionId.read(reader); - const deco = this._decorations.read(reader)[0]; - if (!deco) { return null; } - - return this._textModel.getDecorationRange(deco) ?? null; - }); -} diff --git a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.css b/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.css deleted file mode 100644 index 68910c883..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.css +++ /dev/null @@ -1,49 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -.monaco-editor div.inline-edits-widget { - --widget-color: var(--vscode-notifications-background); - - .promptEditor .monaco-editor { - --vscode-editor-placeholder-foreground: var(--vscode-editorGhostText-foreground); - } - - .toolbar, .promptEditor { - opacity: 0; - transition: opacity 0.2s ease-in-out; - } - &:hover, &.focused { - .toolbar, .promptEditor { - opacity: 1; - } - } - - .preview .monaco-editor { - - .mtk1 { - /*color: rgba(215, 215, 215, 0.452);*/ - color: var(--vscode-editorGhostText-foreground); - } - .view-overlays .current-line-exact { - border: none; - } - - .current-line-margin { - border: none; - } - - --vscode-editor-background: var(--widget-color); - } - - svg { - .gradient-start { - stop-color: var(--vscode-editor-background); - } - - .gradient-stop { - stop-color: var(--widget-color); - } - } -} diff --git a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.ts b/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.ts deleted file mode 100644 index 331520cff..000000000 --- a/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.ts +++ /dev/null @@ -1,400 +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 { h, svgElem } from 'vs/base/browser/dom'; -import { DEFAULT_FONT_FAMILY } from 'vs/base/browser/fonts'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { autorun, constObservable, derived, IObservable, ISettableObservable } from 'vs/base/common/observable'; -import { derivedWithSetter } from 'vs/base/common/observableInternal/derived'; -import 'vs/css!./inlineEditsWidget'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from 'vs/editor/browser/widget/diffEditor/registrations.contribution'; -import { appendRemoveOnDispose, applyStyle } from 'vs/editor/browser/widget/diffEditor/utils'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { IModelDeltaDecoration } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ContextMenuController } from 'vs/editor/contrib/contextmenu/browser/contextmenu'; -import { PlaceholderTextContribution } from '../../placeholderText/browser/placeholderTextContribution'; -import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; -import { MenuWorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; - -export class InlineEdit { - constructor( - public readonly range: LineRange, - public readonly newLines: string[], - public readonly changes: readonly DetailedLineRangeMapping[], - ) { - - } -} - -export class InlineEditsWidget extends Disposable { - private readonly _editorObs = observableCodeEditor(this._editor); - - private readonly _elements = h('div.inline-edits-widget', { - style: { - position: 'absolute', - overflow: 'visible', - top: '0px', - left: '0px', - }, - }, [ - h('div@editorContainer', { style: { position: 'absolute', top: '0px', left: '0px', width: '500px', height: '500px', } }, [ - h('div.toolbar@toolbar', { style: { position: 'absolute', top: '-25px', left: '0px' } }), - h('div.promptEditor@promptEditor', { style: { position: 'absolute', top: '-25px', left: '80px', width: '300px', height: '22px' } }), - h('div.preview@editor', { style: { position: 'absolute', top: '0px', left: '0px' } }), - ]), - svgElem('svg', { style: { overflow: 'visible', pointerEvents: 'none' }, }, [ - svgElem('defs', [ - svgElem('linearGradient', { - id: 'Gradient2', - x1: '0', - y1: '0', - x2: '1', - y2: '0', - }, [ - /*svgElem('stop', { offset: '0%', class: 'gradient-start', }), - svgElem('stop', { offset: '0%', class: 'gradient-start', }), - svgElem('stop', { offset: '20%', class: 'gradient-stop', }),*/ - svgElem('stop', { offset: '0%', class: 'gradient-stop', }), - svgElem('stop', { offset: '100%', class: 'gradient-stop', }), - ]), - ]), - svgElem('path@path', { - d: '', - fill: 'url(#Gradient2)', - }), - ]), - ]); - - protected readonly _toolbar = this._register(this._instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.toolbar, MenuId.InlineEditsActions, { - toolbarOptions: { - primaryGroup: g => g.startsWith('primary'), - }, - })); - private readonly _previewTextModel = this._register(this._instantiationService.createInstance( - TextModel, - '', - PLAINTEXT_LANGUAGE_ID, - TextModel.DEFAULT_CREATION_OPTIONS, - null - )); - - private readonly _setText = derived(reader => { - const edit = this._edit.read(reader); - if (!edit) { return; } - this._previewTextModel.setValue(edit.newLines.join('\n')); - }).recomputeInitiallyAndOnChange(this._store); - - - private readonly _promptTextModel = this._register(this._instantiationService.createInstance( - TextModel, - '', - PLAINTEXT_LANGUAGE_ID, - TextModel.DEFAULT_CREATION_OPTIONS, - null - )); - private readonly _promptEditor = this._register(this._instantiationService.createInstance( - EmbeddedCodeEditorWidget, - this._elements.promptEditor, - { - glyphMargin: false, - lineNumbers: 'off', - minimap: { enabled: false }, - guides: { - indentation: false, - bracketPairs: false, - bracketPairsHorizontal: false, - highlightActiveIndentation: false, - }, - folding: false, - selectOnLineNumbers: false, - selectionHighlight: false, - columnSelection: false, - overviewRulerBorder: false, - overviewRulerLanes: 0, - lineDecorationsWidth: 0, - lineNumbersMinChars: 0, - placeholder: 'Describe the change you want...', - fontFamily: DEFAULT_FONT_FAMILY, - }, - { - contributions: EditorExtensionsRegistry.getSomeEditorContributions([ - SuggestController.ID, - PlaceholderTextContribution.ID, - ContextMenuController.ID, - ]), - isSimpleWidget: true - }, - this._editor - )); - - private readonly _previewEditor = this._register(this._instantiationService.createInstance( - EmbeddedCodeEditorWidget, - this._elements.editor, - { - glyphMargin: false, - lineNumbers: 'off', - minimap: { enabled: false }, - guides: { - indentation: false, - bracketPairs: false, - bracketPairsHorizontal: false, - highlightActiveIndentation: false, - }, - folding: false, - selectOnLineNumbers: false, - selectionHighlight: false, - columnSelection: false, - overviewRulerBorder: false, - overviewRulerLanes: 0, - lineDecorationsWidth: 0, - lineNumbersMinChars: 0, - }, - { contributions: [], }, - this._editor - )); - - private readonly _previewEditorObs = observableCodeEditor(this._previewEditor); - - private readonly _decorations = derived(this, (reader) => { - this._setText.read(reader); - const diff = this._edit.read(reader)?.changes; - if (!diff) { return []; } - - const originalDecorations: IModelDeltaDecoration[] = []; - const modifiedDecorations: IModelDeltaDecoration[] = []; - - if (diff.length === 1 && diff[0].innerChanges![0].modifiedRange.equalsRange(this._previewTextModel.getFullModelRange())) { - return []; - } - - for (const m of diff) { - if (!m.original.isEmpty) { - originalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffLineDeleteDecorationBackgroundWithIndicator }); - } - if (!m.modified.isEmpty) { - modifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffLineAddDecorationBackgroundWithIndicator }); - } - - if (m.modified.isEmpty || m.original.isEmpty) { - if (!m.original.isEmpty) { - originalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration }); - } - if (!m.modified.isEmpty) { - modifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration }); - } - } else { - for (const i of m.innerChanges || []) { - // Don't show empty markers outside the line range - if (m.original.contains(i.originalRange.startLineNumber)) { - originalDecorations.push({ range: i.originalRange, options: i.originalRange.isEmpty() ? diffDeleteDecorationEmpty : diffDeleteDecoration }); - } - if (m.modified.contains(i.modifiedRange.startLineNumber)) { - modifiedDecorations.push({ range: i.modifiedRange, options: i.modifiedRange.isEmpty() ? diffAddDecorationEmpty : diffAddDecoration }); - } - } - } - } - - return modifiedDecorations; - }); - - private readonly _layout1 = derived(this, reader => { - const model = this._editor.getModel()!; - const inlineEdit = this._edit.read(reader); - if (!inlineEdit) { return null; } - - const range = inlineEdit.range; - - let maxLeft = 0; - for (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) { - const column = model.getLineMaxColumn(i); - const left = this._editor.getOffsetForColumn(i, column); - maxLeft = Math.max(maxLeft, left); - } - - const layoutInfo = this._editor.getLayoutInfo(); - const contentLeft = layoutInfo.contentLeft; - - return { left: contentLeft + maxLeft }; - }); - - private readonly _layout = derived(this, (reader) => { - const inlineEdit = this._edit.read(reader); - if (!inlineEdit) { return null; } - - const range = inlineEdit.range; - - const scrollLeft = this._editorObs.scrollLeft.read(reader); - - const left = this._layout1.read(reader)!.left + 20 - scrollLeft; - - const selectionTop = this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader); - const selectionBottom = this._editor.getTopForLineNumber(range.endLineNumberExclusive) - this._editorObs.scrollTop.read(reader); - - const topCode = new Point(left, selectionTop); - const bottomCode = new Point(left, selectionBottom); - const codeHeight = selectionBottom - selectionTop; - - const codeEditDist = 50; - const editHeight = this._editor.getOption(EditorOption.lineHeight) * inlineEdit.newLines.length; - const difference = codeHeight - editHeight; - const topEdit = new Point(left + codeEditDist, selectionTop + (difference / 2)); - const bottomEdit = new Point(left + codeEditDist, selectionBottom - (difference / 2)); - - return { - topCode, - bottomCode, - codeHeight, - topEdit, - bottomEdit, - editHeight, - }; - }); - - constructor( - private readonly _editor: ICodeEditor, - private readonly _edit: IObservable, - private readonly _userPrompt: ISettableObservable, - @IInstantiationService private readonly _instantiationService: IInstantiationService, - ) { - super(); - const visible = derived(this, reader => this._edit.read(reader) !== undefined || this._userPrompt.read(reader) !== undefined); - this._register(applyStyle(this._elements.root, { - display: derived(this, reader => visible.read(reader) ? 'block' : 'none') - })); - - this._register(appendRemoveOnDispose(this._editor.getDomNode()!, this._elements.root)); - - this._register(observableCodeEditor(_editor).createOverlayWidget({ - domNode: this._elements.root, - position: constObservable(null), - allowEditorOverflow: false, - minContentWidthInPx: derived(reader => { - const x = this._layout1.read(reader)?.left; - if (x === undefined) { return 0; } - const width = this._previewEditorObs.contentWidth.read(reader); - return x + width; - }), - })); - - this._previewEditor.setModel(this._previewTextModel); - - this._register(this._previewEditorObs.setDecorations(this._decorations)); - - this._register(autorun(reader => { - const layoutInfo = this._layout.read(reader); - if (!layoutInfo) { return; } - - const { topCode, bottomCode, topEdit, bottomEdit, editHeight } = layoutInfo; - - const straightWidthCode = 10; - const straightWidthEdit = 0; - const bezierDist = 40; - - const path = new PathBuilder() - .moveTo(topCode) - .lineTo(topCode.deltaX(straightWidthCode)) - .curveTo( - topCode.deltaX(straightWidthCode + bezierDist), - topEdit.deltaX(-bezierDist - straightWidthEdit), - topEdit.deltaX(-straightWidthEdit), - ) - .lineTo(topEdit) - .lineTo(bottomEdit) - .lineTo(bottomEdit.deltaX(-straightWidthEdit)) - .curveTo( - bottomEdit.deltaX(-bezierDist - straightWidthEdit), - bottomCode.deltaX(straightWidthCode + bezierDist), - bottomCode.deltaX(straightWidthCode), - ) - .lineTo(bottomCode) - .build(); - - - this._elements.path.setAttribute('d', path); - - this._elements.editorContainer.style.top = `${topEdit.y}px`; - this._elements.editorContainer.style.left = `${topEdit.x}px`; - this._elements.editorContainer.style.height = `${editHeight}px`; - - const width = this._previewEditorObs.contentWidth.read(reader); - this._previewEditor.layout({ height: editHeight, width }); - })); - - this._promptEditor.setModel(this._promptTextModel); - this._promptEditor.layout(); - this._register(createTwoWaySync(mapSettableObservable(this._userPrompt, v => v ?? '', v => v), observableCodeEditor(this._promptEditor).value)); - - this._register(autorun(reader => { - const isFocused = observableCodeEditor(this._promptEditor).isFocused.read(reader); - this._elements.root.classList.toggle('focused', isFocused); - })); - } -} - -function mapSettableObservable(obs: ISettableObservable, fn1: (value: T) => T1, fn2: (value: T1) => T): ISettableObservable { - return derivedWithSetter(undefined, reader => fn1(obs.read(reader)), (value, tx) => obs.set(fn2(value), tx)); -} - -class Point { - constructor( - public readonly x: number, - public readonly y: number, - ) { } - - public add(other: Point): Point { - return new Point(this.x + other.x, this.y + other.y); - } - - public deltaX(delta: number): Point { - return new Point(this.x + delta, this.y); - } -} - -class PathBuilder { - private _data: string = ''; - - public moveTo(point: Point): this { - this._data += `M ${point.x} ${point.y} `; - return this; - } - - public lineTo(point: Point): this { - this._data += `L ${point.x} ${point.y} `; - return this; - } - - public curveTo(cp1: Point, cp2: Point, to: Point): this { - this._data += `C ${cp1.x} ${cp1.y} ${cp2.x} ${cp2.y} ${to.x} ${to.y} `; - return this; - } - - public build(): string { - return this._data; - } -} - -function createTwoWaySync(main: ISettableObservable, target: ISettableObservable): IDisposable { - const store = new DisposableStore(); - store.add(autorun(reader => { - const value = main.read(reader); - target.set(value, undefined); - })); - store.add(autorun(reader => { - const value = target.read(reader); - main.set(value, undefined); - })); - return store; -} diff --git a/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts b/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts index 25f273c12..5b238c214 100644 --- a/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts +++ b/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { disposableTimeout } from 'vs/base/common/async'; -import { Codicon } from 'vs/base/common/codicons'; -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { noBreakWhitespace } from 'vs/base/common/strings'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./inlineProgressWidget'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; -import { TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import * as dom from '../../../../base/browser/dom.js'; +import { disposableTimeout } from '../../../../base/common/async.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { noBreakWhitespace } from '../../../../base/common/strings.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import './inlineProgressWidget.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorDecorationsCollection } from '../../../common/editorCommon.js'; +import { TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; const inlineProgressDecoration = ModelDecorationOptions.register({ description: 'inline-progress-widget', diff --git a/src/vs/editor/contrib/lineSelection/browser/lineSelection.ts b/src/vs/editor/contrib/lineSelection/browser/lineSelection.ts index f2b2a2df9..1ad614b8d 100644 --- a/src/vs/editor/contrib/lineSelection/browser/lineSelection.ts +++ b/src/vs/editor/contrib/lineSelection/browser/lineSelection.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { CursorMoveCommands } from 'vs/editor/common/cursor/cursorMoveCommands'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import * as nls from 'vs/nls'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { CursorChangeReason } from '../../../common/cursorEvents.js'; +import { CursorMoveCommands } from '../../../common/cursor/cursorMoveCommands.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import * as nls from '../../../../nls.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export class ExpandLineSelectionAction extends EditorAction { constructor() { diff --git a/src/vs/editor/contrib/lineSelection/test/browser/lineSelection.test.ts b/src/vs/editor/contrib/lineSelection/test/browser/lineSelection.test.ts index 17b47434d..b5c075ca4 100644 --- a/src/vs/editor/contrib/lineSelection/test/browser/lineSelection.test.ts +++ b/src/vs/editor/contrib/lineSelection/test/browser/lineSelection.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import type { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ExpandLineSelectionAction } from 'vs/editor/contrib/lineSelection/browser/lineSelection'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import type { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorAction } from '../../../../browser/editorExtensions.js'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ExpandLineSelectionAction } from '../../browser/lineSelection.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; function executeAction(action: EditorAction, editor: ICodeEditor): void { action.run(null!, editor, undefined); diff --git a/src/vs/editor/contrib/linesOperations/browser/copyLinesCommand.ts b/src/vs/editor/contrib/linesOperations/browser/copyLinesCommand.ts index 8f15843cf..ccc16cd53 100644 --- a/src/vs/editor/contrib/linesOperations/browser/copyLinesCommand.ts +++ b/src/vs/editor/contrib/linesOperations/browser/copyLinesCommand.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Range } from 'vs/editor/common/core/range'; -import { Selection, SelectionDirection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { Range } from '../../../common/core/range.js'; +import { Selection, SelectionDirection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; export class CopyLinesCommand implements ICommand { diff --git a/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts b/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts index 60601d1fc..c9cff45b8 100644 --- a/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts +++ b/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ReplaceCommand, ReplaceCommandThatPreservesSelection, ReplaceCommandThatSelectsText } from 'vs/editor/common/commands/replaceCommand'; -import { TrimTrailingWhitespaceCommand } from 'vs/editor/common/commands/trimTrailingWhitespaceCommand'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { TypeOperations } from 'vs/editor/common/cursor/cursorTypeOperations'; -import { EnterOperation } from 'vs/editor/common/cursor/cursorTypeEditOperations'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import { CopyLinesCommand } from 'vs/editor/contrib/linesOperations/browser/copyLinesCommand'; -import { MoveLinesCommand } from 'vs/editor/contrib/linesOperations/browser/moveLinesCommand'; -import { SortLinesCommand } from 'vs/editor/contrib/linesOperations/browser/sortLinesCommand'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { CoreEditingCommands } from '../../../browser/coreCommands.js'; +import { IActiveCodeEditor, ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ReplaceCommand, ReplaceCommandThatPreservesSelection, ReplaceCommandThatSelectsText } from '../../../common/commands/replaceCommand.js'; +import { TrimTrailingWhitespaceCommand } from '../../../common/commands/trimTrailingWhitespaceCommand.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { TypeOperations } from '../../../common/cursor/cursorTypeOperations.js'; +import { EnterOperation } from '../../../common/cursor/cursorTypeEditOperations.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import { CopyLinesCommand } from './copyLinesCommand.js'; +import { MoveLinesCommand } from './moveLinesCommand.js'; +import { SortLinesCommand } from './sortLinesCommand.js'; +import * as nls from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; // copy lines diff --git a/src/vs/editor/contrib/linesOperations/browser/moveLinesCommand.ts b/src/vs/editor/contrib/linesOperations/browser/moveLinesCommand.ts index 9a4f68009..40fdd0378 100644 --- a/src/vs/editor/contrib/linesOperations/browser/moveLinesCommand.ts +++ b/src/vs/editor/contrib/linesOperations/browser/moveLinesCommand.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as strings from 'vs/base/common/strings'; -import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { CompleteEnterAction, IndentAction } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IndentConsts } from 'vs/editor/common/languages/supports/indentRules'; -import * as indentUtils from 'vs/editor/contrib/indentation/common/indentUtils'; -import { getGoodIndentForLine, getIndentMetadata, IIndentConverter, IVirtualModel } from 'vs/editor/common/languages/autoIndent'; -import { getEnterAction } from 'vs/editor/common/languages/enterAction'; +import * as strings from '../../../../base/common/strings.js'; +import { ShiftCommand } from '../../../common/commands/shiftCommand.js'; +import { EditorAutoIndentStrategy } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { CompleteEnterAction, IndentAction } from '../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { IndentConsts } from '../../../common/languages/supports/indentRules.js'; +import * as indentUtils from '../../indentation/common/indentUtils.js'; +import { getGoodIndentForLine, getIndentMetadata, IIndentConverter, IVirtualModel } from '../../../common/languages/autoIndent.js'; +import { getEnterAction } from '../../../common/languages/enterAction.js'; export class MoveLinesCommand implements ICommand { diff --git a/src/vs/editor/contrib/linesOperations/browser/sortLinesCommand.ts b/src/vs/editor/contrib/linesOperations/browser/sortLinesCommand.ts index 0680bd1f7..4c13058d1 100644 --- a/src/vs/editor/contrib/linesOperations/browser/sortLinesCommand.ts +++ b/src/vs/editor/contrib/linesOperations/browser/sortLinesCommand.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; export class SortLinesCommand implements ICommand { diff --git a/src/vs/editor/contrib/linesOperations/test/browser/copyLinesCommand.test.ts b/src/vs/editor/contrib/linesOperations/test/browser/copyLinesCommand.test.ts index 48348ae96..763389a5d 100644 --- a/src/vs/editor/contrib/linesOperations/test/browser/copyLinesCommand.test.ts +++ b/src/vs/editor/contrib/linesOperations/test/browser/copyLinesCommand.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { CopyLinesCommand } from 'vs/editor/contrib/linesOperations/browser/copyLinesCommand'; -import { DuplicateSelectionAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { CopyLinesCommand } from '../../browser/copyLinesCommand.js'; +import { DuplicateSelectionAction } from '../../browser/linesOperations.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; function testCopyLinesDownCommand(lines: string[], selection: Selection, expectedLines: string[], expectedSelection: Selection): void { testCommand(lines, null, selection, (accessor, sel) => new CopyLinesCommand(sel, true), expectedLines, expectedSelection); diff --git a/src/vs/editor/contrib/linesOperations/test/browser/linesOperations.test.ts b/src/vs/editor/contrib/linesOperations/test/browser/linesOperations.test.ts index f99fb6242..199b22c12 100644 --- a/src/vs/editor/contrib/linesOperations/test/browser/linesOperations.test.ts +++ b/src/vs/editor/contrib/linesOperations/test/browser/linesOperations.test.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import type { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { CamelCaseAction, PascalCaseAction, DeleteAllLeftAction, DeleteAllRightAction, DeleteDuplicateLinesAction, DeleteLinesAction, IndentLinesAction, InsertLineAfterAction, InsertLineBeforeAction, JoinLinesAction, KebabCaseAction, LowerCaseAction, SnakeCaseAction, SortLinesAscendingAction, SortLinesDescendingAction, TitleCaseAction, TransposeAction, UpperCaseAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { CoreEditingCommands } from '../../../../browser/coreCommands.js'; +import type { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorAction } from '../../../../browser/editorExtensions.js'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { ITextModel } from '../../../../common/model.js'; +import { ViewModel } from '../../../../common/viewModel/viewModelImpl.js'; +import { CamelCaseAction, PascalCaseAction, DeleteAllLeftAction, DeleteAllRightAction, DeleteDuplicateLinesAction, DeleteLinesAction, IndentLinesAction, InsertLineAfterAction, InsertLineBeforeAction, JoinLinesAction, KebabCaseAction, LowerCaseAction, SnakeCaseAction, SortLinesAscendingAction, SortLinesDescendingAction, TitleCaseAction, TransposeAction, UpperCaseAction } from '../../browser/linesOperations.js'; +import { withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; function assertSelection(editor: ICodeEditor, expected: Selection | Selection[]): void { if (!Array.isArray(expected)) { diff --git a/src/vs/editor/contrib/linesOperations/test/browser/moveLinesCommand.test.ts b/src/vs/editor/contrib/linesOperations/test/browser/moveLinesCommand.test.ts index 65941bd97..f83419cc7 100644 --- a/src/vs/editor/contrib/linesOperations/test/browser/moveLinesCommand.test.ts +++ b/src/vs/editor/contrib/linesOperations/test/browser/moveLinesCommand.test.ts @@ -2,17 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IndentationRule } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { MoveLinesCommand } from 'vs/editor/contrib/linesOperations/browser/moveLinesCommand'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { EditorAutoIndentStrategy } from '../../../../common/config/editorOptions.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { IndentationRule } from '../../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { LanguageService } from '../../../../common/services/languageService.js'; +import { MoveLinesCommand } from '../../browser/moveLinesCommand.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; const enum MoveLinesDirection { Up, diff --git a/src/vs/editor/contrib/linesOperations/test/browser/sortLinesCommand.test.ts b/src/vs/editor/contrib/linesOperations/test/browser/sortLinesCommand.test.ts index 423001a71..3e79cb343 100644 --- a/src/vs/editor/contrib/linesOperations/test/browser/sortLinesCommand.test.ts +++ b/src/vs/editor/contrib/linesOperations/test/browser/sortLinesCommand.test.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { SortLinesCommand } from 'vs/editor/contrib/linesOperations/browser/sortLinesCommand'; -import { testCommand } from 'vs/editor/test/browser/testCommand'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { SortLinesCommand } from '../../browser/sortLinesCommand.js'; +import { testCommand } from '../../../../test/browser/testCommand.js'; function testSortLinesAscendingCommand(lines: string[], selection: Selection, expectedLines: string[], expectedSelection: Selection): void { testCommand(lines, null, selection, (accessor, sel) => new SortLinesCommand(sel, false), expectedLines, expectedSelection); diff --git a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts index 491c00b67..62c8ab664 100644 --- a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts +++ b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts @@ -3,38 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { Delayer, first } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Color } from 'vs/base/common/color'; -import { isCancellationError, onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import * as strings from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, registerModelAndPositionCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { IEditorContribution, IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IModelDeltaDecoration, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { LinkedEditingRangeProvider, LinkedEditingRanges } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import * as nls from 'vs/nls'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { registerColor } from 'vs/platform/theme/common/colorRegistry'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import 'vs/css!./linkedEditing'; +import * as arrays from '../../../../base/common/arrays.js'; +import { Delayer, first } from '../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Color } from '../../../../base/common/color.js'; +import { isCancellationError, onUnexpectedError, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { Event } from '../../../../base/common/event.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import * as strings from '../../../../base/common/strings.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, registerModelAndPositionCommand, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { IModelDeltaDecoration, ITextModel, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { LinkedEditingRangeProvider, LinkedEditingRanges } from '../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import * as nls from '../../../../nls.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { registerColor } from '../../../../platform/theme/common/colorRegistry.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import './linkedEditing.css'; export const CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE = new RawContextKey('LinkedEditingInputVisible', false); diff --git a/src/vs/editor/contrib/linkedEditing/test/browser/linkedEditing.test.ts b/src/vs/editor/contrib/linkedEditing/test/browser/linkedEditing.test.ts index 80d6ed937..df4e27206 100644 --- a/src/vs/editor/contrib/linkedEditing/test/browser/linkedEditing.test.ts +++ b/src/vs/editor/contrib/linkedEditing/test/browser/linkedEditing.test.ts @@ -4,24 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { USUAL_WORD_SEPARATORS } from 'vs/editor/common/core/wordHelper'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { DeleteAllLeftAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; -import { LinkedEditingContribution } from 'vs/editor/contrib/linkedEditing/browser/linkedEditing'; -import { DeleteWordLeft } from 'vs/editor/contrib/wordOperations/browser/wordOperations'; -import { ITestCodeEditor, createCodeEditorServices, instantiateTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { CoreEditingCommands } from '../../../../browser/coreCommands.js'; +import { IPosition, Position } from '../../../../common/core/position.js'; +import { IRange, Range } from '../../../../common/core/range.js'; +import { USUAL_WORD_SEPARATORS } from '../../../../common/core/wordHelper.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { ITextModel } from '../../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { DeleteAllLeftAction } from '../../../linesOperations/browser/linesOperations.js'; +import { LinkedEditingContribution } from '../../browser/linkedEditing.js'; +import { DeleteWordLeft } from '../../../wordOperations/browser/wordOperations.js'; +import { ITestCodeEditor, createCodeEditorServices, instantiateTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { instantiateTextModel } from '../../../../test/common/testTextModel.js'; +import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; const mockFile = URI.parse('test:somefile.ttt'); const mockFileSelector = { scheme: 'test' }; diff --git a/src/vs/editor/contrib/links/browser/getLinks.ts b/src/vs/editor/contrib/links/browser/getLinks.ts index 5eabfc758..cd2e19c75 100644 --- a/src/vs/editor/contrib/links/browser/getLinks.ts +++ b/src/vs/editor/contrib/links/browser/getLinks.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { DisposableStore, isDisposable } from 'vs/base/common/lifecycle'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILink, ILinksList, LinkProvider } from 'vs/editor/common/languages'; -import { IModelService } from 'vs/editor/common/services/model'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { DisposableStore, isDisposable } from '../../../../base/common/lifecycle.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILink, ILinksList, LinkProvider } from '../../../common/languages.js'; +import { IModelService } from '../../../common/services/model.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; export class Link implements ILink { diff --git a/src/vs/editor/contrib/links/browser/links.ts b/src/vs/editor/contrib/links/browser/links.ts index 073c85c85..4fc3c17d9 100644 --- a/src/vs/editor/contrib/links/browser/links.ts +++ b/src/vs/editor/contrib/links/browser/links.ts @@ -3,33 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createCancelablePromise, CancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import * as platform from 'vs/base/common/platform'; -import * as resources from 'vs/base/common/resources'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./links'; -import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { LinkProvider } from 'vs/editor/common/languages'; -import { IModelDecorationsChangeAccessor, IModelDeltaDecoration, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ClickLinkGesture, ClickLinkKeyboardEvent, ClickLinkMouseEvent } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; -import { getLinks, Link, LinksList } from 'vs/editor/contrib/links/browser/getLinks'; -import * as nls from 'vs/nls'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { createCancelablePromise, CancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import * as platform from '../../../../base/common/platform.js'; +import * as resources from '../../../../base/common/resources.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { URI } from '../../../../base/common/uri.js'; +import './links.css'; +import { ICodeEditor, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { LinkProvider } from '../../../common/languages.js'; +import { IModelDecorationsChangeAccessor, IModelDeltaDecoration, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ClickLinkGesture, ClickLinkKeyboardEvent, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js'; +import { getLinks, Link, LinksList } from './getLinks.js'; +import * as nls from '../../../../nls.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; export class LinkDetector extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts b/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts index 6ac8f6f7d..4869ad013 100644 --- a/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts +++ b/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; class LongLinesHelper extends Disposable implements IEditorContribution { public static readonly ID = 'editor.contrib.longLinesHelper'; diff --git a/src/vs/editor/contrib/message/browser/messageController.ts b/src/vs/editor/contrib/message/browser/messageController.ts index dd3222765..8e4d1e2e9 100644 --- a/src/vs/editor/contrib/message/browser/messageController.ts +++ b/src/vs/editor/contrib/message/browser/messageController.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { renderMarkdown } from 'vs/base/browser/markdownRenderer'; -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { Event } from 'vs/base/common/event'; -import { IMarkdownString, isMarkdownString } from 'vs/base/common/htmlContent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import 'vs/css!./messageController'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { openLinkFromMarkdown } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import * as nls from 'vs/nls'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import * as dom from 'vs/base/browser/dom'; +import { renderMarkdown } from '../../../../base/browser/markdownRenderer.js'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { Event } from '../../../../base/common/event.js'; +import { IMarkdownString, isMarkdownString } from '../../../../base/common/htmlContent.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { DisposableStore, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import './messageController.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution, ScrollType } from '../../../common/editorCommon.js'; +import { PositionAffinity } from '../../../common/model.js'; +import { openLinkFromMarkdown } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import * as nls from '../../../../nls.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import * as dom from '../../../../base/browser/dom.js'; export class MessageController implements IEditorContribution { diff --git a/src/vs/editor/contrib/multicursor/browser/multicursor.ts b/src/vs/editor/contrib/multicursor/browser/multicursor.ts index 02e7a44e7..d9b7237f2 100644 --- a/src/vs/editor/contrib/multicursor/browser/multicursor.ts +++ b/src/vs/editor/contrib/multicursor/browser/multicursor.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { status } from 'vs/base/browser/ui/aria/aria'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { Constants } from 'vs/base/common/uint'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CursorState } from 'vs/editor/common/cursorCommon'; -import { CursorChangeReason, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { CursorMoveCommands } from 'vs/editor/common/cursor/cursorMoveCommands'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution, IEditorDecorationsCollection, ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { FindMatch, ITextModel } from 'vs/editor/common/model'; -import { CommonFindController } from 'vs/editor/contrib/find/browser/findController'; -import { FindOptionOverride, INewFindReplaceState } from 'vs/editor/contrib/find/browser/findState'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { getSelectionHighlightDecorationOptions } from 'vs/editor/contrib/wordHighlighter/browser/highlightDecorations'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { status } from '../../../../base/browser/ui/aria/aria.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Constants } from '../../../../base/common/uint.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CursorState } from '../../../common/cursorCommon.js'; +import { CursorChangeReason, ICursorSelectionChangedEvent } from '../../../common/cursorEvents.js'; +import { CursorMoveCommands } from '../../../common/cursor/cursorMoveCommands.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution, IEditorDecorationsCollection, ScrollType } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { FindMatch, ITextModel } from '../../../common/model.js'; +import { CommonFindController } from '../../find/browser/findController.js'; +import { FindOptionOverride, INewFindReplaceState } from '../../find/browser/findState.js'; +import * as nls from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { getSelectionHighlightDecorationOptions } from '../../wordHighlighter/browser/highlightDecorations.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; function announceCursorChange(previousCursorState: CursorState[], cursorState: CursorState[]): void { const cursorDiff = cursorState.filter(cs => !previousCursorState.find(pcs => pcs.equals(cs))); diff --git a/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts b/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts index 008150e7c..06b137496 100644 --- a/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts +++ b/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { EndOfLineSequence } from 'vs/editor/common/model'; -import { CommonFindController } from 'vs/editor/contrib/find/browser/findController'; -import { AddSelectionToNextFindMatchAction, InsertCursorAbove, InsertCursorBelow, MultiCursorSelectionController, SelectHighlightsAction } from 'vs/editor/contrib/multicursor/browser/multicursor'; -import { ITestCodeEditor, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { EndOfLineSequence } from '../../../../common/model.js'; +import { CommonFindController } from '../../../find/browser/findController.js'; +import { AddSelectionToNextFindMatchAction, InsertCursorAbove, InsertCursorBelow, MultiCursorSelectionController, SelectHighlightsAction } from '../../browser/multicursor.js'; +import { ITestCodeEditor, withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { IStorageService, InMemoryStorageService } from '../../../../../platform/storage/common/storage.js'; suite('Multicursor', () => { diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts index dda7f9753..afeaa40c9 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Lazy } from 'vs/base/common/lazy'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ParameterHintsModel, TriggerContext } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel'; -import { Context } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp'; -import * as nls from 'vs/nls'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ParameterHintsWidget } from './parameterHintsWidget'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Lazy } from '../../../../base/common/lazy.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import * as languages from '../../../common/languages.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ParameterHintsModel, TriggerContext } from './parameterHintsModel.js'; +import { Context } from './provideSignatureHelp.js'; +import * as nls from '../../../../nls.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ParameterHintsWidget } from './parameterHintsWidget.js'; export class ParameterHintsController extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHintsModel.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHintsModel.ts index 033e842d4..0c07303dc 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHintsModel.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHintsModel.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, Delayer } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CharacterSet } from 'vs/editor/common/core/characterClassifier'; -import { ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import * as languages from 'vs/editor/common/languages'; -import { provideSignatureHelp } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp'; +import { CancelablePromise, createCancelablePromise, Delayer } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CharacterSet } from '../../../common/core/characterClassifier.js'; +import { ICursorSelectionChangedEvent } from '../../../common/cursorEvents.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import * as languages from '../../../common/languages.js'; +import { provideSignatureHelp } from './provideSignatureHelp.js'; export interface TriggerContext { readonly triggerKind: languages.SignatureHelpTriggerKind; diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts index 32546cff2..b2f044f2f 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import * as aria from 'vs/base/browser/ui/aria/aria'; -import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { Codicon } from 'vs/base/common/codicons'; -import { Event } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { assertIsDefined } from 'vs/base/common/types'; -import 'vs/css!./parameterHints'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EDITOR_FONT_DEFAULTS, EditorOption } from 'vs/editor/common/config/editorOptions'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IMarkdownRenderResult, MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { ParameterHintsModel } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel'; -import { Context } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp'; -import * as nls from 'vs/nls'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { listHighlightForeground, registerColor } from 'vs/platform/theme/common/colorRegistry'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import * as dom from '../../../../base/browser/dom.js'; +import * as aria from '../../../../base/browser/ui/aria/aria.js'; +import { DomScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Event } from '../../../../base/common/event.js'; +import { IMarkdownString } from '../../../../base/common/htmlContent.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { escapeRegExpCharacters } from '../../../../base/common/strings.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import './parameterHints.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EDITOR_FONT_DEFAULTS, EditorOption } from '../../../common/config/editorOptions.js'; +import * as languages from '../../../common/languages.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { IMarkdownRenderResult, MarkdownRenderer } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { ParameterHintsModel } from './parameterHintsModel.js'; +import { Context } from './provideSignatureHelp.js'; +import * as nls from '../../../../nls.js'; +import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { listHighlightForeground, registerColor } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; const $ = dom.$; diff --git a/src/vs/editor/contrib/parameterHints/browser/provideSignatureHelp.ts b/src/vs/editor/contrib/parameterHints/browser/provideSignatureHelp.ts index 8f4341b48..b35d6e0e2 100644 --- a/src/vs/editor/contrib/parameterHints/browser/provideSignatureHelp.ts +++ b/src/vs/editor/contrib/parameterHints/browser/provideSignatureHelp.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import * as languages from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import * as languages from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; export const Context = { Visible: new RawContextKey('parameterHintsVisible', false), diff --git a/src/vs/editor/contrib/parameterHints/test/browser/parameterHintsModel.test.ts b/src/vs/editor/contrib/parameterHints/test/browser/parameterHintsModel.test.ts index 10372b408..a0138cb39 100644 --- a/src/vs/editor/contrib/parameterHints/test/browser/parameterHintsModel.test.ts +++ b/src/vs/editor/contrib/parameterHints/test/browser/parameterHintsModel.test.ts @@ -4,24 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { promiseWithResolvers } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import * as languages from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ParameterHintsModel } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel'; -import { createTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; +import { promiseWithResolvers } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import * as languages from '../../../../common/languages.js'; +import { ITextModel } from '../../../../common/model.js'; +import { ParameterHintsModel } from '../../browser/parameterHintsModel.js'; +import { createTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { InMemoryStorageService, IStorageService } from '../../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../../../platform/telemetry/common/telemetryUtils.js'; const mockFile = URI.parse('test:somefile.ttt'); const mockFileSelector = { scheme: 'test' }; diff --git a/src/vs/editor/contrib/peekView/browser/peekView.ts b/src/vs/editor/contrib/peekView/browser/peekView.ts index 86f6cb1d4..17084e7ae 100644 --- a/src/vs/editor/contrib/peekView/browser/peekView.ts +++ b/src/vs/editor/contrib/peekView/browser/peekView.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IMouseEvent } from 'vs/base/browser/mouseEvent'; -import { ActionBar, ActionsOrientation, IActionBarOptions } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Action } from 'vs/base/common/actions'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Color } from 'vs/base/common/color'; -import { Emitter } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import * as objects from 'vs/base/common/objects'; -import 'vs/css!./media/peekViewWidget'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { IOptions, IStyles, ZoneWidget } from 'vs/editor/contrib/zoneWidget/browser/zoneWidget'; -import * as nls from 'vs/nls'; -import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator, IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { activeContrastBorder, contrastBorder, editorForeground, editorInfoForeground, registerColor } from 'vs/platform/theme/common/colorRegistry'; +import * as dom from '../../../../base/browser/dom.js'; +import { IMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { ActionBar, ActionsOrientation, IActionBarOptions } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { Action } from '../../../../base/common/actions.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { Color } from '../../../../base/common/color.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import * as objects from '../../../../base/common/objects.js'; +import './media/peekViewWidget.css'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { IOptions, IStyles, ZoneWidget } from '../../zoneWidget/browser/zoneWidget.js'; +import * as nls from '../../../../nls.js'; +import { createActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { createDecorator, IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { activeContrastBorder, contrastBorder, editorForeground, editorInfoForeground, registerColor } from '../../../../platform/theme/common/colorRegistry.js'; export const IPeekViewService = createDecorator('IPeekViewService'); export interface IPeekViewService { diff --git a/src/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.ts b/src/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.ts index e9994c4b0..8cb84d946 100644 --- a/src/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.ts +++ b/src/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./placeholderText'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ghostTextForeground } from 'vs/editor/common/core/editorColorRegistry'; -import { localize } from 'vs/nls'; -import { registerColor } from 'vs/platform/theme/common/colorUtils'; -import { PlaceholderTextContribution } from './placeholderTextContribution'; -import { wrapInReloadableClass1 } from 'vs/platform/observable/common/wrapInReloadableClass'; +import './placeholderText.css'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { ghostTextForeground } from '../../../common/core/editorColorRegistry.js'; +import { localize } from '../../../../nls.js'; +import { registerColor } from '../../../../platform/theme/common/colorUtils.js'; +import { PlaceholderTextContribution } from './placeholderTextContribution.js'; +import { wrapInReloadableClass1 } from '../../../../platform/observable/common/wrapInReloadableClass.js'; registerEditorContribution(PlaceholderTextContribution.ID, wrapInReloadableClass1(() => PlaceholderTextContribution), EditorContributionInstantiation.Eager); diff --git a/src/vs/editor/contrib/placeholderText/browser/placeholderTextContribution.ts b/src/vs/editor/contrib/placeholderText/browser/placeholderTextContribution.ts index f048991d0..b06224c3e 100644 --- a/src/vs/editor/contrib/placeholderText/browser/placeholderTextContribution.ts +++ b/src/vs/editor/contrib/placeholderText/browser/placeholderTextContribution.ts @@ -3,16 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { h } from 'vs/base/browser/dom'; -import { structuralEquals } from 'vs/base/common/equals'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { autorun, constObservable, derivedObservableWithCache, derivedOpts, IObservable, IReader } from 'vs/base/common/observable'; -import { DebugOwner } from 'vs/base/common/observableInternal/debugName'; -import { derivedWithStore } from 'vs/base/common/observableInternal/derived'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { observableCodeEditor } from 'vs/editor/browser/observableCodeEditor'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { h } from '../../../../base/browser/dom.js'; +import { structuralEquals } from '../../../../base/common/equals.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { autorun, constObservable, DebugOwner, derivedObservableWithCache, derivedOpts, derivedWithStore, IObservable, IReader } from '../../../../base/common/observable.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { observableCodeEditor } from '../../../browser/observableCodeEditor.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; /** * Use the editor option to set the placeholder text. diff --git a/src/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.ts b/src/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.ts index 9334d7fcd..b1fa0b3f7 100644 --- a/src/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { stripIcons } from 'vs/base/common/iconLabels'; -import { IEditor } from 'vs/editor/common/editorCommon'; -import { ILocalizedString } from 'vs/nls'; -import { isLocalizedString } from 'vs/platform/action/common/action'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { AbstractCommandsQuickAccessProvider, ICommandQuickPick, ICommandsQuickAccessOptions } from 'vs/platform/quickinput/browser/commandsQuickAccess'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { stripIcons } from '../../../../base/common/iconLabels.js'; +import { IEditor } from '../../../common/editorCommon.js'; +import { ILocalizedString } from '../../../../nls.js'; +import { isLocalizedString } from '../../../../platform/action/common/action.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { AbstractCommandsQuickAccessProvider, ICommandQuickPick, ICommandsQuickAccessOptions } from '../../../../platform/quickinput/browser/commandsQuickAccess.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; export abstract class AbstractEditorCommandsQuickAccessProvider extends AbstractCommandsQuickAccessProvider { diff --git a/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts b/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts index c809937fa..749259c27 100644 --- a/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { createSingleCallFunction } from 'vs/base/common/functional'; -import { DisposableStore, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { getCodeEditor, isDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { IRange } from 'vs/editor/common/core/range'; -import { IDiffEditor, IEditor, ScrollType } from 'vs/editor/common/editorCommon'; -import { IModelDeltaDecoration, ITextModel, OverviewRulerLane } from 'vs/editor/common/model'; -import { overviewRulerRangeHighlight } from 'vs/editor/common/core/editorColorRegistry'; -import { IQuickAccessProvider, IQuickAccessProviderRunOptions } from 'vs/platform/quickinput/common/quickAccess'; -import { IKeyMods, IQuickPick, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { themeColorFromId } from 'vs/platform/theme/common/themeService'; -import { status } from 'vs/base/browser/ui/aria/aria'; -import { TextEditorSelectionSource } from 'vs/platform/editor/common/editor'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Event } from '../../../../base/common/event.js'; +import { createSingleCallFunction } from '../../../../base/common/functional.js'; +import { DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { getCodeEditor, isDiffEditor } from '../../../browser/editorBrowser.js'; +import { IRange } from '../../../common/core/range.js'; +import { IDiffEditor, IEditor, ScrollType } from '../../../common/editorCommon.js'; +import { IModelDeltaDecoration, ITextModel, OverviewRulerLane } from '../../../common/model.js'; +import { overviewRulerRangeHighlight } from '../../../common/core/editorColorRegistry.js'; +import { IQuickAccessProvider, IQuickAccessProviderRunOptions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { IKeyMods, IQuickPick, IQuickPickItem } from '../../../../platform/quickinput/common/quickInput.js'; +import { themeColorFromId } from '../../../../platform/theme/common/themeService.js'; +import { status } from '../../../../base/browser/ui/aria/aria.js'; +import { TextEditorSelectionSource } from '../../../../platform/editor/common/editor.js'; interface IEditorLineDecoration { readonly rangeHighlightId: string; diff --git a/src/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.ts b/src/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.ts index b1ccfa95d..4d720513f 100644 --- a/src/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { getCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { IEditor, ScrollType } from 'vs/editor/common/editorCommon'; -import { AbstractEditorNavigationQuickAccessProvider, IQuickAccessTextEditorContext } from 'vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess'; -import { localize } from 'vs/nls'; -import { IQuickPick, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { getCodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { IRange } from '../../../common/core/range.js'; +import { IEditor, ScrollType } from '../../../common/editorCommon.js'; +import { AbstractEditorNavigationQuickAccessProvider, IQuickAccessTextEditorContext } from './editorNavigationQuickAccess.js'; +import { localize } from '../../../../nls.js'; +import { IQuickPick, IQuickPickItem } from '../../../../platform/quickinput/common/quickInput.js'; interface IGotoLineQuickPickItem extends IQuickPickItem, Partial { } diff --git a/src/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.ts b/src/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.ts index 9ff33f418..4472fd931 100644 --- a/src/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DeferredPromise } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IMatch } from 'vs/base/common/filters'; -import { IPreparedQuery, pieceToQuery, prepareQuery, scoreFuzzy2 } from 'vs/base/common/fuzzyScorer'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { format, trim } from 'vs/base/common/strings'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { DocumentSymbol, SymbolKind, SymbolKinds, SymbolTag, getAriaLabelForSymbol } from 'vs/editor/common/languages'; -import { IOutlineModelService } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { AbstractEditorNavigationQuickAccessProvider, IEditorNavigationQuickAccessOptions, IQuickAccessTextEditorContext } from 'vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess'; -import { localize } from 'vs/nls'; -import { IQuickInputButton, IQuickPick, IQuickPickItem, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { Position } from 'vs/editor/common/core/position'; -import { findLast } from 'vs/base/common/arraysFind'; -import { IQuickAccessProviderRunOptions } from 'vs/platform/quickinput/common/quickAccess'; -import { URI } from 'vs/base/common/uri'; +import { DeferredPromise } from '../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { IMatch } from '../../../../base/common/filters.js'; +import { IPreparedQuery, pieceToQuery, prepareQuery, scoreFuzzy2 } from '../../../../base/common/fuzzyScorer.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { format, trim } from '../../../../base/common/strings.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { DocumentSymbol, SymbolKind, SymbolKinds, SymbolTag, getAriaLabelForSymbol } from '../../../common/languages.js'; +import { IOutlineModelService } from '../../documentSymbols/browser/outlineModel.js'; +import { AbstractEditorNavigationQuickAccessProvider, IEditorNavigationQuickAccessOptions, IQuickAccessTextEditorContext } from './editorNavigationQuickAccess.js'; +import { localize } from '../../../../nls.js'; +import { IQuickInputButton, IQuickPick, IQuickPickItem, IQuickPickSeparator } from '../../../../platform/quickinput/common/quickInput.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { Position } from '../../../common/core/position.js'; +import { findLast } from '../../../../base/common/arraysFind.js'; +import { IQuickAccessProviderRunOptions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { URI } from '../../../../base/common/uri.js'; export interface IGotoSymbolQuickPickItem extends IQuickPickItem { kind: SymbolKind; diff --git a/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts b/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts index 36ff95e81..85c346848 100644 --- a/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts +++ b/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; -import * as nls from 'vs/nls'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { MessageController } from '../../message/browser/messageController.js'; +import * as nls from '../../../../nls.js'; export class ReadOnlyMessageController extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/contrib/rename/browser/rename.ts b/src/vs/editor/contrib/rename/browser/rename.ts index ef5783aa5..e6e77aa01 100644 --- a/src/vs/editor/contrib/rename/browser/rename.ts +++ b/src/vs/editor/contrib/rename/browser/rename.ts @@ -3,42 +3,42 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { raceCancellation } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { CancellationError, onUnexpectedError } from 'vs/base/common/errors'; -import { isMarkdownString } from 'vs/base/common/htmlContent'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorAction, registerEditorCommand, registerEditorContribution, registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; -import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { NewSymbolNameTriggerKind, Rejection, RenameLocation, RenameProvider, WorkspaceEdit } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; -import * as nls from 'vs/nls'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { CONTEXT_RENAME_INPUT_VISIBLE, NewNameSource, RenameWidget, RenameWidgetResult } from './renameWidget'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { raceCancellation } from '../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { CancellationError, onUnexpectedError } from '../../../../base/common/errors.js'; +import { isMarkdownString } from '../../../../base/common/htmlContent.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorAction, registerEditorCommand, registerEditorContribution, registerModelAndPositionCommand } from '../../../browser/editorExtensions.js'; +import { IBulkEditService } from '../../../browser/services/bulkEditService.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { NewSymbolNameTriggerKind, Rejection, RenameLocation, RenameProvider, WorkspaceEdit } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ITextResourceConfigurationService } from '../../../common/services/textResourceConfiguration.js'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from '../../editorState/browser/editorState.js'; +import { MessageController } from '../../message/browser/messageController.js'; +import * as nls from '../../../../nls.js'; +import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { ConfigurationScope, Extensions, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IEditorProgressService } from '../../../../platform/progress/common/progress.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { CONTEXT_RENAME_INPUT_VISIBLE, NewNameSource, RenameWidget, RenameWidgetResult } from './renameWidget.js'; class RenameSkeleton { diff --git a/src/vs/editor/contrib/rename/browser/renameWidget.ts b/src/vs/editor/contrib/rename/browser/renameWidget.ts index b284cd519..f9294c16c 100644 --- a/src/vs/editor/contrib/rename/browser/renameWidget.ts +++ b/src/vs/editor/contrib/rename/browser/renameWidget.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import * as aria from 'vs/base/browser/ui/aria/aria'; -import { IManagedHover } from 'vs/base/browser/ui/hover/hover'; -import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2'; -import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import { renderIcon } from 'vs/base/browser/ui/iconLabel/iconLabels'; -import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { List } from 'vs/base/browser/ui/list/listWidget'; -import * as arrays from 'vs/base/common/arrays'; -import { DeferredPromise, raceCancellation } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Codicon } from 'vs/base/common/codicons'; -import { Emitter } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { assertType, isDefined } from 'vs/base/common/types'; -import 'vs/css!./renameWidget'; -import * as domFontInfo from 'vs/editor/browser/config/domFontInfo'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { IDimension } from 'vs/editor/common/core/dimension'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { NewSymbolName, NewSymbolNameTag, NewSymbolNameTriggerKind, ProviderResult } from 'vs/editor/common/languages'; -import * as nls from 'vs/nls'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ILogService } from 'vs/platform/log/common/log'; -import { getListStyles } from 'vs/platform/theme/browser/defaultStyles'; +import * as dom from '../../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import * as aria from '../../../../base/browser/ui/aria/aria.js'; +import { IManagedHover } from '../../../../base/browser/ui/hover/hover.js'; +import { getBaseLayerHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegate2.js'; +import { getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import { renderIcon } from '../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { IListRenderer, IListVirtualDelegate } from '../../../../base/browser/ui/list/list.js'; +import { List } from '../../../../base/browser/ui/list/listWidget.js'; +import * as arrays from '../../../../base/common/arrays.js'; +import { DeferredPromise, raceCancellation } from '../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { assertType, isDefined } from '../../../../base/common/types.js'; +import './renameWidget.css'; +import * as domFontInfo from '../../../browser/config/domFontInfo.js'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { FontInfo } from '../../../common/config/fontInfo.js'; +import { IDimension } from '../../../common/core/dimension.js'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { NewSymbolName, NewSymbolNameTag, NewSymbolNameTriggerKind, ProviderResult } from '../../../common/languages.js'; +import * as nls from '../../../../nls.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { getListStyles } from '../../../../platform/theme/browser/defaultStyles.js'; import { editorWidgetBackground, inputBackground, @@ -45,8 +45,8 @@ import { quickInputListFocusForeground, widgetBorder, widgetShadow -} from 'vs/platform/theme/common/colorRegistry'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; +} from '../../../../platform/theme/common/colorRegistry.js'; +import { IColorTheme, IThemeService } from '../../../../platform/theme/common/themeService.js'; /** for debugging */ const _sticky = false @@ -318,7 +318,8 @@ export class RenameWidget implements IRenameWidget, IContentWidget, IDisposable } afterRender(position: ContentWidgetPositionPreference | null): void { - this._trace('invoking afterRender, position: ', position ? 'not null' : 'null'); + // FIXME@ulugbekna: commenting trace log out until we start unmounting the widget from editor properly - https://github.com/microsoft/vscode/issues/226975 + // this._trace('invoking afterRender, position: ', position ? 'not null' : 'null'); if (position === null) { // cancel rename when input widget isn't rendered anymore this.cancelInput(true, 'afterRender (because position is null)'); @@ -363,7 +364,7 @@ export class RenameWidget implements IRenameWidget, IContentWidget, IDisposable } cancelInput(focusEditor: boolean, caller: string): void { - this._trace(`invoking cancelInput, caller: ${caller}, _currentCancelInput: ${this._currentAcceptInput ? 'not undefined' : 'undefined'}`); + // this._trace(`invoking cancelInput, caller: ${caller}, _currentCancelInput: ${this._currentAcceptInput ? 'not undefined' : 'undefined'}`); this._currentCancelInput?.(focusEditor); } diff --git a/src/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.ts b/src/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.ts index 2a60e180c..0d66e4dd3 100644 --- a/src/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.ts +++ b/src/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { EditorOption, IEditorMinimapOptions } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IModelDeltaDecoration, MinimapPosition, MinimapSectionHeaderStyle, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { FindSectionHeaderOptions, SectionHeader } from 'vs/editor/common/services/findSectionHeaders'; +import { CancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { EditorOption, IEditorMinimapOptions } from '../../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { IModelDeltaDecoration, MinimapPosition, MinimapSectionHeaderStyle, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import { FindSectionHeaderOptions, SectionHeader } from '../../../common/services/findSectionHeaders.js'; export class SectionHeaderDetector extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts index 72e01d333..836b30f9b 100644 --- a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle'; -import * as errors from 'vs/base/common/errors'; -import { ITextModel } from 'vs/editor/common/model'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { DocumentSemanticTokensProvider, SemanticTokens, SemanticTokensEdits } from 'vs/editor/common/languages'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { SemanticTokensProviderStyling, toMultilineTokens2 } from 'vs/editor/common/services/semanticTokensProviderStyling'; -import { getDocumentSemanticTokens, hasDocumentSemanticTokensProvider, isSemanticTokens, isSemanticTokensEdits } from 'vs/editor/contrib/semanticTokens/common/getSemanticTokens'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ISemanticTokensStylingService } from 'vs/editor/common/services/semanticTokensStyling'; -import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; -import { SEMANTIC_HIGHLIGHTING_SETTING_ID, isSemanticColoringEnabled } from 'vs/editor/contrib/semanticTokens/common/semanticTokensConfig'; +import { Disposable, IDisposable, dispose } from '../../../../base/common/lifecycle.js'; +import * as errors from '../../../../base/common/errors.js'; +import { ITextModel } from '../../../common/model.js'; +import { IModelContentChangedEvent } from '../../../common/textModelEvents.js'; +import { DocumentSemanticTokensProvider, SemanticTokens, SemanticTokensEdits } from '../../../common/languages.js'; +import { IModelService } from '../../../common/services/model.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { SemanticTokensProviderStyling, toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js'; +import { getDocumentSemanticTokens, hasDocumentSemanticTokensProvider, isSemanticTokens, isSemanticTokensEdits } from '../common/getSemanticTokens.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ISemanticTokensStylingService } from '../../../common/services/semanticTokensStyling.js'; +import { registerEditorFeature } from '../../../common/editorFeatures.js'; +import { SEMANTIC_HIGHLIGHTING_SETTING_ID, isSemanticColoringEnabled } from '../common/semanticTokensConfig.js'; export class DocumentSemanticTokensFeature extends Disposable { diff --git a/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts index 52a1f9401..1662f1fec 100644 --- a/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { getDocumentRangeSemanticTokens, hasDocumentRangeSemanticTokensProvider } from 'vs/editor/contrib/semanticTokens/common/getSemanticTokens'; -import { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from 'vs/editor/contrib/semanticTokens/common/semanticTokensConfig'; -import { toMultilineTokens2 } from 'vs/editor/common/services/semanticTokensProviderStyling'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DocumentRangeSemanticTokensProvider } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ISemanticTokensStylingService } from 'vs/editor/common/services/semanticTokensStyling'; +import { CancelablePromise, createCancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { getDocumentRangeSemanticTokens, hasDocumentRangeSemanticTokensProvider } from '../common/getSemanticTokens.js'; +import { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from '../common/semanticTokensConfig.js'; +import { toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { DocumentRangeSemanticTokensProvider } from '../../../common/languages.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ISemanticTokensStylingService } from '../../../common/services/semanticTokensStyling.js'; export class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/contrib/semanticTokens/common/getSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/common/getSemanticTokens.ts index 298da0ce0..cd7cbd3e7 100644 --- a/src/vs/editor/contrib/semanticTokens/common/getSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/common/getSemanticTokens.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { URI } from 'vs/base/common/uri'; -import { ITextModel } from 'vs/editor/common/model'; -import { DocumentSemanticTokensProvider, SemanticTokens, SemanticTokensEdits, SemanticTokensLegend, DocumentRangeSemanticTokensProvider } from 'vs/editor/common/languages'; -import { IModelService } from 'vs/editor/common/services/model'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { assertType } from 'vs/base/common/types'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { encodeSemanticTokensDto } from 'vs/editor/common/services/semanticTokensDto'; -import { Range } from 'vs/editor/common/core/range'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ITextModel } from '../../../common/model.js'; +import { DocumentSemanticTokensProvider, SemanticTokens, SemanticTokensEdits, SemanticTokensLegend, DocumentRangeSemanticTokensProvider } from '../../../common/languages.js'; +import { IModelService } from '../../../common/services/model.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { assertType } from '../../../../base/common/types.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { encodeSemanticTokensDto } from '../../../common/services/semanticTokensDto.js'; +import { Range } from '../../../common/core/range.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; export function isSemanticTokens(v: SemanticTokens | SemanticTokensEdits): v is SemanticTokens { return v && !!((v).data); diff --git a/src/vs/editor/contrib/semanticTokens/common/semanticTokensConfig.ts b/src/vs/editor/contrib/semanticTokens/common/semanticTokensConfig.ts index ebf4f3b29..c7b398559 100644 --- a/src/vs/editor/contrib/semanticTokens/common/semanticTokensConfig.ts +++ b/src/vs/editor/contrib/semanticTokens/common/semanticTokensConfig.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITextModel } from 'vs/editor/common/model'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { ITextModel } from '../../../common/model.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; export const SEMANTIC_HIGHLIGHTING_SETTING_ID = 'editor.semanticHighlighting'; diff --git a/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts b/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts index 9eb8d2f00..ba4eb5552 100644 --- a/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts +++ b/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts @@ -4,38 +4,38 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Barrier, timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { mock } from 'vs/base/test/common/mock'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { DocumentSemanticTokensProvider, SemanticTokens, SemanticTokensEdits, SemanticTokensLegend } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { SemanticTokensStylingService } from 'vs/editor/common/services/semanticTokensStylingService'; -import { DocumentSemanticTokensFeature } from 'vs/editor/contrib/semanticTokens/browser/documentSemanticTokens'; -import { getDocumentSemanticTokens, isSemanticTokens } from 'vs/editor/contrib/semanticTokens/common/getSemanticTokens'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { TestTextResourcePropertiesService } from 'vs/editor/test/common/services/testTextResourcePropertiesService'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { ColorScheme } from 'vs/platform/theme/common/theme'; -import { TestColorTheme, TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; -import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService'; +import { Barrier, timeout } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { DocumentSemanticTokensProvider, SemanticTokens, SemanticTokensEdits, SemanticTokensLegend } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { ITextModel } from '../../../../common/model.js'; +import { LanguageFeatureDebounceService } from '../../../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { LanguageService } from '../../../../common/services/languageService.js'; +import { IModelService } from '../../../../common/services/model.js'; +import { ModelService } from '../../../../common/services/modelService.js'; +import { SemanticTokensStylingService } from '../../../../common/services/semanticTokensStylingService.js'; +import { DocumentSemanticTokensFeature } from '../../browser/documentSemanticTokens.js'; +import { getDocumentSemanticTokens, isSemanticTokens } from '../../common/getSemanticTokens.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { TestTextResourcePropertiesService } from '../../../../test/common/services/testTextResourcePropertiesService.js'; +import { TestConfigurationService } from '../../../../../platform/configuration/test/common/testConfigurationService.js'; +import { TestDialogService } from '../../../../../platform/dialogs/test/common/testDialogService.js'; +import { IEnvironmentService } from '../../../../../platform/environment/common/environment.js'; +import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { NullLogService } from '../../../../../platform/log/common/log.js'; +import { TestNotificationService } from '../../../../../platform/notification/test/common/testNotificationService.js'; +import { ColorScheme } from '../../../../../platform/theme/common/theme.js'; +import { TestColorTheme, TestThemeService } from '../../../../../platform/theme/test/common/testThemeService.js'; +import { UndoRedoService } from '../../../../../platform/undoRedo/common/undoRedoService.js'; suite('ModelSemanticColoring', () => { diff --git a/src/vs/editor/contrib/semanticTokens/test/browser/getSemanticTokens.test.ts b/src/vs/editor/contrib/semanticTokens/test/browser/getSemanticTokens.test.ts index 6ac97ecde..467fbc771 100644 --- a/src/vs/editor/contrib/semanticTokens/test/browser/getSemanticTokens.test.ts +++ b/src/vs/editor/contrib/semanticTokens/test/browser/getSemanticTokens.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { canceled } from 'vs/base/common/errors'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DocumentSemanticTokensProvider, ProviderResult, SemanticTokens, SemanticTokensEdits, SemanticTokensLegend } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { getDocumentSemanticTokens } from 'vs/editor/contrib/semanticTokens/common/getSemanticTokens'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { canceled } from '../../../../../base/common/errors.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import { DocumentSemanticTokensProvider, ProviderResult, SemanticTokens, SemanticTokensEdits, SemanticTokensLegend } from '../../../../common/languages.js'; +import { ITextModel } from '../../../../common/model.js'; +import { getDocumentSemanticTokens } from '../../common/getSemanticTokens.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; suite('getSemanticTokens', () => { diff --git a/src/vs/editor/contrib/smartSelect/browser/bracketSelections.ts b/src/vs/editor/contrib/smartSelect/browser/bracketSelections.ts index eda8cd7f3..a85d4e05b 100644 --- a/src/vs/editor/contrib/smartSelect/browser/bracketSelections.ts +++ b/src/vs/editor/contrib/smartSelect/browser/bracketSelections.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LinkedList } from 'vs/base/common/linkedList'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { SelectionRange, SelectionRangeProvider } from 'vs/editor/common/languages'; +import { LinkedList } from '../../../../base/common/linkedList.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { ITextModel } from '../../../common/model.js'; +import { SelectionRange, SelectionRangeProvider } from '../../../common/languages.js'; export class BracketSelectionRangeProvider implements SelectionRangeProvider { diff --git a/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts b/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts index 99572b42c..650f6c911 100644 --- a/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts +++ b/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import * as languages from 'vs/editor/common/languages'; -import { BracketSelectionRangeProvider } from 'vs/editor/contrib/smartSelect/browser/bracketSelections'; -import { WordSelectionRangeProvider } from 'vs/editor/contrib/smartSelect/browser/wordSelections'; -import * as nls from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; +import * as arrays from '../../../../base/common/arrays.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import * as languages from '../../../common/languages.js'; +import { BracketSelectionRangeProvider } from './bracketSelections.js'; +import { WordSelectionRangeProvider } from './wordSelections.js'; +import * as nls from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; class SelectionRanges { diff --git a/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts b/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts index d42513998..213cc2f5b 100644 --- a/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts +++ b/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { isLowerAsciiLetter, isUpperAsciiLetter } from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { SelectionRange, SelectionRangeProvider } from 'vs/editor/common/languages'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { isLowerAsciiLetter, isUpperAsciiLetter } from '../../../../base/common/strings.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { ITextModel } from '../../../common/model.js'; +import { SelectionRange, SelectionRangeProvider } from '../../../common/languages.js'; export class WordSelectionRangeProvider implements SelectionRangeProvider { diff --git a/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts b/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts index 1de9179cc..3e774fc93 100644 --- a/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts +++ b/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { SelectionRangeProvider } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IModelService } from 'vs/editor/common/services/model'; -import { BracketSelectionRangeProvider } from 'vs/editor/contrib/smartSelect/browser/bracketSelections'; -import { provideSelectionRanges } from 'vs/editor/contrib/smartSelect/browser/smartSelect'; -import { WordSelectionRangeProvider } from 'vs/editor/contrib/smartSelect/browser/wordSelections'; -import { createModelServices } from 'vs/editor/test/common/testTextModel'; -import { javascriptOnEnterRules } from 'vs/editor/test/common/modes/supports/onEnterRules'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILanguageSelection, ILanguageService } from 'vs/editor/common/languages/language'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { Event } from '../../../../../base/common/event.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { Position } from '../../../../common/core/position.js'; +import { IRange, Range } from '../../../../common/core/range.js'; +import { SelectionRangeProvider } from '../../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { IModelService } from '../../../../common/services/model.js'; +import { BracketSelectionRangeProvider } from '../../browser/bracketSelections.js'; +import { provideSelectionRanges } from '../../browser/smartSelect.js'; +import { WordSelectionRangeProvider } from '../../browser/wordSelections.js'; +import { createModelServices } from '../../../../test/common/testTextModel.js'; +import { javascriptOnEnterRules } from '../../../../test/common/modes/supports/onEnterRules.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import { ILanguageSelection, ILanguageService } from '../../../../common/languages/language.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; class StaticLanguageSelector implements ILanguageSelection { readonly onDidChange: Event = Event.None; diff --git a/src/vs/editor/contrib/snippet/browser/snippetController2.ts b/src/vs/editor/contrib/snippet/browser/snippetController2.ts index e066ef8ee..a201d83b8 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetController2.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetController2.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { assertType } from 'vs/base/common/types'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { CompletionItem, CompletionItemKind, CompletionItemProvider } from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { Choice } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { showSimpleSuggestions } from 'vs/editor/contrib/suggest/browser/suggest'; -import { OvertypingCapturer } from 'vs/editor/contrib/suggest/browser/suggestOvertypingCapturer'; -import { localize } from 'vs/nls'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ISnippetEdit, SnippetSession } from './snippetSession'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; +import { assertType } from '../../../../base/common/types.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { CompletionItem, CompletionItemKind, CompletionItemProvider } from '../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { Choice } from './snippetParser.js'; +import { showSimpleSuggestions } from '../../suggest/browser/suggest.js'; +import { OvertypingCapturer } from '../../suggest/browser/suggestOvertypingCapturer.js'; +import { localize } from '../../../../nls.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { ISnippetEdit, SnippetSession } from './snippetSession.js'; export interface ISnippetInsertOptions { overwriteBefore: number; diff --git a/src/vs/editor/contrib/snippet/browser/snippetParser.ts b/src/vs/editor/contrib/snippet/browser/snippetParser.ts index 7e7b42a7b..a5f1c16c2 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetParser.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetParser.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; +import { CharCode } from '../../../../base/common/charCode.js'; export const enum TokenType { Dollar, diff --git a/src/vs/editor/contrib/snippet/browser/snippetSession.ts b/src/vs/editor/contrib/snippet/browser/snippetSession.ts index 80a9959f4..34bf99e7d 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetSession.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetSession.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { groupBy } from 'vs/base/common/arrays'; -import { CharCode } from 'vs/base/common/charCode'; -import { dispose } from 'vs/base/common/lifecycle'; -import { getLeadingWhitespace } from 'vs/base/common/strings'; -import 'vs/css!./snippetSession'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { TextChange } from 'vs/editor/common/core/textChange'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IIdentifiedSingleEditOperation, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { OvertypingCapturer } from 'vs/editor/contrib/suggest/browser/suggestOvertypingCapturer'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { Choice, Marker, Placeholder, SnippetParser, Text, TextmateSnippet } from './snippetParser'; -import { ClipboardBasedVariableResolver, CommentBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, RandomBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, WorkspaceBasedVariableResolver } from './snippetVariables'; +import { groupBy } from '../../../../base/common/arrays.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { dispose } from '../../../../base/common/lifecycle.js'; +import { getLeadingWhitespace } from '../../../../base/common/strings.js'; +import './snippetSession.css'; +import { IActiveCodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { IPosition } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { TextChange } from '../../../common/core/textChange.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { IIdentifiedSingleEditOperation, ITextModel, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { OvertypingCapturer } from '../../suggest/browser/suggestOvertypingCapturer.js'; +import { ILabelService } from '../../../../platform/label/common/label.js'; +import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; +import { Choice, Marker, Placeholder, SnippetParser, Text, TextmateSnippet } from './snippetParser.js'; +import { ClipboardBasedVariableResolver, CommentBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, RandomBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, WorkspaceBasedVariableResolver } from './snippetVariables.js'; export class OneSnippet { diff --git a/src/vs/editor/contrib/snippet/browser/snippetVariables.ts b/src/vs/editor/contrib/snippet/browser/snippetVariables.ts index 2b82fb2d4..615e1174f 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetVariables.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { normalizeDriveLetter } from 'vs/base/common/labels'; -import * as path from 'vs/base/common/path'; -import { dirname } from 'vs/base/common/resources'; -import { commonPrefixLength, getLeadingWhitespace, isFalsyOrWhitespace, splitLines } from 'vs/base/common/strings'; -import { generateUuid } from 'vs/base/common/uuid'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { Text, Variable, VariableResolver } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { OvertypingCapturer } from 'vs/editor/contrib/suggest/browser/suggestOvertypingCapturer'; -import * as nls from 'vs/nls'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { WORKSPACE_EXTENSION, isSingleFolderWorkspaceIdentifier, toWorkspaceIdentifier, IWorkspaceContextService, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, isEmptyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { normalizeDriveLetter } from '../../../../base/common/labels.js'; +import * as path from '../../../../base/common/path.js'; +import { dirname } from '../../../../base/common/resources.js'; +import { commonPrefixLength, getLeadingWhitespace, isFalsyOrWhitespace, splitLines } from '../../../../base/common/strings.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { Text, Variable, VariableResolver } from './snippetParser.js'; +import { OvertypingCapturer } from '../../suggest/browser/suggestOvertypingCapturer.js'; +import * as nls from '../../../../nls.js'; +import { ILabelService } from '../../../../platform/label/common/label.js'; +import { WORKSPACE_EXTENSION, isSingleFolderWorkspaceIdentifier, toWorkspaceIdentifier, IWorkspaceContextService, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, isEmptyWorkspaceIdentifier } from '../../../../platform/workspace/common/workspace.js'; export const KnownSnippetVariableNames = Object.freeze<{ [key: string]: true }>({ 'CURRENT_YEAR': true, diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetController2.old.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetController2.old.test.ts index 236ad70f2..22fed9820 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetController2.old.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetController2.old.test.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { ITestCodeEditor, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { SnippetController2 } from '../../browser/snippetController2.js'; +import { ITestCodeEditor, withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { NullLogService } from '../../../../../platform/log/common/log.js'; +import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; class TestSnippetController extends SnippetController2 { diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts index 5b9a5e434..a5a1addf0 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { mock } from 'vs/base/test/common/mock'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Range } from 'vs/editor/common/core/range'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { createTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { EndOfLineSequence } from 'vs/editor/common/model'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { CoreEditingCommands } from '../../../../browser/coreCommands.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { Range } from '../../../../common/core/range.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { SnippetController2 } from '../../browser/snippetController2.js'; +import { createTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { InstantiationService } from '../../../../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { MockContextKeyService } from '../../../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { ILogService, NullLogService } from '../../../../../platform/log/common/log.js'; +import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; +import { EndOfLineSequence } from '../../../../common/model.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('SnippetController2', function () { diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetParser.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetParser.test.ts index bbf241684..31fda9160 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetParser.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetParser.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Choice, FormatString, Marker, Placeholder, Scanner, SnippetParser, Text, TextmateSnippet, TokenType, Transform, Variable } from 'vs/editor/contrib/snippet/browser/snippetParser'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Choice, FormatString, Marker, Placeholder, Scanner, SnippetParser, Text, TextmateSnippet, TokenType, Transform, Variable } from '../../browser/snippetParser.js'; suite('SnippetParser', () => { diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetSession.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetSession.test.ts index 0a9a3c764..899142342 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetSession.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetSession.test.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { SnippetSession } from 'vs/editor/contrib/snippet/browser/snippetSession'; -import { createTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { IActiveCodeEditor } from '../../../../browser/editorBrowser.js'; +import { IPosition, Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { SnippetParser } from '../../browser/snippetParser.js'; +import { SnippetSession } from '../../browser/snippetSession.js'; +import { createTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; suite('SnippetSession', function () { diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts index b8ea4e523..276ed3376 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; import * as sinon from 'sinon'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { sep } from 'vs/base/common/path'; -import { isWindows } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { SnippetParser, Variable, VariableResolver } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, WorkspaceBasedVariableResolver } from 'vs/editor/contrib/snippet/browser/snippetVariables'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IWorkspace, IWorkspaceContextService, toWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { Workspace } from 'vs/platform/workspace/test/common/testWorkspace'; -import { toWorkspaceFolders } from 'vs/platform/workspaces/common/workspaces'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { sep } from '../../../../../base/common/path.js'; +import { isWindows } from '../../../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase } from '../../../../../base/common/resources.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { SnippetParser, Variable, VariableResolver } from '../../browser/snippetParser.js'; +import { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, WorkspaceBasedVariableResolver } from '../../browser/snippetVariables.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { IWorkspace, IWorkspaceContextService, toWorkspaceFolder } from '../../../../../platform/workspace/common/workspace.js'; +import { Workspace } from '../../../../../platform/workspace/test/common/testWorkspace.js'; +import { toWorkspaceFolders } from '../../../../../platform/workspaces/common/workspaces.js'; suite('Snippet Variables Resolver', function () { diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts index bbeb000ad..5065cd866 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode } from 'vs/base/common/keyCodes'; -import { EditorAction2, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { localize, localize2 } from 'vs/nls'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { Action2, MenuId } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { StickyScrollController } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollController'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { EditorAction2, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { localize, localize2 } from '../../../../nls.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { Action2, MenuId } from '../../../../platform/actions/common/actions.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { StickyScrollController } from './stickyScrollController.js'; export class ToggleStickyScroll extends Action2 { diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts index e242c0522..2758663f1 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ToggleStickyScroll, FocusStickyScroll, SelectEditor, SelectPreviousStickyScrollLine, SelectNextStickyScrollLine, GoToStickyScrollLine } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollActions'; -import { StickyScrollController } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollController'; -import { registerAction2 } from 'vs/platform/actions/common/actions'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { ToggleStickyScroll, FocusStickyScroll, SelectEditor, SelectPreviousStickyScrollLine, SelectNextStickyScrollLine, GoToStickyScrollLine } from './stickyScrollActions.js'; +import { StickyScrollController } from './stickyScrollController.js'; +import { registerAction2 } from '../../../../platform/actions/common/actions.js'; registerEditorContribution(StickyScrollController.ID, StickyScrollController, EditorContributionInstantiation.AfterFirstRender); registerAction2(ToggleStickyScroll); diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts index 65824a127..10eda8ac9 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor, ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { EditorOption, RenderLineNumbersType, ConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions'; -import { StickyScrollWidget, StickyScrollWidgetState } from './stickyScrollWidget'; -import { IStickyLineCandidateProvider, StickyLineCandidateProvider } from './stickyScrollProvider'; -import { IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ClickLinkGesture, ClickLinkMouseEvent } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { getDefinitionsAtPosition } from 'vs/editor/contrib/gotoSymbol/browser/goToSymbol'; -import { goToDefinitionWithLocation } from 'vs/editor/contrib/inlayHints/browser/inlayHintsLocations'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import * as dom from 'vs/base/browser/dom'; -import { StickyRange } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollElement'; -import { IMouseEvent, StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { FoldingController } from 'vs/editor/contrib/folding/browser/folding'; -import { FoldingModel, toggleCollapseState } from 'vs/editor/contrib/folding/browser/foldingModel'; +import { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IActiveCodeEditor, ICodeEditor, MouseTargetType } from '../../../browser/editorBrowser.js'; +import { IEditorContribution, ScrollType } from '../../../common/editorCommon.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { EditorOption, RenderLineNumbersType, ConfigurationChangedEvent } from '../../../common/config/editorOptions.js'; +import { StickyScrollWidget, StickyScrollWidgetState } from './stickyScrollWidget.js'; +import { IStickyLineCandidateProvider, StickyLineCandidateProvider } from './stickyScrollProvider.js'; +import { IModelTokensChangedEvent } from '../../../common/textModelEvents.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ClickLinkGesture, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { getDefinitionsAtPosition } from '../../gotoSymbol/browser/goToSymbol.js'; +import { goToDefinitionWithLocation } from '../../inlayHints/browser/inlayHintsLocations.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js'; +import * as dom from '../../../../base/browser/dom.js'; +import { StickyRange } from './stickyScrollElement.js'; +import { IMouseEvent, StandardMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { FoldingController } from '../../folding/browser/folding.js'; +import { FoldingModel, toggleCollapseState } from '../../folding/browser/foldingModel.js'; export interface IStickyScrollController { get stickyScrollCandidateProvider(): IStickyLineCandidateProvider; diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts index 1bbf4f5e5..151ee9164 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; +import { URI } from '../../../../base/common/uri.js'; export class StickyRange { constructor( diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts index 22cfdb013..b313d5490 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { OutlineElement, OutlineGroup, OutlineModel } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CancelablePromise, createCancelablePromise, Delayer } from 'vs/base/common/async'; -import { FoldingController, RangesLimitReporter } from 'vs/editor/contrib/folding/browser/folding'; -import { SyntaxRangeProvider } from 'vs/editor/contrib/folding/browser/syntaxRangeProvider'; -import { IndentRangeProvider } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { FoldingRegions } from 'vs/editor/contrib/folding/browser/foldingRanges'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { StickyElement, StickyModel, StickyRange } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollElement'; -import { Iterable } from 'vs/base/common/iterator'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; +import { IActiveCodeEditor } from '../../../browser/editorBrowser.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { OutlineElement, OutlineGroup, OutlineModel } from '../../documentSymbols/browser/outlineModel.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { CancelablePromise, createCancelablePromise, Delayer } from '../../../../base/common/async.js'; +import { FoldingController, RangesLimitReporter } from '../../folding/browser/folding.js'; +import { SyntaxRangeProvider } from '../../folding/browser/syntaxRangeProvider.js'; +import { IndentRangeProvider } from '../../folding/browser/indentRangeProvider.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { FoldingRegions } from '../../folding/browser/foldingRanges.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { StickyElement, StickyModel, StickyRange } from './stickyScrollElement.js'; +import { Iterable } from '../../../../base/common/iterator.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; enum ModelProvider { OUTLINE_MODEL = 'outlineModel', diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts index 705ef7648..77cd911f9 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { CancellationToken, CancellationTokenSource, } from 'vs/base/common/cancellation'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Range } from 'vs/editor/common/core/range'; -import { binarySearch } from 'vs/base/common/arrays'; -import { Event, Emitter } from 'vs/base/common/event'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { StickyModelProvider, IStickyModelProvider } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider'; -import { StickyElement, StickyModel, StickyRange } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollElement'; +import { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { CancellationToken, CancellationTokenSource, } from '../../../../base/common/cancellation.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { Range } from '../../../common/core/range.js'; +import { binarySearch } from '../../../../base/common/arrays.js'; +import { Event, Emitter } from '../../../../base/common/event.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { StickyModelProvider, IStickyModelProvider } from './stickyScrollModelProvider.js'; +import { StickyElement, StickyModel, StickyRange } from './stickyScrollElement.js'; export class StickyLineCandidate { constructor( diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts index 27d3d8e1a..8dff79401 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import { equals } from 'vs/base/common/arrays'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./stickyScroll'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { getColumnOfNodeOffset } from 'vs/editor/browser/viewParts/lines/viewLine'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { CharacterMapping, RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { foldingCollapsedIcon, foldingExpandedIcon } from 'vs/editor/contrib/folding/browser/foldingDecorations'; -import { FoldingModel } from 'vs/editor/contrib/folding/browser/foldingModel'; +import * as dom from '../../../../base/browser/dom.js'; +import { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js'; +import { equals } from '../../../../base/common/arrays.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import './stickyScroll.css'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js'; +import { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js'; +import { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { StringBuilder } from '../../../common/core/stringBuilder.js'; +import { LineDecoration } from '../../../common/viewLayout/lineDecorations.js'; +import { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js'; +import { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js'; +import { FoldingModel } from '../../folding/browser/foldingModel.js'; export class StickyScrollWidgetState { constructor( @@ -139,6 +139,7 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { const isWidgetHeightZero = this._isWidgetHeightZero(_state); const state = isWidgetHeightZero ? undefined : _state; const rebuildFromLine = isWidgetHeightZero ? 0 : this._findLineToRebuildWidgetFrom(_state, _rebuildFromLine); + this._renderRootNode(state, foldingModel, rebuildFromLine); this._previousState = _state; } diff --git a/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts b/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts index aaefcb65f..7ac055817 100644 --- a/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts +++ b/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { withAsyncTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { StickyScrollController } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollController'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { DocumentSymbol, SymbolKind } from 'vs/editor/common/languages'; -import { StickyLineCandidate, StickyLineCandidateProvider } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollProvider'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { mock } from 'vs/base/test/common/mock'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { withAsyncTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { StickyScrollController } from '../../browser/stickyScrollController.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { DocumentSymbol, SymbolKind } from '../../../../common/languages.js'; +import { StickyLineCandidate, StickyLineCandidateProvider } from '../../browser/stickyScrollProvider.js'; +import { EditorOption } from '../../../../common/config/editorOptions.js'; +import { ILogService, NullLogService } from '../../../../../platform/log/common/log.js'; +import { IContextMenuService } from '../../../../../platform/contextview/browser/contextView.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../../../common/services/languageFeatureDebounce.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { SyncDescriptor } from '../../../../../platform/instantiation/common/descriptors.js'; +import { runWithFakedTimers } from '../../../../../base/test/common/timeTravelScheduler.js'; +import { IEnvironmentService } from '../../../../../platform/environment/common/environment.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; suite('Sticky Scroll Tests', () => { diff --git a/src/vs/editor/contrib/suggest/browser/completionModel.ts b/src/vs/editor/contrib/suggest/browser/completionModel.ts index de860b992..ecf72cef8 100644 --- a/src/vs/editor/contrib/suggest/browser/completionModel.ts +++ b/src/vs/editor/contrib/suggest/browser/completionModel.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { quickSelect } from 'vs/base/common/arrays'; -import { CharCode } from 'vs/base/common/charCode'; -import { anyScore, fuzzyScore, FuzzyScore, fuzzyScoreGracefulAggressive, FuzzyScoreOptions, FuzzyScorer } from 'vs/base/common/filters'; -import { compareIgnoreCase } from 'vs/base/common/strings'; -import { InternalSuggestOptions } from 'vs/editor/common/config/editorOptions'; -import { CompletionItemKind, CompletionItemProvider } from 'vs/editor/common/languages'; -import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance'; -import { CompletionItem } from './suggest'; +import { quickSelect } from '../../../../base/common/arrays.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { anyScore, fuzzyScore, FuzzyScore, fuzzyScoreGracefulAggressive, FuzzyScoreOptions, FuzzyScorer } from '../../../../base/common/filters.js'; +import { compareIgnoreCase } from '../../../../base/common/strings.js'; +import { InternalSuggestOptions } from '../../../common/config/editorOptions.js'; +import { CompletionItemKind, CompletionItemProvider } from '../../../common/languages.js'; +import { WordDistance } from './wordDistance.js'; +import { CompletionItem } from './suggest.js'; type StrictCompletionItem = Required; diff --git a/src/vs/editor/contrib/suggest/browser/media/suggest.css b/src/vs/editor/contrib/suggest/browser/media/suggest.css index 597fa5411..e836d840e 100644 --- a/src/vs/editor/contrib/suggest/browser/media/suggest.css +++ b/src/vs/editor/contrib/suggest/browser/media/suggest.css @@ -352,7 +352,7 @@ color: var(--vscode-editorSuggestWidget-foreground); } -.monaco-editor .suggest-details.focused { +.monaco-editor .suggest-details:focus { border-color: var(--vscode-focusBorder); } diff --git a/src/vs/editor/contrib/suggest/browser/suggest.ts b/src/vs/editor/contrib/suggest/browser/suggest.ts index 535c67c9c..c63d3bb81 100644 --- a/src/vs/editor/contrib/suggest/browser/suggest.ts +++ b/src/vs/editor/contrib/suggest/browser/suggest.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CancellationError, isCancellationError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { FuzzyScore } from 'vs/base/common/filters'; -import { DisposableStore, IDisposable, isDisposable } from 'vs/base/common/lifecycle'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import * as languages from 'vs/editor/common/languages'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { localize } from 'vs/nls'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { historyNavigationVisible } from 'vs/platform/history/browser/contextScopedHistoryWidget'; -import { InternalQuickSuggestionsOptions, QuickSuggestionsValue } from 'vs/editor/common/config/editorOptions'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { CancellationError, isCancellationError, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { FuzzyScore } from '../../../../base/common/filters.js'; +import { DisposableStore, IDisposable, isDisposable } from '../../../../base/common/lifecycle.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { assertType } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import * as languages from '../../../common/languages.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { SnippetParser } from '../../snippet/browser/snippetParser.js'; +import { localize } from '../../../../nls.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { historyNavigationVisible } from '../../../../platform/history/browser/contextScopedHistoryWidget.js'; +import { InternalQuickSuggestionsOptions, QuickSuggestionsValue } from '../../../common/config/editorOptions.js'; +import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js'; +import { StandardTokenType } from '../../../common/encodedTokenAttributes.js'; export const Context = { Visible: historyNavigationVisible, diff --git a/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts b/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts index 2422c361a..f108e8987 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { CompletionModel } from './completionModel'; -import { ISelectedSuggestion } from './suggestWidget'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { CompletionModel } from './completionModel.js'; +import { ISelectedSuggestion } from './suggestWidget.js'; export class SuggestAlternatives { diff --git a/src/vs/editor/contrib/suggest/browser/suggestCommitCharacters.ts b/src/vs/editor/contrib/suggest/browser/suggestCommitCharacters.ts index 61080e433..fb2eb635c 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestCommitCharacters.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestCommitCharacters.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CharacterSet } from 'vs/editor/common/core/characterClassifier'; -import { State, SuggestModel } from 'vs/editor/contrib/suggest/browser/suggestModel'; -import { ISelectedSuggestion, SuggestWidget } from './suggestWidget'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CharacterSet } from '../../../common/core/characterClassifier.js'; +import { State, SuggestModel } from './suggestModel.js'; +import { ISelectedSuggestion, SuggestWidget } from './suggestWidget.js'; export class CommitCharacterController { diff --git a/src/vs/editor/contrib/suggest/browser/suggestController.ts b/src/vs/editor/contrib/suggest/browser/suggestController.ts index 254524bf3..0bf524ab1 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestController.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestController.ts @@ -3,49 +3,49 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { KeyCodeChord } from 'vs/base/common/keybindings'; -import { DisposableStore, dispose, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { assertType, isObject } from 'vs/base/common/types'; -import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind } from 'vs/editor/common/languages'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { WordContextKey } from 'vs/editor/contrib/suggest/browser/wordContextKey'; -import * as nls from 'vs/nls'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { CompletionItem, Context as SuggestContext, ISuggestItemPreselector, suggestWidgetStatusbarMenu } from './suggest'; -import { SuggestAlternatives } from './suggestAlternatives'; -import { CommitCharacterController } from './suggestCommitCharacters'; -import { State, SuggestModel } from './suggestModel'; -import { OvertypingCapturer } from './suggestOvertypingCapturer'; -import { ISelectedSuggestion, SuggestWidget } from './suggestWidget'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { basename, extname } from 'vs/base/common/resources'; -import { hash } from 'vs/base/common/hash'; -import { WindowIdleValue, getWindow } from 'vs/base/browser/dom'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { KeyCodeChord } from '../../../../base/common/keybindings.js'; +import { DisposableStore, dispose, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import * as platform from '../../../../base/common/platform.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { assertType, isObject } from '../../../../base/common/types.js'; +import { StableEditorScrollState } from '../../../browser/stableEditorScroll.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution, ScrollType } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel, TrackedRangeStickiness } from '../../../common/model.js'; +import { CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind } from '../../../common/languages.js'; +import { SnippetController2 } from '../../snippet/browser/snippetController2.js'; +import { SnippetParser } from '../../snippet/browser/snippetParser.js'; +import { ISuggestMemoryService } from './suggestMemory.js'; +import { WordContextKey } from './wordContextKey.js'; +import * as nls from '../../../../nls.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { CompletionItem, Context as SuggestContext, ISuggestItemPreselector, suggestWidgetStatusbarMenu } from './suggest.js'; +import { SuggestAlternatives } from './suggestAlternatives.js'; +import { CommitCharacterController } from './suggestCommitCharacters.js'; +import { State, SuggestModel } from './suggestModel.js'; +import { OvertypingCapturer } from './suggestOvertypingCapturer.js'; +import { ISelectedSuggestion, SuggestWidget } from './suggestWidget.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { basename, extname } from '../../../../base/common/resources.js'; +import { hash } from '../../../../base/common/hash.js'; +import { WindowIdleValue, getWindow } from '../../../../base/browser/dom.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; // sticky suggest widget which doesn't disappear on focus out and such const _sticky = false diff --git a/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts b/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts index 81d6f7d4d..e5f38891d 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { FuzzyScore } from 'vs/base/common/filters'; -import { Iterable } from 'vs/base/common/iterator'; -import { Disposable, RefCountedDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; -import { Command, CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { CompletionModel, LineContext } from 'vs/editor/contrib/suggest/browser/completionModel'; -import { CompletionItem, CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from 'vs/editor/contrib/suggest/browser/suggest'; -import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { SuggestModel } from 'vs/editor/contrib/suggest/browser/suggestModel'; -import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { FuzzyScore } from '../../../../base/common/filters.js'; +import { Iterable } from '../../../../base/common/iterator.js'; +import { Disposable, RefCountedDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { IWordAtPosition } from '../../../common/core/wordHelper.js'; +import { registerEditorFeature } from '../../../common/editorFeatures.js'; +import { Command, CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { CompletionModel, LineContext } from './completionModel.js'; +import { CompletionItem, CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from './suggest.js'; +import { ISuggestMemoryService } from './suggestMemory.js'; +import { SuggestModel } from './suggestModel.js'; +import { WordDistance } from './wordDistance.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; class SuggestInlineCompletion implements InlineCompletion { diff --git a/src/vs/editor/contrib/suggest/browser/suggestMemory.ts b/src/vs/editor/contrib/suggest/browser/suggestMemory.ts index ff7df7cc7..7aa97af48 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestMemory.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestMemory.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { LRUCache } from 'vs/base/common/map'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { IPosition } from 'vs/editor/common/core/position'; -import { ITextModel } from 'vs/editor/common/model'; -import { CompletionItemKind, CompletionItemKinds } from 'vs/editor/common/languages'; -import { CompletionItem } from 'vs/editor/contrib/suggest/browser/suggest'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from 'vs/platform/storage/common/storage'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { LRUCache } from '../../../../base/common/map.js'; +import { TernarySearchTree } from '../../../../base/common/ternarySearchTree.js'; +import { IPosition } from '../../../common/core/position.js'; +import { ITextModel } from '../../../common/model.js'; +import { CompletionItemKind, CompletionItemKinds } from '../../../common/languages.js'; +import { CompletionItem } from './suggest.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; +import { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from '../../../../platform/storage/common/storage.js'; export abstract class Memory { diff --git a/src/vs/editor/contrib/suggest/browser/suggestModel.ts b/src/vs/editor/contrib/suggest/browser/suggestModel.ts index c287fb5d3..7a7019032 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestModel.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TimeoutTimer } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { getLeadingWhitespace, isHighSurrogate, isLowSurrogate } from 'vs/base/common/strings'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CursorChangeReason, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ITextModel } from 'vs/editor/common/model'; -import { CompletionContext, CompletionItemKind, CompletionItemProvider, CompletionTriggerKind } from 'vs/editor/common/languages'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { CompletionModel } from './completionModel'; -import { CompletionDurations, CompletionItem, CompletionOptions, getSnippetSuggestSupport, provideSuggestionItems, QuickSuggestionsOptions, SnippetSortOrder } from './suggest'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { FuzzyScoreOptions } from 'vs/base/common/filters'; -import { assertType } from 'vs/base/common/types'; -import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { TimeoutTimer } from '../../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore, dispose, IDisposable } from '../../../../base/common/lifecycle.js'; +import { getLeadingWhitespace, isHighSurrogate, isLowSurrogate } from '../../../../base/common/strings.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CursorChangeReason, ICursorSelectionChangedEvent } from '../../../common/cursorEvents.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ITextModel } from '../../../common/model.js'; +import { CompletionContext, CompletionItemKind, CompletionItemProvider, CompletionTriggerKind } from '../../../common/languages.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import { WordDistance } from './wordDistance.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { CompletionModel } from './completionModel.js'; +import { CompletionDurations, CompletionItem, CompletionOptions, getSnippetSuggestSupport, provideSuggestionItems, QuickSuggestionsOptions, SnippetSortOrder } from './suggest.js'; +import { IWordAtPosition } from '../../../common/core/wordHelper.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { FuzzyScoreOptions } from '../../../../base/common/filters.js'; +import { assertType } from '../../../../base/common/types.js'; +import { InlineCompletionContextKeys } from '../../inlineCompletions/browser/controller/inlineCompletionContextKeys.js'; +import { SnippetController2 } from '../../snippet/browser/snippetController2.js'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; export interface ICancelEvent { readonly retrigger: boolean; diff --git a/src/vs/editor/contrib/suggest/browser/suggestOvertypingCapturer.ts b/src/vs/editor/contrib/suggest/browser/suggestOvertypingCapturer.ts index a8f60b54f..eb6d9d157 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestOvertypingCapturer.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestOvertypingCapturer.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { SuggestModel } from 'vs/editor/contrib/suggest/browser/suggestModel'; +import { DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { SuggestModel } from './suggestModel.js'; export class OvertypingCapturer implements IDisposable { diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts index 39c98256f..7b728a6e1 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts @@ -3,38 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import 'vs/base/browser/ui/codicons/codiconStyles'; // The codicon symbol styles are defined here and must be loaded -import { IListEvent, IListGestureEvent, IListMouseEvent } from 'vs/base/browser/ui/list/list'; -import { List } from 'vs/base/browser/ui/list/listWidget'; -import { CancelablePromise, createCancelablePromise, disposableTimeout, TimeoutTimer } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event, PauseableEmitter } from 'vs/base/common/event'; -import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { clamp } from 'vs/base/common/numbers'; -import * as strings from 'vs/base/common/strings'; -import 'vs/css!./media/suggest'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { SuggestWidgetStatus } from 'vs/editor/contrib/suggest/browser/suggestWidgetStatus'; -import 'vs/editor/contrib/symbolIcons/browser/symbolIcons'; // The codicon symbol colors are defined here and must be loaded to get colors -import * as nls from 'vs/nls'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { activeContrastBorder, editorForeground, editorWidgetBackground, editorWidgetBorder, listFocusHighlightForeground, listHighlightForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; -import { isHighContrast } from 'vs/platform/theme/common/theme'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; -import { CompletionModel } from './completionModel'; -import { ResizableHTMLElement } from 'vs/base/browser/ui/resizable/resizable'; -import { CompletionItem, Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest'; -import { canExpandCompletionItem, SuggestDetailsOverlay, SuggestDetailsWidget } from './suggestWidgetDetails'; -import { getAriaId, ItemRenderer } from './suggestWidgetRenderer'; -import { getListStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { status } from 'vs/base/browser/ui/aria/aria'; +import * as dom from '../../../../base/browser/dom.js'; +import { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded +import { IListEvent, IListGestureEvent, IListMouseEvent } from '../../../../base/browser/ui/list/list.js'; +import { List } from '../../../../base/browser/ui/list/listWidget.js'; +import { CancelablePromise, createCancelablePromise, disposableTimeout, TimeoutTimer } from '../../../../base/common/async.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, Event, PauseableEmitter } from '../../../../base/common/event.js'; +import { DisposableStore, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { clamp } from '../../../../base/common/numbers.js'; +import * as strings from '../../../../base/common/strings.js'; +import './media/suggest.css'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from '../../../browser/editorBrowser.js'; +import { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { SuggestWidgetStatus } from './suggestWidgetStatus.js'; +import '../../symbolIcons/browser/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors +import * as nls from '../../../../nls.js'; +import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { activeContrastBorder, editorForeground, editorWidgetBackground, editorWidgetBorder, listFocusHighlightForeground, listHighlightForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { IColorTheme, IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { CompletionModel } from './completionModel.js'; +import { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js'; +import { CompletionItem, Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest.js'; +import { canExpandCompletionItem, SuggestDetailsOverlay, SuggestDetailsWidget } from './suggestWidgetDetails.js'; +import { getAriaId, ItemRenderer } from './suggestWidgetRenderer.js'; +import { getListStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { status } from '../../../../base/browser/ui/aria/aria.js'; /** * Suggest widget colors @@ -211,7 +211,7 @@ export class SuggestWidget implements IDisposable { this._listElement = dom.append(this.element.domNode, dom.$('.tree')); const details = this._disposables.add(instantiationService.createInstance(SuggestDetailsWidget, this.editor)); - details.onDidClose(this.toggleDetails, this, this._disposables); + details.onDidClose(() => this.toggleDetails(), this, this._disposables); this._details = new SuggestDetailsOverlay(details, this.editor); const applyIconStyle = () => this.element.domNode.classList.toggle('no-icons', !this.editor.getOption(EditorOption.suggest).showIcons); @@ -367,6 +367,12 @@ export class SuggestWidget implements IDisposable { return; } + if (this._state === State.Details) { + // This can happen when focus is in the details-panel and when + // arrow keys are pressed to select next/prev items + this._setState(State.Open); + } + if (!e.elements.length) { if (this._currentSuggestionDetails) { this._currentSuggestionDetails.cancel(); @@ -399,7 +405,7 @@ export class SuggestWidget implements IDisposable { this._currentSuggestionDetails = createCancelablePromise(async token => { const loading = disposableTimeout(() => { if (this._isDetailsVisible()) { - this.showDetails(true); + this._showDetails(true, false); } }, 250); const sub = token.onCancellationRequested(() => loading.dispose()); @@ -423,7 +429,7 @@ export class SuggestWidget implements IDisposable { this._ignoreFocusEvents = false; if (this._isDetailsVisible()) { - this.showDetails(false); + this._showDetails(false, false); } else { this.element.domNode.classList.remove('docs-side'); } @@ -497,6 +503,7 @@ export class SuggestWidget implements IDisposable { dom.show(this._listElement, this._status.element); this._details.show(); this._show(); + this._details.widget.focus(); break; } } @@ -687,16 +694,20 @@ export class SuggestWidget implements IDisposable { toggleDetailsFocus(): void { if (this._state === State.Details) { + // Should return the focus to the list item. + this._list.setFocus(this._list.getFocus()); this._setState(State.Open); - this._details.widget.domNode.classList.remove('focused'); - - } else if (this._state === State.Open && this._isDetailsVisible()) { + } else if (this._state === State.Open) { this._setState(State.Details); - this._details.widget.domNode.classList.add('focused'); + if (!this._isDetailsVisible()) { + this.toggleDetails(true); + } else { + this._details.widget.focus(); + } } } - toggleDetails(): void { + toggleDetails(focused: boolean = false): void { if (this._isDetailsVisible()) { // hide details widget this._pendingShowDetails.clear(); @@ -709,14 +720,15 @@ export class SuggestWidget implements IDisposable { // show details widget (iff possible) this._ctxSuggestWidgetDetailsVisible.set(true); this._setDetailsVisible(true); - this.showDetails(false); + this._showDetails(false, focused); } } - showDetails(loading: boolean): void { + private _showDetails(loading: boolean, focused: boolean): void { this._pendingShowDetails.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => { this._pendingShowDetails.clear(); this._details.show(); + let didFocusDetails = false; if (loading) { this._details.widget.renderLoading(); } else { @@ -725,10 +737,16 @@ export class SuggestWidget implements IDisposable { if (!this._details.widget.isEmpty) { this._positionDetails(); this.element.domNode.classList.add('shows-details'); + if (focused) { + this._details.widget.focus(); + didFocusDetails = true; + } } else { this._details.hide(); } - this.editor.focus(); + if (!didFocusDetails) { + this.editor.focus(); + } }); } @@ -738,7 +756,7 @@ export class SuggestWidget implements IDisposable { if (!this._isDetailsVisible()) { this.toggleDetails(); } else { - this.showDetails(false); + this._showDetails(false, false); } } } diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidgetDetails.ts b/src/vs/editor/contrib/suggest/browser/suggestWidgetDetails.ts index 5d2a5fbf2..22f29a981 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidgetDetails.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidgetDetails.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Emitter, Event } from 'vs/base/common/event'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ResizableHTMLElement } from 'vs/base/browser/ui/resizable/resizable'; -import * as nls from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { CompletionItem } from './suggest'; +import * as dom from '../../../../base/browser/dom.js'; +import { DomScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { MarkdownRenderer } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js'; +import * as nls from '../../../../nls.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { CompletionItem } from './suggest.js'; export function canExpandCompletionItem(item: CompletionItem | undefined): boolean { return !!item && Boolean(item.completion.documentation || item.completion.detail && item.completion.detail !== item.completion.label); @@ -65,6 +65,8 @@ export class SuggestDetailsWidget { this._header = dom.append(this._body, dom.$('.header')); this._close = dom.append(this._header, dom.$('span' + ThemeIcon.asCSSSelector(Codicon.close))); this._close.title = nls.localize('details.close', "Close"); + this._close.role = 'button'; + this._close.tabIndex = -1; this._type = dom.append(this._header, dom.$('p.type')); this._docs = dom.append(this._body, dom.$('p.docs')); @@ -254,6 +256,10 @@ export class SuggestDetailsWidget { get borderWidth() { return this._borderWidth; } + + focus() { + this.domNode.focus(); + } } interface TopLeftPosition { diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts b/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts index 75c44777e..24fb6d310 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, append, hide, show } from 'vs/base/browser/dom'; -import { IconLabel, IIconLabelValueOptions } from 'vs/base/browser/ui/iconLabel/iconLabel'; -import { IListRenderer } from 'vs/base/browser/ui/list/list'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Emitter, Event } from 'vs/base/common/event'; -import { createMatches } from 'vs/base/common/filters'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CompletionItemKind, CompletionItemKinds, CompletionItemTag } from 'vs/editor/common/languages'; -import { getIconClasses } from 'vs/editor/common/services/getIconClasses'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import * as nls from 'vs/nls'; -import { FileKind } from 'vs/platform/files/common/files'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { CompletionItem } from './suggest'; -import { canExpandCompletionItem } from './suggestWidgetDetails'; +import { $, append, hide, show } from '../../../../base/browser/dom.js'; +import { IconLabel, IIconLabelValueOptions } from '../../../../base/browser/ui/iconLabel/iconLabel.js'; +import { IListRenderer } from '../../../../base/browser/ui/list/list.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { createMatches } from '../../../../base/common/filters.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { CompletionItemKind, CompletionItemKinds, CompletionItemTag } from '../../../common/languages.js'; +import { getIconClasses } from '../../../common/services/getIconClasses.js'; +import { IModelService } from '../../../common/services/model.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import * as nls from '../../../../nls.js'; +import { FileKind } from '../../../../platform/files/common/files.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { CompletionItem } from './suggest.js'; +import { canExpandCompletionItem } from './suggestWidgetDetails.js'; export function getAriaId(index: number): string { return `suggest-aria-id:${index}`; diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidgetStatus.ts b/src/vs/editor/contrib/suggest/browser/suggestWidgetStatus.ts index 4a1df5b9c..3714840e0 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidgetStatus.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidgetStatus.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { ActionBar, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IAction } from 'vs/base/common/actions'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { TextOnlyMenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import * as dom from '../../../../base/browser/dom.js'; +import { ActionBar, IActionViewItemProvider } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { IAction } from '../../../../base/common/actions.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { TextOnlyMenuEntryActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IMenuService, MenuId, MenuItemAction } from '../../../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; export class SuggestWidgetStatus { diff --git a/src/vs/editor/contrib/suggest/browser/wordContextKey.ts b/src/vs/editor/contrib/suggest/browser/wordContextKey.ts index ae8fd6e1a..901b440d8 100644 --- a/src/vs/editor/contrib/suggest/browser/wordContextKey.ts +++ b/src/vs/editor/contrib/suggest/browser/wordContextKey.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; export class WordContextKey { diff --git a/src/vs/editor/contrib/suggest/browser/wordDistance.ts b/src/vs/editor/contrib/suggest/browser/wordDistance.ts index 610e8bfb6..3c992c6d5 100644 --- a/src/vs/editor/contrib/suggest/browser/wordDistance.ts +++ b/src/vs/editor/contrib/suggest/browser/wordDistance.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { binarySearch, isFalsyOrEmpty } from 'vs/base/common/arrays'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { CompletionItem, CompletionItemKind } from 'vs/editor/common/languages'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { BracketSelectionRangeProvider } from 'vs/editor/contrib/smartSelect/browser/bracketSelections'; +import { binarySearch, isFalsyOrEmpty } from '../../../../base/common/arrays.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { CompletionItem, CompletionItemKind } from '../../../common/languages.js'; +import { IEditorWorkerService } from '../../../common/services/editorWorker.js'; +import { BracketSelectionRangeProvider } from '../../smartSelect/browser/bracketSelections.js'; export abstract class WordDistance { diff --git a/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts b/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts index 823d6865a..79b58979f 100644 --- a/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditorOptions, InternalSuggestOptions } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import * as languages from 'vs/editor/common/languages'; -import { CompletionModel } from 'vs/editor/contrib/suggest/browser/completionModel'; -import { CompletionItem, getSuggestionComparator, SnippetSortOrder } from 'vs/editor/contrib/suggest/browser/suggest'; -import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { EditorOptions, InternalSuggestOptions } from '../../../../common/config/editorOptions.js'; +import { IPosition } from '../../../../common/core/position.js'; +import * as languages from '../../../../common/languages.js'; +import { CompletionModel } from '../../browser/completionModel.js'; +import { CompletionItem, getSuggestionComparator, SnippetSortOrder } from '../../browser/suggest.js'; +import { WordDistance } from '../../browser/wordDistance.js'; export function createSuggestItem(label: string | languages.CompletionItemLabel, overwriteBefore: number, kind = languages.CompletionItemKind.Property, incomplete: boolean = false, position: IPosition = { lineNumber: 1, column: 1 }, sortText?: string, filterText?: string): CompletionItem { const suggestion: languages.CompletionItem = { diff --git a/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts index b2e9fc035..3b90caf53 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { CompletionItemKind, CompletionItemProvider } from 'vs/editor/common/languages'; -import { CompletionOptions, provideSuggestionItems, SnippetSortOrder } from 'vs/editor/contrib/suggest/browser/suggest'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { IDisposable } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { CompletionItemKind, CompletionItemProvider } from '../../../../common/languages.js'; +import { CompletionOptions, provideSuggestionItems, SnippetSortOrder } from '../../browser/suggest.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { LanguageFeatureRegistry } from '../../../../common/languageFeatureRegistry.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('Suggest', function () { diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts index 64123de47..7f83d7ecb 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts @@ -4,35 +4,35 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { timeout } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { CompletionItemInsertTextRule, CompletionItemKind } from 'vs/editor/common/languages'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; -import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { createTestCodeEditor, ITestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { IMenu, IMenuService } from 'vs/platform/actions/common/actions'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { DeleteLinesAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; +import { timeout } from '../../../../../base/common/async.js'; +import { Event } from '../../../../../base/common/event.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { CompletionItemInsertTextRule, CompletionItemKind } from '../../../../common/languages.js'; +import { IEditorWorkerService } from '../../../../common/services/editorWorker.js'; +import { SnippetController2 } from '../../../snippet/browser/snippetController2.js'; +import { SuggestController } from '../../browser/suggestController.js'; +import { ISuggestMemoryService } from '../../browser/suggestMemory.js'; +import { createTestCodeEditor, ITestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { IMenu, IMenuService } from '../../../../../platform/actions/common/actions.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { MockKeybindingService } from '../../../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { ILogService, NullLogService } from '../../../../../platform/log/common/log.js'; +import { InMemoryStorageService, IStorageService } from '../../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../../../platform/telemetry/common/telemetryUtils.js'; +import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { IEnvironmentService } from '../../../../../platform/environment/common/environment.js'; +import { DeleteLinesAction } from '../../../linesOperations/browser/linesOperations.js'; suite('SuggestController', function () { diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts index 91d42374b..ba843af4a 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts @@ -4,23 +4,23 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { CompletionContext, CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, InlineCompletionTriggerKind, ProviderResult } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { SuggestInlineCompletions } from 'vs/editor/contrib/suggest/browser/suggestInlineCompletions'; -import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { createCodeEditorServices, instantiateTestCodeEditor, ITestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { CompletionContext, CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, InlineCompletionTriggerKind, ProviderResult } from '../../../../common/languages.js'; +import { ITextModel } from '../../../../common/model.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { SuggestInlineCompletions } from '../../browser/suggestInlineCompletions.js'; +import { ISuggestMemoryService } from '../../browser/suggestMemory.js'; +import { createCodeEditorServices, instantiateTestCodeEditor, ITestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; suite('Suggest Inline Completions', function () { diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestMemory.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestMemory.test.ts index 57d0d030d..053a0fa5e 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestMemory.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestMemory.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IPosition } from 'vs/editor/common/core/position'; -import { ITextModel } from 'vs/editor/common/model'; -import { CompletionItem } from 'vs/editor/contrib/suggest/browser/suggest'; -import { LRUMemory, Memory, NoMemory, PrefixMemory } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { createSuggestItem } from 'vs/editor/contrib/suggest/test/browser/completionModel.test'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { IPosition } from '../../../../common/core/position.js'; +import { ITextModel } from '../../../../common/model.js'; +import { CompletionItem } from '../../browser/suggest.js'; +import { LRUMemory, Memory, NoMemory, PrefixMemory } from '../../browser/suggestMemory.js'; +import { createSuggestItem } from './completionModel.test.js'; +import { createTextModel } from '../../../../test/common/testTextModel.js'; suite('SuggestMemories', function () { diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts index 5c673c0f3..51d159923 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts @@ -3,44 +3,44 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Handler } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { CompletionItemKind, CompletionItemProvider, CompletionList, CompletionTriggerKind, EncodedTokenizationResult, IState, TokenizationRegistry } from 'vs/editor/common/languages'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; -import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; -import { LineContext, SuggestModel } from 'vs/editor/contrib/suggest/browser/suggestModel'; -import { ISelectedSuggestion } from 'vs/editor/contrib/suggest/browser/suggestWidget'; -import { createTestCodeEditor, ITestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { createModelServices, createTextModel, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { getSnippetSuggestSupport, setSnippetSuggestSupport } from 'vs/editor/contrib/suggest/browser/suggest'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Event } from '../../../../../base/common/event.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { CoreEditingCommands } from '../../../../browser/coreCommands.js'; +import { EditOperation } from '../../../../common/core/editOperation.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { Handler } from '../../../../common/editorCommon.js'; +import { ITextModel } from '../../../../common/model.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { CompletionItemKind, CompletionItemProvider, CompletionList, CompletionTriggerKind, EncodedTokenizationResult, IState, TokenizationRegistry } from '../../../../common/languages.js'; +import { MetadataConsts } from '../../../../common/encodedTokenAttributes.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { NullState } from '../../../../common/languages/nullTokenize.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { SnippetController2 } from '../../../snippet/browser/snippetController2.js'; +import { SuggestController } from '../../browser/suggestController.js'; +import { ISuggestMemoryService } from '../../browser/suggestMemory.js'; +import { LineContext, SuggestModel } from '../../browser/suggestModel.js'; +import { ISelectedSuggestion } from '../../browser/suggestWidget.js'; +import { createTestCodeEditor, ITestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { createModelServices, createTextModel, instantiateTextModel } from '../../../../test/common/testTextModel.js'; +import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js'; +import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; +import { MockKeybindingService } from '../../../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { ILabelService } from '../../../../../platform/label/common/label.js'; +import { InMemoryStorageService, IStorageService } from '../../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../../../platform/telemetry/common/telemetryUtils.js'; +import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { getSnippetSuggestSupport, setSnippetSuggestSupport } from '../../browser/suggest.js'; +import { IEnvironmentService } from '../../../../../platform/environment/common/environment.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; function createMockEditor(model: TextModel, languageFeaturesService: ILanguageFeaturesService): ITestCodeEditor { diff --git a/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts b/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts index 4fe23f5a6..0057e3cf3 100644 --- a/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts @@ -4,28 +4,28 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { DEFAULT_WORD_REGEXP } from 'vs/editor/common/core/wordHelper'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { BaseEditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker'; -import { EditorWorkerService } from 'vs/editor/browser/services/editorWorkerService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { CompletionItem } from 'vs/editor/contrib/suggest/browser/suggest'; -import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance'; -import { createCodeEditorServices, instantiateTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Event } from '../../../../../base/common/event.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { mock } from '../../../../../base/test/common/mock.js'; +import { IPosition } from '../../../../common/core/position.js'; +import { IRange } from '../../../../common/core/range.js'; +import { DEFAULT_WORD_REGEXP } from '../../../../common/core/wordHelper.js'; +import * as languages from '../../../../common/languages.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { BaseEditorSimpleWorker } from '../../../../common/services/editorSimpleWorker.js'; +import { EditorWorkerService } from '../../../../browser/services/editorWorkerService.js'; +import { IModelService } from '../../../../common/services/model.js'; +import { ITextResourceConfigurationService } from '../../../../common/services/textResourceConfiguration.js'; +import { CompletionItem } from '../../browser/suggest.js'; +import { WordDistance } from '../../browser/wordDistance.js'; +import { createCodeEditorServices, instantiateTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { instantiateTextModel } from '../../../../test/common/testTextModel.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; +import { NullLogService } from '../../../../../platform/log/common/log.js'; +import { LanguageFeaturesService } from '../../../../common/services/languageFeaturesService.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('suggest, word distance', function () { diff --git a/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.ts b/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.ts index 7d6fe4b73..a2795f754 100644 --- a/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.ts +++ b/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./symbolIcons'; -import { localize } from 'vs/nls'; -import { foreground, registerColor } from 'vs/platform/theme/common/colorRegistry'; +import './symbolIcons.css'; +import { localize } from '../../../../nls.js'; +import { foreground, registerColor } from '../../../../platform/theme/common/colorRegistry.js'; export const SYMBOL_ICON_ARRAY_FOREGROUND = registerColor('symbolIcon.arrayForeground', foreground, localize('symbolIcon.arrayForeground', 'The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.')); diff --git a/src/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.ts b/src/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.ts index 7578cd62f..a200bf817 100644 --- a/src/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.ts +++ b/src/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { TabFocus } from 'vs/editor/browser/config/tabFocus'; -import * as nls from 'vs/nls'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { TabFocus } from '../../../browser/config/tabFocus.js'; +import * as nls from '../../../../nls.js'; +import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export class ToggleTabFocusModeAction extends Action2 { diff --git a/src/vs/editor/contrib/tokenization/browser/tokenization.ts b/src/vs/editor/contrib/tokenization/browser/tokenization.ts index 800f950ad..ba16ce460 100644 --- a/src/vs/editor/contrib/tokenization/browser/tokenization.ts +++ b/src/vs/editor/contrib/tokenization/browser/tokenization.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import * as nls from 'vs/nls'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import * as nls from '../../../../nls.js'; class ForceRetokenizeAction extends EditorAction { constructor() { diff --git a/src/vs/editor/contrib/unicodeHighlighter/browser/bannerController.ts b/src/vs/editor/contrib/unicodeHighlighter/browser/bannerController.ts index b5a54c49f..d96488677 100644 --- a/src/vs/editor/contrib/unicodeHighlighter/browser/bannerController.ts +++ b/src/vs/editor/contrib/unicodeHighlighter/browser/bannerController.ts @@ -2,18 +2,18 @@ * 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!./bannerController'; -import { $, append, clearNode } from 'vs/base/browser/dom'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Action } from 'vs/base/common/actions'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILinkDescriptor, Link } from 'vs/platform/opener/browser/link'; -import { widgetClose } from 'vs/platform/theme/common/iconRegistry'; -import { ThemeIcon } from 'vs/base/common/themables'; +import './bannerController.css'; +import { $, append, clearNode } from '../../../../base/browser/dom.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { Action } from '../../../../base/common/actions.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { MarkdownRenderer } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ILinkDescriptor, Link } from '../../../../platform/opener/browser/link.js'; +import { widgetClose } from '../../../../platform/theme/common/iconRegistry.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; const BANNER_ELEMENT_HEIGHT = 26; diff --git a/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts b/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts index eae47ac2d..d3747c2cd 100644 --- a/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts +++ b/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { CharCode } from 'vs/base/common/charCode'; -import { Codicon } from 'vs/base/common/codicons'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import { InvisibleCharacters, isBasicASCII } from 'vs/base/common/strings'; -import 'vs/css!./unicodeHighlighter'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { InUntrustedWorkspace, inUntrustedWorkspace, EditorOption, InternalUnicodeHighlightOptions, unicodeHighlightConfigKeys } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { IModelDecoration, IModelDeltaDecoration, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { UnicodeHighlighterOptions, UnicodeHighlighterReason, UnicodeHighlighterReasonKind, UnicodeTextModelHighlighter } from 'vs/editor/common/services/unicodeTextModelHighlighter'; -import { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { isModelDecorationInComment, isModelDecorationInString, isModelDecorationVisible } from 'vs/editor/common/viewModel/viewModelDecorations'; -import { HoverAnchor, HoverAnchorType, HoverParticipantRegistry, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverParts } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { MarkdownHover, renderMarkdownHovers } from 'vs/editor/contrib/hover/browser/markdownHoverParticipant'; -import { BannerController } from 'vs/editor/contrib/unicodeHighlighter/browser/bannerController'; -import * as nls from 'vs/nls'; -import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import * as platform from '../../../../base/common/platform.js'; +import { InvisibleCharacters, isBasicASCII } from '../../../../base/common/strings.js'; +import './unicodeHighlighter.css'; +import { IActiveCodeEditor, ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { InUntrustedWorkspace, inUntrustedWorkspace, EditorOption, InternalUnicodeHighlightOptions, unicodeHighlightConfigKeys } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { IModelDecoration, IModelDeltaDecoration, ITextModel, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { UnicodeHighlighterOptions, UnicodeHighlighterReason, UnicodeHighlighterReasonKind, UnicodeTextModelHighlighter } from '../../../common/services/unicodeTextModelHighlighter.js'; +import { IEditorWorkerService, IUnicodeHighlightsResult } from '../../../common/services/editorWorker.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { isModelDecorationInComment, isModelDecorationInString, isModelDecorationVisible } from '../../../common/viewModel/viewModelDecorations.js'; +import { HoverAnchor, HoverAnchorType, HoverParticipantRegistry, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart, IRenderedHoverParts } from '../../hover/browser/hoverTypes.js'; +import { MarkdownHover, renderMarkdownHovers } from '../../hover/browser/markdownHoverParticipant.js'; +import { BannerController } from './bannerController.js'; +import * as nls from '../../../../nls.js'; +import { ConfigurationTarget, IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { IQuickInputService, IQuickPickItem } from '../../../../platform/quickinput/common/quickInput.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { IWorkspaceTrustManagementService } from '../../../../platform/workspace/common/workspaceTrust.js'; export const warningIcon = registerIcon('extensions-warning-message', Codicon.warning, nls.localize('warningIcon', 'Icon shown with a warning message in the extensions editor.')); diff --git a/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts b/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts index 98818af89..e4a240351 100644 --- a/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts +++ b/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { basename } from 'vs/base/common/resources'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import * as nls from 'vs/nls'; -import { IConfirmationResult, IDialogService } from 'vs/platform/dialogs/common/dialogs'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { basename } from '../../../../base/common/resources.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import * as nls from '../../../../nls.js'; +import { IConfirmationResult, IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; const ignoreUnusualLineTerminators = 'ignoreUnusualLineTerminators'; diff --git a/src/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.ts b/src/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.ts index 79ec7ad02..677445143 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./highlightDecorations'; -import { MinimapPosition, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { DocumentHighlightKind } from 'vs/editor/common/languages'; -import * as nls from 'vs/nls'; -import { activeContrastBorder, editorSelectionHighlight, minimapSelectionOccurrenceHighlight, overviewRulerSelectionHighlightForeground, registerColor } from 'vs/platform/theme/common/colorRegistry'; -import { registerThemingParticipant, themeColorFromId } from 'vs/platform/theme/common/themeService'; +import './highlightDecorations.css'; +import { MinimapPosition, OverviewRulerLane, TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; +import { DocumentHighlightKind } from '../../../common/languages.js'; +import * as nls from '../../../../nls.js'; +import { activeContrastBorder, editorSelectionHighlight, minimapSelectionOccurrenceHighlight, overviewRulerSelectionHighlightForeground, registerColor } from '../../../../platform/theme/common/colorRegistry.js'; +import { registerThemingParticipant, themeColorFromId } from '../../../../platform/theme/common/themeService.js'; const wordHighlightBackground = registerColor('editor.wordHighlightBackground', { dark: '#575757B8', light: '#57575740', hcDark: null, hcLight: null }, nls.localize('wordHighlight', 'Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations.'), true); registerColor('editor.wordHighlightStrongBackground', { dark: '#004972B8', light: '#0e639c40', hcDark: null, hcLight: null }, nls.localize('wordHighlightStrong', 'Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations.'), true); diff --git a/src/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.ts b/src/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.ts index adc31ecd8..075b2d6c4 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { USUAL_WORD_SEPARATORS } from 'vs/editor/common/core/wordHelper'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { DocumentHighlight, DocumentHighlightKind, DocumentHighlightProvider, MultiDocumentHighlightProvider, ProviderResult } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { Position } from 'vs/editor/common/core/position'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { LanguageFilter } from 'vs/editor/common/languageSelector'; +import { USUAL_WORD_SEPARATORS } from '../../../common/core/wordHelper.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { DocumentHighlight, DocumentHighlightKind, DocumentHighlightProvider, MultiDocumentHighlightProvider, ProviderResult } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { Position } from '../../../common/core/position.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../../base/common/map.js'; +import { LanguageFilter } from '../../../common/languageSelector.js'; class TextualDocumentHighlightProvider implements DocumentHighlightProvider, MultiDocumentHighlightProvider { diff --git a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts index 2dfcc17ac..f052aac9c 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts @@ -3,38 +3,40 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { CancelablePromise, createCancelablePromise, Delayer, first } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor, ICodeEditor, isDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IDiffEditor, IEditorContribution, IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DocumentHighlight, DocumentHighlightProvider, MultiDocumentHighlightProvider } from 'vs/editor/common/languages'; -import { IModelDeltaDecoration, ITextModel, shouldSynchronizeModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { getHighlightDecorationOptions } from 'vs/editor/contrib/wordHighlighter/browser/highlightDecorations'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { matchesScheme, Schemas } from 'vs/base/common/network'; -import { ResourceMap } from 'vs/base/common/map'; -import { score } from 'vs/editor/common/languageSelector'; -import { isEqual } from 'vs/base/common/resources'; -import { TextualMultiDocumentHighlightFeature } from 'vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider'; -import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; +import * as nls from '../../../../nls.js'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { CancelablePromise, createCancelablePromise, Delayer, first } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError, onUnexpectedExternalError } from '../../../../base/common/errors.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../../base/common/map.js'; +import { matchesScheme, Schemas } from '../../../../base/common/network.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IActiveCodeEditor, ICodeEditor, isDiffEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, registerModelAndPositionCommand } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { IWordAtPosition } from '../../../common/core/wordHelper.js'; +import { CursorChangeReason, ICursorPositionChangedEvent } from '../../../common/cursorEvents.js'; +import { IDiffEditor, IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { registerEditorFeature } from '../../../common/editorFeatures.js'; +import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js'; +import { DocumentHighlight, DocumentHighlightProvider, MultiDocumentHighlightProvider } from '../../../common/languages.js'; +import { score } from '../../../common/languageSelector.js'; +import { IModelDeltaDecoration, ITextModel, shouldSynchronizeModel } from '../../../common/model.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; +import { ITextModelService } from '../../../common/services/resolverService.js'; +import { getHighlightDecorationOptions } from './highlightDecorations.js'; +import { TextualMultiDocumentHighlightFeature } from './textualHighlightProvider.js'; const ctxHasWordHighlights = new RawContextKey('hasWordHighlights', false); @@ -58,7 +60,7 @@ export function getOccurrencesAtPosition(registry: LanguageFeatureRegistry, model: ITextModel, position: Position, wordSeparators: string, token: CancellationToken, otherModels: ITextModel[]): Promise | null | undefined> { +export function getOccurrencesAcrossMultipleModels(registry: LanguageFeatureRegistry, model: ITextModel, position: Position, token: CancellationToken, otherModels: ITextModel[]): Promise | null | undefined> { const orderedByScore = registry.ordered(model); // in order of score ask the occurrences provider @@ -84,10 +86,9 @@ interface IOccurenceAtPositionRequest { interface IWordHighlighterQuery { modelInfo: { - model: ITextModel; + modelURI: URI; selection: Selection; } | null; - readonly word: IWordAtPosition | null; } abstract class OccurenceAtPositionRequest implements IOccurenceAtPositionRequest { @@ -175,7 +176,7 @@ class MultiModelOccurenceRequest extends OccurenceAtPositionRequest { } protected override _compute(model: ITextModel, selection: Selection, wordSeparators: string, token: CancellationToken): Promise> { - return getOccurrencesAcrossMultipleModels(this._providers, model, selection.getPosition(), wordSeparators, token, this._otherModels).then(value => { + return getOccurrencesAcrossMultipleModels(this._providers, model, selection.getPosition(), token, this._otherModels).then(value => { if (!value) { return new ResourceMap(); } @@ -185,11 +186,11 @@ class MultiModelOccurenceRequest extends OccurenceAtPositionRequest { } -function computeOccurencesAtPosition(registry: LanguageFeatureRegistry, model: ITextModel, selection: Selection, word: IWordAtPosition | null, wordSeparators: string): IOccurenceAtPositionRequest { +function computeOccurencesAtPosition(registry: LanguageFeatureRegistry, model: ITextModel, selection: Selection, wordSeparators: string): IOccurenceAtPositionRequest { return new SemanticOccurenceAtPositionRequest(model, selection, wordSeparators, registry); } -function computeOccurencesMultiModel(registry: LanguageFeatureRegistry, model: ITextModel, selection: Selection, word: IWordAtPosition | null, wordSeparators: string, otherModels: ITextModel[]): IOccurenceAtPositionRequest { +function computeOccurencesMultiModel(registry: LanguageFeatureRegistry, model: ITextModel, selection: Selection, wordSeparators: string, otherModels: ITextModel[]): IOccurenceAtPositionRequest { return new MultiModelOccurenceRequest(model, selection, wordSeparators, registry, otherModels); } @@ -207,7 +208,10 @@ class WordHighlighter { private readonly model: ITextModel; private readonly decorations: IEditorDecorationsCollection; private readonly toUnhook = new DisposableStore(); + + private readonly textModelService: ITextModelService; private readonly codeEditorService: ICodeEditorService; + private occurrencesHighlight: string; private workerRequestTokenId: number = 0; @@ -221,20 +225,31 @@ class WordHighlighter { private readonly _hasWordHighlights: IContextKey; private _ignorePositionChangeEvent: boolean; - private readonly runDelayer: Delayer = this.toUnhook.add(new Delayer(50)); + private readonly runDelayer: Delayer = this.toUnhook.add(new Delayer(25)); private static storedDecorationIDs: ResourceMap = new ResourceMap(); private static query: IWordHighlighterQuery | null = null; - constructor(editor: IActiveCodeEditor, providers: LanguageFeatureRegistry, multiProviders: LanguageFeatureRegistry, contextKeyService: IContextKeyService, @ICodeEditorService codeEditorService: ICodeEditorService) { + constructor( + editor: IActiveCodeEditor, + providers: LanguageFeatureRegistry, + multiProviders: LanguageFeatureRegistry, + contextKeyService: IContextKeyService, + @ITextModelService textModelService: ITextModelService, + @ICodeEditorService codeEditorService: ICodeEditorService, + ) { this.editor = editor; this.providers = providers; this.multiDocumentProviders = multiProviders; + this.codeEditorService = codeEditorService; + this.textModelService = textModelService; + this._hasWordHighlights = ctxHasWordHighlights.bindTo(contextKeyService); this._ignorePositionChangeEvent = false; this.occurrencesHighlight = this.editor.getOption(EditorOption.occurrencesHighlight); this.model = this.editor.getModel(); + this.toUnhook.add(editor.onDidChangeCursorPosition((e: ICursorPositionChangedEvent) => { if (this._ignorePositionChangeEvent) { // We are changing the position => ignore this event @@ -267,10 +282,8 @@ class WordHighlighter { this.toUnhook.add(editor.onDidChangeModel((e) => { if (!e.newModelUrl && e.oldModelUrl) { this._stopSingular(); - } else { - if (WordHighlighter.query) { - this._run(); - } + } else if (WordHighlighter.query) { + this._run(); } })); this.toUnhook.add(editor.onDidChangeConfiguration((e) => { @@ -282,7 +295,7 @@ class WordHighlighter { this._stopAll(); break; case 'singleFile': - this._stopAll(WordHighlighter.query?.modelInfo?.model); + this._stopAll(WordHighlighter.query?.modelInfo?.modelURI); break; case 'multiFile': if (WordHighlighter.query) { @@ -295,6 +308,19 @@ class WordHighlighter { } } })); + this.toUnhook.add(editor.onDidBlurEditorWidget(() => { + // logic is as follows + // - didBlur => active null => stopall + // - didBlur => active nb => if this.editor is notebook, do nothing (new cell, so we don't want to stopAll) + // active nb => if this.editor is NOT nb, stopAll + + const activeEditor = this.codeEditorService.getFocusedCodeEditor(); + if (!activeEditor) { // clicked into nb cell list, outline, terminal, etc + this._stopAll(); + } else if (activeEditor.getModel()?.uri.scheme === Schemas.vscodeNotebookCell && this.editor.getModel()?.uri.scheme !== Schemas.vscodeNotebookCell) { // switched tabs from non-nb to nb + this._stopAll(); + } + })); this.decorations = this.editor.createDecorationsCollection(); this.workerRequestTokenId = 0; @@ -323,6 +349,11 @@ class WordHighlighter { this._run(); } + public trigger() { + this.runDelayer.cancel(); + this._run(false, true); // immediate rendering (noDelay = true) + } + public stop(): void { if (this.occurrencesHighlight === 'off') { return; @@ -396,12 +427,12 @@ class WordHighlighter { } } - private _removeAllDecorations(preservedModel?: ITextModel): void { + private _removeAllDecorations(preservedModel?: URI): void { const currentEditors = this.codeEditorService.listCodeEditors(); const deleteURI = []; // iterate over editors and store models in currentModels for (const editor of currentEditors) { - if (!editor.hasModel() || isEqual(editor.getModel().uri, preservedModel?.uri)) { + if (!editor.hasModel() || isEqual(editor.getModel().uri, preservedModel)) { continue; } @@ -435,7 +466,7 @@ class WordHighlighter { this._removeSingleDecorations(); if (this.editor.hasTextFocus()) { - if (this.editor.getModel()?.uri.scheme !== Schemas.vscodeNotebookCell && WordHighlighter.query?.modelInfo?.model.uri.scheme !== Schemas.vscodeNotebookCell) { // clear query if focused non-nb editor + if (this.editor.getModel()?.uri.scheme !== Schemas.vscodeNotebookCell && WordHighlighter.query?.modelInfo?.modelURI.scheme !== Schemas.vscodeNotebookCell) { // clear query if focused non-nb editor WordHighlighter.query = null; this._run(); // TODO: @Yoyokrazy -- investigate why we need a full rerun here. likely addressed a case/patch in the first iteration of this feature } else { // remove modelInfo to account for nb cell being disposed @@ -464,7 +495,7 @@ class WordHighlighter { } } - private _stopAll(preservedModel?: ITextModel): void { + private _stopAll(preservedModel?: URI): void { // Remove any existing decorations // TODO: @Yoyokrazy -- this triggers as notebooks scroll, causing highlights to disappear momentarily. // maybe a nb type check? @@ -582,9 +613,8 @@ class WordHighlighter { return currentModels; } - private _run(multiFileConfigChange?: boolean): void { + private async _run(multiFileConfigChange?: boolean, noDelay?: boolean): Promise { - let workerRequestIsValid; const hasTextFocus = this.editor.hasTextFocus(); if (!hasTextFocus) { // new nb cell scrolled in, didChangeModel fires @@ -615,41 +645,18 @@ class WordHighlighter { return; } - // All the effort below is trying to achieve this: - // - when cursor is moved to a word, trigger immediately a findOccurrences request - // - 250ms later after the last cursor move event, render the occurrences - // - no flickering! - workerRequestIsValid = (this.workerRequest && this.workerRequest.isValid(this.model, editorSelection, this.decorations)); - WordHighlighter.query = { modelInfo: { - model: this.model, + modelURI: this.model.uri, selection: editorSelection, - }, - word: word + } }; } - // There are 4 cases: - // a) old workerRequest is valid & completed, renderDecorationsTimer fired - // b) old workerRequest is valid & completed, renderDecorationsTimer not fired - // c) old workerRequest is valid, but not completed - // d) old workerRequest is not valid - - // For a) no action is needed - // For c), member 'lastCursorPositionChangeTime' will be used when installing the timer so no action is needed this.lastCursorPositionChangeTime = (new Date()).getTime(); - if (workerRequestIsValid) { - if (this.workerRequestCompleted && this.renderDecorationsTimer !== -1) { - // case b) - // Delay the firing of renderDecorationsTimer by an extra 250 ms - clearTimeout(this.renderDecorationsTimer); - this.renderDecorationsTimer = -1; - this._beginRenderDecorations(); - } - } else if (isEqual(this.editor.getModel().uri, WordHighlighter.query.modelInfo?.model.uri)) { // only trigger new worker requests from the primary model that initiated the query + if (isEqual(this.editor.getModel().uri, WordHighlighter.query.modelInfo?.modelURI)) { // only trigger new worker requests from the primary model that initiated the query // case d) // check if the new queried word is contained in the range of a stored decoration for this model @@ -664,7 +671,7 @@ class WordHighlighter { // stop all previous actions if new word is highlighted // if we trigger the run off a setting change -> multifile highlighting, we do not want to remove decorations from this model - this._stopAll(multiFileConfigChange ? this.model : undefined); + this._stopAll(multiFileConfigChange ? this.model.uri : undefined); const myRequestId = ++this.workerRequestTokenId; this.workerRequestCompleted = false; @@ -675,10 +682,12 @@ class WordHighlighter { // 1) we have text focus, and a valid query was updated. // 2) we do not have text focus, and a valid query is cached. // the query will ALWAYS have the correct data for the current highlight request, so it can always be passed to the workerRequest safely - if (!WordHighlighter.query || !WordHighlighter.query.modelInfo || WordHighlighter.query.modelInfo.model.isDisposed()) { + if (!WordHighlighter.query || !WordHighlighter.query.modelInfo) { return; } - this.workerRequest = this.computeWithModel(WordHighlighter.query.modelInfo.model, WordHighlighter.query.modelInfo.selection, WordHighlighter.query.word, otherModelsToHighlight); + const queryModelRef = await this.textModelService.createModelReference(WordHighlighter.query.modelInfo.modelURI); + const queryModel = queryModelRef.object.textEditorModel; + this.workerRequest = this.computeWithModel(queryModel, WordHighlighter.query.modelInfo.selection, otherModelsToHighlight); this.workerRequest?.result.then(data => { if (myRequestId === this.workerRequestTokenId) { @@ -687,20 +696,43 @@ class WordHighlighter { this._beginRenderDecorations(); } }, onUnexpectedError); + } else if (this.model.uri.scheme === Schemas.vscodeNotebookCell) { + // new wordHighlighter coming from a different model, NOT the query model, need to create a textModel ref + + // this._stopAll(multiFileConfigChange ? this.model.uri : undefined); + + const myRequestId = ++this.workerRequestTokenId; + this.workerRequestCompleted = false; + + if (!WordHighlighter.query || !WordHighlighter.query.modelInfo) { + return; + } + + const queryModelRef = await this.textModelService.createModelReference(WordHighlighter.query.modelInfo.modelURI); + const queryModel = queryModelRef.object.textEditorModel; + this.workerRequest = this.computeWithModel(queryModel, WordHighlighter.query.modelInfo.selection, [this.model]); + + this.workerRequest?.result.then(data => { + if (myRequestId === this.workerRequestTokenId) { + this.workerRequestCompleted = true; + this.workerRequestValue = data || []; + this._beginRenderDecorations(noDelay); + } + }, onUnexpectedError); } } - private computeWithModel(model: ITextModel, selection: Selection, word: IWordAtPosition | null, otherModels: ITextModel[]): IOccurenceAtPositionRequest | null { + private computeWithModel(model: ITextModel, selection: Selection, otherModels: ITextModel[]): IOccurenceAtPositionRequest | null { if (!otherModels.length) { - return computeOccurencesAtPosition(this.providers, model, selection, word, this.editor.getOption(EditorOption.wordSeparators)); + return computeOccurencesAtPosition(this.providers, model, selection, this.editor.getOption(EditorOption.wordSeparators)); } else { - return computeOccurencesMultiModel(this.multiDocumentProviders, model, selection, word, this.editor.getOption(EditorOption.wordSeparators), otherModels); + return computeOccurencesMultiModel(this.multiDocumentProviders, model, selection, this.editor.getOption(EditorOption.wordSeparators), otherModels); } } - private _beginRenderDecorations(): void { + private _beginRenderDecorations(noDelay?: boolean): void { const currentTime = (new Date()).getTime(); - const minimumRenderTime = this.lastCursorPositionChangeTime + 250; + const minimumRenderTime = this.lastCursorPositionChangeTime + (noDelay ? 0 : 250); if (currentTime >= minimumRenderTime) { // Synchronous @@ -755,6 +787,9 @@ class WordHighlighter { } } } + + // clear the worker request when decorations are completed + this.workerRequest = null; } public dispose(): void { @@ -773,16 +808,26 @@ export class WordHighlighterContribution extends Disposable implements IEditorCo private _wordHighlighter: WordHighlighter | null; - constructor(editor: ICodeEditor, @IContextKeyService contextKeyService: IContextKeyService, @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, @ICodeEditorService codeEditorService: ICodeEditorService) { + constructor( + editor: ICodeEditor, + @IContextKeyService contextKeyService: IContextKeyService, + @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, + @ICodeEditorService codeEditorService: ICodeEditorService, + @ITextModelService textModelService: ITextModelService, + ) { super(); this._wordHighlighter = null; const createWordHighlighterIfPossible = () => { if (editor.hasModel() && !editor.getModel().isTooLargeForTokenization()) { - this._wordHighlighter = new WordHighlighter(editor, languageFeaturesService.documentHighlightProvider, languageFeaturesService.multiDocumentHighlightProvider, contextKeyService, codeEditorService); + this._wordHighlighter = new WordHighlighter(editor, languageFeaturesService.documentHighlightProvider, languageFeaturesService.multiDocumentHighlightProvider, contextKeyService, textModelService, codeEditorService); } }; this._register(editor.onDidChangeModel((e) => { if (this._wordHighlighter) { + if (!e.newModelUrl && e.oldModelUrl?.scheme !== Schemas.vscodeNotebookCell) { // happens when switching tabs to a notebook that has focus in the cell list, no new model URI (this also doesn't make it to the wordHighlighter, bc no editor.hasModel) + this.wordHighlighter?.stop(); + } + this._wordHighlighter.dispose(); this._wordHighlighter = null; } diff --git a/src/vs/editor/contrib/wordOperations/browser/wordOperations.ts b/src/vs/editor/contrib/wordOperations/browser/wordOperations.ts index 29381ecf6..7022ec9bf 100644 --- a/src/vs/editor/contrib/wordOperations/browser/wordOperations.ts +++ b/src/vs/editor/contrib/wordOperations/browser/wordOperations.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, ICommandOptions, registerEditorAction, registerEditorCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand'; -import { EditorOption, EditorOptions } from 'vs/editor/common/config/editorOptions'; -import { CursorState } from 'vs/editor/common/cursorCommon'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { DeleteWordContext, WordNavigationType, WordOperations } from 'vs/editor/common/cursor/cursorWordOperations'; -import { getMapForWordSeparators, WordCharacterClassifier } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import * as nls from 'vs/nls'; -import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IsWindowsContext } from 'vs/platform/contextkey/common/contextkeys'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, EditorCommand, ICommandOptions, registerEditorAction, registerEditorCommand, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { ReplaceCommand } from '../../../common/commands/replaceCommand.js'; +import { EditorOption, EditorOptions } from '../../../common/config/editorOptions.js'; +import { CursorState } from '../../../common/cursorCommon.js'; +import { CursorChangeReason } from '../../../common/cursorEvents.js'; +import { DeleteWordContext, WordNavigationType, WordOperations } from '../../../common/cursor/cursorWordOperations.js'; +import { getMapForWordSeparators, WordCharacterClassifier } from '../../../common/core/wordCharacterClassifier.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ScrollType } from '../../../common/editorCommon.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import * as nls from '../../../../nls.js'; +import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../platform/accessibility/common/accessibility.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { IsWindowsContext } from '../../../../platform/contextkey/common/contextkeys.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export interface MoveWordOptions extends ICommandOptions { inSelectionMode: boolean; diff --git a/src/vs/editor/contrib/wordOperations/test/browser/wordOperations.test.ts b/src/vs/editor/contrib/wordOperations/test/browser/wordOperations.test.ts index d90d44fd2..237945f64 100644 --- a/src/vs/editor/contrib/wordOperations/test/browser/wordOperations.test.ts +++ b/src/vs/editor/contrib/wordOperations/test/browser/wordOperations.test.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { isFirefox } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { CursorWordAccessibilityLeft, CursorWordAccessibilityLeftSelect, CursorWordAccessibilityRight, CursorWordAccessibilityRightSelect, CursorWordEndLeft, CursorWordEndLeftSelect, CursorWordEndRight, CursorWordEndRightSelect, CursorWordLeft, CursorWordLeftSelect, CursorWordRight, CursorWordRightSelect, CursorWordStartLeft, CursorWordStartLeftSelect, CursorWordStartRight, CursorWordStartRightSelect, DeleteInsideWord, DeleteWordEndLeft, DeleteWordEndRight, DeleteWordLeft, DeleteWordRight, DeleteWordStartLeft, DeleteWordStartRight } from 'vs/editor/contrib/wordOperations/browser/wordOperations'; -import { deserializePipePositions, serializePipePositions, testRepeatedActionAndExtractPositions } from 'vs/editor/contrib/wordOperations/test/browser/wordTestUtils'; -import { createCodeEditorServices, instantiateTestCodeEditor, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { isFirefox } from '../../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { CoreEditingCommands } from '../../../../browser/coreCommands.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorCommand } from '../../../../browser/editorExtensions.js'; +import { Position } from '../../../../common/core/position.js'; +import { Selection } from '../../../../common/core/selection.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { ViewModel } from '../../../../common/viewModel/viewModelImpl.js'; +import { CursorWordAccessibilityLeft, CursorWordAccessibilityLeftSelect, CursorWordAccessibilityRight, CursorWordAccessibilityRightSelect, CursorWordEndLeft, CursorWordEndLeftSelect, CursorWordEndRight, CursorWordEndRightSelect, CursorWordLeft, CursorWordLeftSelect, CursorWordRight, CursorWordRightSelect, CursorWordStartLeft, CursorWordStartLeftSelect, CursorWordStartRight, CursorWordStartRightSelect, DeleteInsideWord, DeleteWordEndLeft, DeleteWordEndRight, DeleteWordLeft, DeleteWordRight, DeleteWordStartLeft, DeleteWordStartRight } from '../../browser/wordOperations.js'; +import { deserializePipePositions, serializePipePositions, testRepeatedActionAndExtractPositions } from './wordTestUtils.js'; +import { createCodeEditorServices, instantiateTestCodeEditor, withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; +import { instantiateTextModel } from '../../../../test/common/testTextModel.js'; +import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; suite('WordOperations', () => { diff --git a/src/vs/editor/contrib/wordOperations/test/browser/wordTestUtils.ts b/src/vs/editor/contrib/wordOperations/test/browser/wordTestUtils.ts index 540c1a0d4..36ed4fa20 100644 --- a/src/vs/editor/contrib/wordOperations/test/browser/wordTestUtils.ts +++ b/src/vs/editor/contrib/wordOperations/test/browser/wordTestUtils.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position } from 'vs/editor/common/core/position'; -import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { Position } from '../../../../common/core/position.js'; +import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withTestCodeEditor } from '../../../../test/browser/testCodeEditor.js'; export function deserializePipePositions(text: string): [string, Position[]] { let resultText = ''; diff --git a/src/vs/editor/contrib/wordPartOperations/browser/wordPartOperations.ts b/src/vs/editor/contrib/wordPartOperations/browser/wordPartOperations.ts index 5ed4d3109..9bee3f0e0 100644 --- a/src/vs/editor/contrib/wordPartOperations/browser/wordPartOperations.ts +++ b/src/vs/editor/contrib/wordPartOperations/browser/wordPartOperations.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { registerEditorCommand } from 'vs/editor/browser/editorExtensions'; -import { DeleteWordContext, WordNavigationType, WordPartOperations } from 'vs/editor/common/cursor/cursorWordOperations'; -import { WordCharacterClassifier } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ITextModel } from 'vs/editor/common/model'; -import { DeleteWordCommand, MoveWordCommand } from 'vs/editor/contrib/wordOperations/browser/wordOperations'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { registerEditorCommand } from '../../../browser/editorExtensions.js'; +import { DeleteWordContext, WordNavigationType, WordPartOperations } from '../../../common/cursor/cursorWordOperations.js'; +import { WordCharacterClassifier } from '../../../common/core/wordCharacterClassifier.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { ITextModel } from '../../../common/model.js'; +import { DeleteWordCommand, MoveWordCommand } from '../../wordOperations/browser/wordOperations.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; export class DeleteWordPartLeft extends DeleteWordCommand { constructor() { diff --git a/src/vs/editor/contrib/wordPartOperations/test/browser/utils.ts b/src/vs/editor/contrib/wordPartOperations/test/browser/utils.ts index 7610bd189..c5afe453d 100644 --- a/src/vs/editor/contrib/wordPartOperations/test/browser/utils.ts +++ b/src/vs/editor/contrib/wordPartOperations/test/browser/utils.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ServiceIdentifier, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { ServiceIdentifier, ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js'; export class StaticServiceAccessor implements ServicesAccessor { private services = new Map, any>(); diff --git a/src/vs/editor/contrib/wordPartOperations/test/browser/wordPartOperations.test.ts b/src/vs/editor/contrib/wordPartOperations/test/browser/wordPartOperations.test.ts index b3a72759a..bf9d0a504 100644 --- a/src/vs/editor/contrib/wordPartOperations/test/browser/wordPartOperations.test.ts +++ b/src/vs/editor/contrib/wordPartOperations/test/browser/wordPartOperations.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { deserializePipePositions, serializePipePositions, testRepeatedActionAndExtractPositions } from 'vs/editor/contrib/wordOperations/test/browser/wordTestUtils'; -import { CursorWordPartLeft, CursorWordPartLeftSelect, CursorWordPartRight, CursorWordPartRightSelect, DeleteWordPartLeft, DeleteWordPartRight } from 'vs/editor/contrib/wordPartOperations/browser/wordPartOperations'; -import { StaticServiceAccessor } from 'vs/editor/contrib/wordPartOperations/test/browser/utils'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { ICodeEditor } from '../../../../browser/editorBrowser.js'; +import { EditorCommand } from '../../../../browser/editorExtensions.js'; +import { Position } from '../../../../common/core/position.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { deserializePipePositions, serializePipePositions, testRepeatedActionAndExtractPositions } from '../../../wordOperations/test/browser/wordTestUtils.js'; +import { CursorWordPartLeft, CursorWordPartLeftSelect, CursorWordPartRight, CursorWordPartRightSelect, DeleteWordPartLeft, DeleteWordPartRight } from '../../browser/wordPartOperations.js'; +import { StaticServiceAccessor } from './utils.js'; +import { TestLanguageConfigurationService } from '../../../../test/common/modes/testLanguageConfigurationService.js'; suite('WordPartOperations', () => { diff --git a/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts b/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts index 57d3dd381..e1d387deb 100644 --- a/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts +++ b/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { IHorizontalSashLayoutProvider, ISashEvent, Orientation, Sash, SashState } from 'vs/base/browser/ui/sash/sash'; -import { Color, RGBA } from 'vs/base/common/color'; -import { IdGenerator } from 'vs/base/common/idGenerator'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import * as objects from 'vs/base/common/objects'; -import 'vs/css!./zoneWidget'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, IViewZone, IViewZoneChangeAccessor } from 'vs/editor/browser/editorBrowser'; -import { EditorLayoutInfo, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { IEditorDecorationsCollection, ScrollType } from 'vs/editor/common/editorCommon'; -import { TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; +import * as dom from '../../../../base/browser/dom.js'; +import { IHorizontalSashLayoutProvider, ISashEvent, Orientation, Sash, SashState } from '../../../../base/browser/ui/sash/sash.js'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { IdGenerator } from '../../../../base/common/idGenerator.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import * as objects from '../../../../base/common/objects.js'; +import './zoneWidget.css'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, IViewZone, IViewZoneChangeAccessor } from '../../../browser/editorBrowser.js'; +import { EditorLayoutInfo, EditorOption } from '../../../common/config/editorOptions.js'; +import { IPosition, Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { IEditorDecorationsCollection, ScrollType } from '../../../common/editorCommon.js'; +import { TrackedRangeStickiness } from '../../../common/model.js'; +import { ModelDecorationOptions } from '../../../common/model/textModel.js'; export interface IOptions { showFrame?: boolean; diff --git a/src/vs/editor/editor.all.ts b/src/vs/editor/editor.all.ts index e40c7056a..e41780c0b 100644 --- a/src/vs/editor/editor.all.ts +++ b/src/vs/editor/editor.all.ts @@ -3,69 +3,68 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/editor/browser/coreCommands'; -import 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import 'vs/editor/browser/widget/diffEditor/diffEditor.contribution'; -import 'vs/editor/contrib/anchorSelect/browser/anchorSelect'; -import 'vs/editor/contrib/bracketMatching/browser/bracketMatching'; -import 'vs/editor/contrib/caretOperations/browser/caretOperations'; -import 'vs/editor/contrib/caretOperations/browser/transpose'; -import 'vs/editor/contrib/clipboard/browser/clipboard'; -import 'vs/editor/contrib/codeAction/browser/codeActionContributions'; -import 'vs/editor/contrib/codelens/browser/codelensController'; -import 'vs/editor/contrib/colorPicker/browser/colorContributions'; -import 'vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions'; -import 'vs/editor/contrib/comment/browser/comment'; -import 'vs/editor/contrib/contextmenu/browser/contextmenu'; -import 'vs/editor/contrib/cursorUndo/browser/cursorUndo'; -import 'vs/editor/contrib/dnd/browser/dnd'; -import 'vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution'; -import 'vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution'; -import 'vs/editor/contrib/find/browser/findController'; -import 'vs/editor/contrib/folding/browser/folding'; -import 'vs/editor/contrib/fontZoom/browser/fontZoom'; -import 'vs/editor/contrib/format/browser/formatActions'; -import 'vs/editor/contrib/documentSymbols/browser/documentSymbols'; -import 'vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution'; -import 'vs/editor/contrib/inlineProgress/browser/inlineProgress'; -import 'vs/editor/contrib/gotoSymbol/browser/goToCommands'; -import 'vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition'; -import 'vs/editor/contrib/gotoError/browser/gotoError'; -import 'vs/editor/contrib/hover/browser/hoverContribution'; -import 'vs/editor/contrib/indentation/browser/indentation'; -import 'vs/editor/contrib/inlayHints/browser/inlayHintsContribution'; -import 'vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace'; -import 'vs/editor/contrib/lineSelection/browser/lineSelection'; -import 'vs/editor/contrib/linesOperations/browser/linesOperations'; -import 'vs/editor/contrib/linkedEditing/browser/linkedEditing'; -import 'vs/editor/contrib/links/browser/links'; -import 'vs/editor/contrib/longLinesHelper/browser/longLinesHelper'; -import 'vs/editor/contrib/multicursor/browser/multicursor'; -import 'vs/editor/contrib/inlineEdit/browser/inlineEdit.contribution'; -import 'vs/editor/contrib/inlineEdits/browser/inlineEdits.contribution'; -import 'vs/editor/contrib/parameterHints/browser/parameterHints'; -import 'vs/editor/contrib/placeholderText/browser/placeholderText.contribution'; -import 'vs/editor/contrib/rename/browser/rename'; -import 'vs/editor/contrib/sectionHeaders/browser/sectionHeaders'; -import 'vs/editor/contrib/semanticTokens/browser/documentSemanticTokens'; -import 'vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens'; -import 'vs/editor/contrib/smartSelect/browser/smartSelect'; -import 'vs/editor/contrib/snippet/browser/snippetController2'; -import 'vs/editor/contrib/stickyScroll/browser/stickyScrollContribution'; -import 'vs/editor/contrib/suggest/browser/suggestController'; -import 'vs/editor/contrib/suggest/browser/suggestInlineCompletions'; -import 'vs/editor/contrib/tokenization/browser/tokenization'; -import 'vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode'; -import 'vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter'; -import 'vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators'; -import 'vs/editor/contrib/wordHighlighter/browser/wordHighlighter'; -import 'vs/editor/contrib/wordOperations/browser/wordOperations'; -import 'vs/editor/contrib/wordPartOperations/browser/wordPartOperations'; -import 'vs/editor/contrib/readOnlyMessage/browser/contribution'; -import 'vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution'; +import './browser/coreCommands.js'; +import './browser/widget/codeEditor/codeEditorWidget.js'; +import './browser/widget/diffEditor/diffEditor.contribution.js'; +import './contrib/anchorSelect/browser/anchorSelect.js'; +import './contrib/bracketMatching/browser/bracketMatching.js'; +import './contrib/caretOperations/browser/caretOperations.js'; +import './contrib/caretOperations/browser/transpose.js'; +import './contrib/clipboard/browser/clipboard.js'; +import './contrib/codeAction/browser/codeActionContributions.js'; +import './contrib/codelens/browser/codelensController.js'; +import './contrib/colorPicker/browser/colorPickerContribution.js'; +import './contrib/comment/browser/comment.js'; +import './contrib/contextmenu/browser/contextmenu.js'; +import './contrib/cursorUndo/browser/cursorUndo.js'; +import './contrib/dnd/browser/dnd.js'; +import './contrib/dropOrPasteInto/browser/copyPasteContribution.js'; +import './contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js'; +import './contrib/find/browser/findController.js'; +import './contrib/folding/browser/folding.js'; +import './contrib/fontZoom/browser/fontZoom.js'; +import './contrib/format/browser/formatActions.js'; +import './contrib/documentSymbols/browser/documentSymbols.js'; +import './contrib/inlineCompletions/browser/inlineCompletions.contribution.js'; +import './contrib/inlineProgress/browser/inlineProgress.js'; +import './contrib/gotoSymbol/browser/goToCommands.js'; +import './contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js'; +import './contrib/gotoError/browser/gotoError.js'; +import './contrib/gpu/browser/gpuActions.js'; +import './contrib/hover/browser/hoverContribution.js'; +import './contrib/indentation/browser/indentation.js'; +import './contrib/inlayHints/browser/inlayHintsContribution.js'; +import './contrib/inPlaceReplace/browser/inPlaceReplace.js'; +import './contrib/lineSelection/browser/lineSelection.js'; +import './contrib/linesOperations/browser/linesOperations.js'; +import './contrib/linkedEditing/browser/linkedEditing.js'; +import './contrib/links/browser/links.js'; +import './contrib/longLinesHelper/browser/longLinesHelper.js'; +import './contrib/multicursor/browser/multicursor.js'; +import './contrib/inlineEdit/browser/inlineEdit.contribution.js'; +import './contrib/parameterHints/browser/parameterHints.js'; +import './contrib/placeholderText/browser/placeholderText.contribution.js'; +import './contrib/rename/browser/rename.js'; +import './contrib/sectionHeaders/browser/sectionHeaders.js'; +import './contrib/semanticTokens/browser/documentSemanticTokens.js'; +import './contrib/semanticTokens/browser/viewportSemanticTokens.js'; +import './contrib/smartSelect/browser/smartSelect.js'; +import './contrib/snippet/browser/snippetController2.js'; +import './contrib/stickyScroll/browser/stickyScrollContribution.js'; +import './contrib/suggest/browser/suggestController.js'; +import './contrib/suggest/browser/suggestInlineCompletions.js'; +import './contrib/tokenization/browser/tokenization.js'; +import './contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js'; +import './contrib/unicodeHighlighter/browser/unicodeHighlighter.js'; +import './contrib/unusualLineTerminators/browser/unusualLineTerminators.js'; +import './contrib/wordHighlighter/browser/wordHighlighter.js'; +import './contrib/wordOperations/browser/wordOperations.js'; +import './contrib/wordPartOperations/browser/wordPartOperations.js'; +import './contrib/readOnlyMessage/browser/contribution.js'; +import './contrib/diffEditorBreadcrumbs/browser/contribution.js'; // Load up these strings even in VSCode, even if they are not used // in order to get them translated -import 'vs/editor/common/standaloneStrings'; +import './common/standaloneStrings.js'; -import 'vs/base/browser/ui/codicons/codiconStyles'; // The codicons are defined here and must be loaded +import '../base/browser/ui/codicons/codiconStyles.js'; // The codicons are defined here and must be loaded diff --git a/src/vs/editor/editor.api.ts b/src/vs/editor/editor.api.ts index a9fc0b294..2a7c13dc1 100644 --- a/src/vs/editor/editor.api.ts +++ b/src/vs/editor/editor.api.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorOptions, WrappingIndent, EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { createMonacoBaseAPI } from 'vs/editor/common/services/editorBaseApi'; -import { createMonacoEditorAPI } from 'vs/editor/standalone/browser/standaloneEditor'; -import { createMonacoLanguagesAPI } from 'vs/editor/standalone/browser/standaloneLanguages'; -import { FormattingConflicts } from 'vs/editor/contrib/format/browser/format'; +import { EditorOptions, WrappingIndent, EditorAutoIndentStrategy } from './common/config/editorOptions.js'; +import { createMonacoBaseAPI } from './common/services/editorBaseApi.js'; +import { createMonacoEditorAPI } from './standalone/browser/standaloneEditor.js'; +import { createMonacoLanguagesAPI } from './standalone/browser/standaloneLanguages.js'; +import { FormattingConflicts } from './contrib/format/browser/format.js'; // Set defaults for standalone editor EditorOptions.wrappingIndent.defaultValue = WrappingIndent.None; diff --git a/src/vs/editor/editor.main.ts b/src/vs/editor/editor.main.ts index 23d547570..fbdf6a721 100644 --- a/src/vs/editor/editor.main.ts +++ b/src/vs/editor/editor.main.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/editor/editor.all'; -import 'vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard'; -import 'vs/editor/standalone/browser/inspectTokens/inspectTokens'; -import 'vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess'; -import 'vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess'; -import 'vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess'; -import 'vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess'; -import 'vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch'; -import 'vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast'; +import './editor.all.js'; +import './standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js'; +import './standalone/browser/inspectTokens/inspectTokens.js'; +import './standalone/browser/quickAccess/standaloneHelpQuickAccess.js'; +import './standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js'; +import './standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.js'; +import './standalone/browser/quickAccess/standaloneCommandsQuickAccess.js'; +import './standalone/browser/referenceSearch/standaloneReferenceSearch.js'; +import './standalone/browser/toggleHighContrast/toggleHighContrast.js'; -export * from 'vs/editor/editor.api'; +export * from './editor.api.js'; diff --git a/src/vs/editor/editor.worker.ts b/src/vs/editor/editor.worker.ts index a50ddd14b..0fd98caff 100644 --- a/src/vs/editor/editor.worker.ts +++ b/src/vs/editor/editor.worker.ts @@ -3,4 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export * from 'vs/editor/common/services/editorWorkerBootstrap'; +export * from './common/services/editorWorkerBootstrap.js'; diff --git a/src/vs/editor/standalone/browser/colorizer.ts b/src/vs/editor/standalone/browser/colorizer.ts index 1562ff2cd..0136434b1 100644 --- a/src/vs/editor/standalone/browser/colorizer.ts +++ b/src/vs/editor/standalone/browser/colorizer.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; -import * as strings from 'vs/base/common/strings'; -import { ColorId, FontStyle, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageIdCodec, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ITextModel } from 'vs/editor/common/model'; -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { RenderLineInput, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { ViewLineRenderingData } from 'vs/editor/common/viewModel'; -import { MonarchTokenizer } from 'vs/editor/standalone/common/monarch/monarchLexer'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; +import { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js'; +import * as strings from '../../../base/common/strings.js'; +import { ColorId, FontStyle, MetadataConsts } from '../../common/encodedTokenAttributes.js'; +import { ILanguageIdCodec, ITokenizationSupport, TokenizationRegistry } from '../../common/languages.js'; +import { ILanguageService } from '../../common/languages/language.js'; +import { ITextModel } from '../../common/model.js'; +import { IViewLineTokens, LineTokens } from '../../common/tokens/lineTokens.js'; +import { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js'; +import { ViewLineRenderingData } from '../../common/viewModel.js'; +import { MonarchTokenizer } from '../common/monarch/monarchLexer.js'; +import { IStandaloneThemeService } from '../common/standaloneTheme.js'; const ttPolicy = createTrustedTypesPolicy('standaloneColorizer', { createHTML: value => value }); diff --git a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts index 9ac07b2b2..3c3ce892c 100644 --- a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts +++ b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./iPadShowKeyboard'; -import * as dom from 'vs/base/browser/dom'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { isIOS } from 'vs/base/common/platform'; +import './iPadShowKeyboard.css'; +import * as dom from '../../../../base/browser/dom.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { isIOS } from '../../../../base/common/platform.js'; export class IPadShowKeyboard extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts b/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts index da8a7c353..2eb755687 100644 --- a/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts +++ b/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./inspectTokens'; -import { $, append, reset } from 'vs/base/browser/dom'; -import { CharCode } from 'vs/base/common/charCode'; -import { Color } from 'vs/base/common/color'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; -import { Position } from 'vs/editor/common/core/position'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { IState, ITokenizationSupport, TokenizationRegistry, ILanguageIdCodec, Token } from 'vs/editor/common/languages'; -import { FontStyle, StandardTokenType, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; -import { NullState, nullTokenize, nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { InspectTokensNLS } from 'vs/editor/common/standaloneStrings'; +import './inspectTokens.css'; +import { $, append, reset } from '../../../../base/browser/dom.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { Color } from '../../../../base/common/color.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../browser/editorBrowser.js'; +import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution, EditorContributionInstantiation } from '../../../browser/editorExtensions.js'; +import { Position } from '../../../common/core/position.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { ITextModel } from '../../../common/model.js'; +import { IState, ITokenizationSupport, TokenizationRegistry, ILanguageIdCodec, Token } from '../../../common/languages.js'; +import { FontStyle, StandardTokenType, TokenMetadata } from '../../../common/encodedTokenAttributes.js'; +import { NullState, nullTokenize, nullTokenizeEncoded } from '../../../common/languages/nullTokenize.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { IStandaloneThemeService } from '../../common/standaloneTheme.js'; +import { InspectTokensNLS } from '../../../common/standaloneStrings.js'; class InspectTokensController extends Disposable implements IEditorContribution { diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts index 171a395e6..b0b4d8098 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Registry } from 'vs/platform/registry/common/platform'; -import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess'; -import { QuickCommandNLS } from 'vs/editor/common/standaloneStrings'; -import { ICommandQuickPick } from 'vs/platform/quickinput/browser/commandsQuickAccess'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { AbstractEditorCommandsQuickAccessProvider } from 'vs/editor/contrib/quickAccess/browser/commandsQuickAccess'; -import { IEditor } from 'vs/editor/common/editorCommon'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { EditorAction, registerEditorAction } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IQuickAccessRegistry, Extensions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { QuickCommandNLS } from '../../../common/standaloneStrings.js'; +import { ICommandQuickPick } from '../../../../platform/quickinput/browser/commandsQuickAccess.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { AbstractEditorCommandsQuickAccessProvider } from '../../../contrib/quickAccess/browser/commandsQuickAccess.js'; +import { IEditor } from '../../../common/editorCommon.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { EditorAction, registerEditorAction } from '../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; export class StandaloneCommandsQuickAccessProvider extends AbstractEditorCommandsQuickAccessProvider { diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts index c6ccecf96..8fdee5d82 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AbstractGotoLineQuickAccessProvider } from 'vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { GoToLineNLS } from 'vs/editor/common/standaloneStrings'; -import { Event } from 'vs/base/common/event'; -import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; +import { AbstractGotoLineQuickAccessProvider } from '../../../contrib/quickAccess/browser/gotoLineQuickAccess.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IQuickAccessRegistry, Extensions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { GoToLineNLS } from '../../../common/standaloneStrings.js'; +import { Event } from '../../../../base/common/event.js'; +import { EditorAction, registerEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; export class StandaloneGotoLineQuickAccessProvider extends AbstractGotoLineQuickAccessProvider { diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts index 0c2cfb861..aa05b0525 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/base/browser/ui/codicons/codiconStyles'; // The codicon symbol styles are defined here and must be loaded -import 'vs/editor/contrib/symbolIcons/browser/symbolIcons'; // The codicon symbol colors are defined here and must be loaded to get colors -import { AbstractGotoSymbolQuickAccessProvider } from 'vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { QuickOutlineNLS } from 'vs/editor/common/standaloneStrings'; -import { Event } from 'vs/base/common/event'; -import { EditorAction, registerEditorAction } from 'vs/editor/browser/editorExtensions'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IQuickInputService, ItemActivation } from 'vs/platform/quickinput/common/quickInput'; -import { IOutlineModelService } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded +import '../../../contrib/symbolIcons/browser/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors +import { AbstractGotoSymbolQuickAccessProvider } from '../../../contrib/quickAccess/browser/gotoSymbolQuickAccess.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IQuickAccessRegistry, Extensions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { QuickOutlineNLS } from '../../../common/standaloneStrings.js'; +import { Event } from '../../../../base/common/event.js'; +import { EditorAction, registerEditorAction } from '../../../browser/editorExtensions.js'; +import { EditorContextKeys } from '../../../common/editorContextKeys.js'; +import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { IQuickInputService, ItemActivation } from '../../../../platform/quickinput/common/quickInput.js'; +import { IOutlineModelService } from '../../../contrib/documentSymbols/browser/outlineModel.js'; +import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; export class StandaloneGotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccessProvider { diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess.ts index 31c551103..aae4222cf 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Registry } from 'vs/platform/registry/common/platform'; -import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess'; -import { QuickHelpNLS } from 'vs/editor/common/standaloneStrings'; -import { HelpQuickAccessProvider } from 'vs/platform/quickinput/browser/helpQuickAccess'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IQuickAccessRegistry, Extensions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { QuickHelpNLS } from '../../../common/standaloneStrings.js'; +import { HelpQuickAccessProvider } from '../../../../platform/quickinput/browser/helpQuickAccess.js'; Registry.as(Extensions.Quickaccess).registerQuickAccessProvider({ ctor: HelpQuickAccessProvider, diff --git a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts index 9700eed5a..d46bbff59 100644 --- a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts +++ b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./standaloneQuickInput'; -import { Event } from 'vs/base/common/event'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IQuickInputService, IQuickPickItem, IQuickPick, IInputBox, IQuickNavigateConfiguration, IPickOptions, QuickPickInput, IInputOptions, IQuickWidget } from 'vs/platform/quickinput/common/quickInput'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { EditorScopedLayoutService } from 'vs/editor/standalone/browser/standaloneLayoutService'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { QuickInputController, IQuickInputControllerHost } from 'vs/platform/quickinput/browser/quickInputController'; -import { QuickInputService } from 'vs/platform/quickinput/browser/quickInputService'; -import { createSingleCallFunction } from 'vs/base/common/functional'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import './standaloneQuickInput.css'; +import { Event } from '../../../../base/common/event.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { IEditorContribution } from '../../../common/editorCommon.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { IQuickInputService, IQuickPickItem, IQuickPick, IInputBox, IQuickNavigateConfiguration, IPickOptions, QuickPickInput, IInputOptions, IQuickWidget } from '../../../../platform/quickinput/common/quickInput.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { EditorScopedLayoutService } from '../standaloneLayoutService.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { QuickInputController, IQuickInputControllerHost } from '../../../../platform/quickinput/browser/quickInputController.js'; +import { QuickInputService } from '../../../../platform/quickinput/browser/quickInputService.js'; +import { createSingleCallFunction } from '../../../../base/common/functional.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; class EditorScopedQuickInputService extends QuickInputService { diff --git a/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts b/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts index 23f8f72cc..4f287b772 100644 --- a/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts +++ b/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { ReferencesController } from 'vs/editor/contrib/gotoSymbol/browser/peek/referencesController'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService } from 'vs/platform/storage/common/storage'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { ReferencesController } from '../../../contrib/gotoSymbol/browser/peek/referencesController.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; export class StandaloneReferencesController extends ReferencesController { diff --git a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts index 3ccfa128d..2b7abea38 100644 --- a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts @@ -3,45 +3,45 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as aria from 'vs/base/browser/ui/aria/aria'; -import { Disposable, IDisposable, toDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor, IDiffEditor, IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { IDiffEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { InternalEditorAction } from 'vs/editor/common/editorAction'; -import { IModelChangedEvent } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { StandaloneKeybindingService, updateConfigurationService } from 'vs/editor/standalone/browser/standaloneServices'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { IMenuItem, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry, ICommandHandler, ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr, ContextKeyValue, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { StandaloneCodeEditorNLS } from 'vs/editor/common/standaloneStrings'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { StandaloneThemeService } from 'vs/editor/standalone/browser/standaloneThemeService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageSelection, ILanguageService } from 'vs/editor/common/languages/language'; -import { URI } from 'vs/base/common/uri'; -import { StandaloneCodeEditorService } from 'vs/editor/standalone/browser/standaloneCodeEditorService'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; -import { IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { mainWindow } from 'vs/base/browser/window'; -import { setHoverDelegateFactory } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import { IHoverService, WorkbenchHoverDelegate } from 'vs/platform/hover/browser/hover'; -import { setBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2'; +import * as aria from '../../../base/browser/ui/aria/aria.js'; +import { Disposable, IDisposable, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { ICodeEditor, IDiffEditor, IDiffEditorConstructionOptions } from '../../browser/editorBrowser.js'; +import { ICodeEditorService } from '../../browser/services/codeEditorService.js'; +import { CodeEditorWidget } from '../../browser/widget/codeEditor/codeEditorWidget.js'; +import { IDiffEditorOptions, IEditorOptions } from '../../common/config/editorOptions.js'; +import { InternalEditorAction } from '../../common/editorAction.js'; +import { IModelChangedEvent } from '../../common/editorCommon.js'; +import { ITextModel } from '../../common/model.js'; +import { StandaloneKeybindingService, updateConfigurationService } from './standaloneServices.js'; +import { IStandaloneThemeService } from '../common/standaloneTheme.js'; +import { IMenuItem, MenuId, MenuRegistry } from '../../../platform/actions/common/actions.js'; +import { CommandsRegistry, ICommandHandler, ICommandService } from '../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr, ContextKeyValue, IContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService, ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js'; +import { StandaloneCodeEditorNLS } from '../../common/standaloneStrings.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; +import { IEditorProgressService } from '../../../platform/progress/common/progress.js'; +import { StandaloneThemeService } from './standaloneThemeService.js'; +import { IModelService } from '../../common/services/model.js'; +import { ILanguageSelection, ILanguageService } from '../../common/languages/language.js'; +import { URI } from '../../../base/common/uri.js'; +import { StandaloneCodeEditorService } from './standaloneCodeEditorService.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../common/languages/modesRegistry.js'; +import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js'; +import { IEditorConstructionOptions } from '../../browser/config/editorConfiguration.js'; +import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js'; +import { DiffEditorWidget } from '../../browser/widget/diffEditor/diffEditorWidget.js'; +import { IAccessibilitySignalService } from '../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { setHoverDelegateFactory } from '../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import { IHoverService, WorkbenchHoverDelegate } from '../../../platform/hover/browser/hover.js'; +import { setBaseLayerHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate2.js'; /** * Description of an action contribution diff --git a/src/vs/editor/standalone/browser/standaloneCodeEditorService.ts b/src/vs/editor/standalone/browser/standaloneCodeEditorService.ts index fff134d49..700140df3 100644 --- a/src/vs/editor/standalone/browser/standaloneCodeEditorService.ts +++ b/src/vs/editor/standalone/browser/standaloneCodeEditorService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { windowOpenNoOpener } from 'vs/base/browser/dom'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { AbstractCodeEditorService } from 'vs/editor/browser/services/abstractCodeEditorService'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IRange } from 'vs/editor/common/core/range'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ITextResourceEditorInput } from 'vs/platform/editor/common/editor'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { windowOpenNoOpener } from '../../../base/browser/dom.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { ICodeEditor } from '../../browser/editorBrowser.js'; +import { AbstractCodeEditorService } from '../../browser/services/abstractCodeEditorService.js'; +import { ICodeEditorService } from '../../browser/services/codeEditorService.js'; +import { IRange } from '../../common/core/range.js'; +import { ScrollType } from '../../common/editorCommon.js'; +import { ITextModel } from '../../common/model.js'; +import { IContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; +import { ITextResourceEditorInput } from '../../../platform/editor/common/editor.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; export class StandaloneCodeEditorService extends AbstractCodeEditorService { diff --git a/src/vs/editor/standalone/browser/standaloneEditor.ts b/src/vs/editor/standalone/browser/standaloneEditor.ts index fbfe4e18b..92df7c57a 100644 --- a/src/vs/editor/standalone/browser/standaloneEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneEditor.ts @@ -3,42 +3,42 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { mainWindow } from 'vs/base/browser/window'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { splitLines } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./standalone-tokens'; -import { FontMeasurements } from 'vs/editor/browser/config/fontMeasurements'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IWebWorkerOptions, MonacoWebWorker, createWebWorker as actualCreateWebWorker } from 'vs/editor/standalone/browser/standaloneWebWorker'; -import { ApplyUpdateResult, ConfigurationChangedEvent, EditorOptions } from 'vs/editor/common/config/editorOptions'; -import { EditorZoom } from 'vs/editor/common/config/editorZoom'; -import { BareFontInfo, FontInfo } from 'vs/editor/common/config/fontInfo'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { EditorType, IDiffEditor } from 'vs/editor/common/editorCommon'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { NullState, nullTokenize } from 'vs/editor/common/languages/nullTokenize'; -import { FindMatch, ITextModel, TextModelResolvedOptions } from 'vs/editor/common/model'; -import { IModelService } from 'vs/editor/common/services/model'; -import * as standaloneEnums from 'vs/editor/common/standalone/standaloneEnums'; -import { Colorizer, IColorizerElementOptions, IColorizerOptions } from 'vs/editor/standalone/browser/colorizer'; -import { IActionDescriptor, IStandaloneCodeEditor, IStandaloneDiffEditor, IStandaloneDiffEditorConstructionOptions, IStandaloneEditorConstructionOptions, StandaloneDiffEditor2, StandaloneEditor, createTextModel } from 'vs/editor/standalone/browser/standaloneCodeEditor'; -import { IEditorOverrideServices, StandaloneKeybindingService, StandaloneServices } from 'vs/editor/standalone/browser/standaloneServices'; -import { StandaloneThemeService } from 'vs/editor/standalone/browser/standaloneThemeService'; -import { IStandaloneThemeData, IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { IMenuItem, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ITextResourceEditorInput } from 'vs/platform/editor/common/editor'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IMarker, IMarkerData, IMarkerService } from 'vs/platform/markers/common/markers'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { MultiDiffEditorWidget } from 'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget'; +import { mainWindow } from '../../../base/browser/window.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { splitLines } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import './standalone-tokens.css'; +import { FontMeasurements } from '../../browser/config/fontMeasurements.js'; +import { ICodeEditor } from '../../browser/editorBrowser.js'; +import { EditorCommand, ServicesAccessor } from '../../browser/editorExtensions.js'; +import { ICodeEditorService } from '../../browser/services/codeEditorService.js'; +import { IWebWorkerOptions, MonacoWebWorker, createWebWorker as actualCreateWebWorker } from './standaloneWebWorker.js'; +import { ApplyUpdateResult, ConfigurationChangedEvent, EditorOptions } from '../../common/config/editorOptions.js'; +import { EditorZoom } from '../../common/config/editorZoom.js'; +import { BareFontInfo, FontInfo } from '../../common/config/fontInfo.js'; +import { IPosition } from '../../common/core/position.js'; +import { IRange } from '../../common/core/range.js'; +import { EditorType, IDiffEditor } from '../../common/editorCommon.js'; +import * as languages from '../../common/languages.js'; +import { ILanguageService } from '../../common/languages/language.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../common/languages/modesRegistry.js'; +import { NullState, nullTokenize } from '../../common/languages/nullTokenize.js'; +import { FindMatch, ITextModel, TextModelResolvedOptions } from '../../common/model.js'; +import { IModelService } from '../../common/services/model.js'; +import * as standaloneEnums from '../../common/standalone/standaloneEnums.js'; +import { Colorizer, IColorizerElementOptions, IColorizerOptions } from './colorizer.js'; +import { IActionDescriptor, IStandaloneCodeEditor, IStandaloneDiffEditor, IStandaloneDiffEditorConstructionOptions, IStandaloneEditorConstructionOptions, StandaloneDiffEditor2, StandaloneEditor, createTextModel } from './standaloneCodeEditor.js'; +import { IEditorOverrideServices, StandaloneKeybindingService, StandaloneServices } from './standaloneServices.js'; +import { StandaloneThemeService } from './standaloneThemeService.js'; +import { IStandaloneThemeData, IStandaloneThemeService } from '../common/standaloneTheme.js'; +import { IMenuItem, MenuId, MenuRegistry } from '../../../platform/actions/common/actions.js'; +import { CommandsRegistry, ICommandHandler } from '../../../platform/commands/common/commands.js'; +import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { ITextResourceEditorInput } from '../../../platform/editor/common/editor.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { IMarker, IMarkerData, IMarkerService } from '../../../platform/markers/common/markers.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { MultiDiffEditorWidget } from '../../browser/widget/multiDiffEditor/multiDiffEditorWidget.js'; /** * Create a new editor under `domElement`. diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index c91190d43..849e4dc42 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Color } from 'vs/base/common/color'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageExtensionPoint, ILanguageService } from 'vs/editor/common/languages/language'; -import { LanguageConfiguration } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ModesRegistry } from 'vs/editor/common/languages/modesRegistry'; -import { LanguageSelector } from 'vs/editor/common/languageSelector'; -import * as model from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import * as standaloneEnums from 'vs/editor/common/standalone/standaloneEnums'; -import { StandaloneServices } from 'vs/editor/standalone/browser/standaloneServices'; -import { compile } from 'vs/editor/standalone/common/monarch/monarchCompile'; -import { MonarchTokenizer } from 'vs/editor/standalone/common/monarch/monarchLexer'; -import { IMonarchLanguage } from 'vs/editor/standalone/common/monarch/monarchTypes'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IMarkerData, IMarkerService } from 'vs/platform/markers/common/markers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Color } from '../../../base/common/color.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Position } from '../../common/core/position.js'; +import { Range } from '../../common/core/range.js'; +import { MetadataConsts } from '../../common/encodedTokenAttributes.js'; +import * as languages from '../../common/languages.js'; +import { ILanguageExtensionPoint, ILanguageService } from '../../common/languages/language.js'; +import { LanguageConfiguration } from '../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js'; +import { ModesRegistry } from '../../common/languages/modesRegistry.js'; +import { LanguageSelector } from '../../common/languageSelector.js'; +import * as model from '../../common/model.js'; +import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js'; +import * as standaloneEnums from '../../common/standalone/standaloneEnums.js'; +import { StandaloneServices } from './standaloneServices.js'; +import { compile } from '../common/monarch/monarchCompile.js'; +import { MonarchTokenizer } from '../common/monarch/monarchLexer.js'; +import { IMonarchLanguage } from '../common/monarch/monarchTypes.js'; +import { IStandaloneThemeService } from '../common/standaloneTheme.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { IMarkerData, IMarkerService } from '../../../platform/markers/common/markers.js'; /** * Register information about a new language. diff --git a/src/vs/editor/standalone/browser/standaloneLayoutService.ts b/src/vs/editor/standalone/browser/standaloneLayoutService.ts index 8b55de680..18ec806b1 100644 --- a/src/vs/editor/standalone/browser/standaloneLayoutService.ts +++ b/src/vs/editor/standalone/browser/standaloneLayoutService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { mainWindow } from 'vs/base/browser/window'; -import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; -import { Event } from 'vs/base/common/event'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { ILayoutOffsetInfo, ILayoutService } from 'vs/platform/layout/browser/layoutService'; +import * as dom from '../../../base/browser/dom.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { coalesce } from '../../../base/common/arrays.js'; +import { Event } from '../../../base/common/event.js'; +import { ICodeEditorService } from '../../browser/services/codeEditorService.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { ILayoutOffsetInfo, ILayoutService } from '../../../platform/layout/browser/layoutService.js'; class StandaloneLayoutService implements ILayoutService { declare readonly _serviceBrand: undefined; @@ -21,7 +21,7 @@ class StandaloneLayoutService implements ILayoutService { readonly onDidAddContainer = Event.None; get mainContainer(): HTMLElement { - return firstOrDefault(this._codeEditorService.listCodeEditors())?.getContainerDomNode() ?? mainWindow.document.body; + return this._codeEditorService.listCodeEditors().at(0)?.getContainerDomNode() ?? mainWindow.document.body; } get activeContainer(): HTMLElement { diff --git a/src/vs/editor/standalone/browser/standaloneServices.ts b/src/vs/editor/standalone/browser/standaloneServices.ts index e4f06ac45..085ca6352 100644 --- a/src/vs/editor/standalone/browser/standaloneServices.ts +++ b/src/vs/editor/standalone/browser/standaloneServices.ts @@ -3,102 +3,102 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/editor/standalone/browser/standaloneCodeEditorService'; -import 'vs/editor/standalone/browser/standaloneLayoutService'; -import 'vs/platform/undoRedo/common/undoRedoService'; -import 'vs/editor/common/services/languageFeatureDebounce'; -import 'vs/editor/common/services/semanticTokensStylingService'; -import 'vs/editor/common/services/languageFeaturesService'; -import 'vs/editor/browser/services/hoverService/hoverService'; - -import * as strings from 'vs/base/common/strings'; -import * as dom from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { Emitter, Event, IValueWithChangeEvent, ValueWithChangeEvent } from 'vs/base/common/event'; -import { ResolvedKeybinding, KeyCodeChord, Keybinding, decodeKeybinding } from 'vs/base/common/keybindings'; -import { IDisposable, IReference, ImmortalReference, toDisposable, DisposableStore, Disposable, combinedDisposable } from 'vs/base/common/lifecycle'; -import { OS, isLinux, isMacintosh } from 'vs/base/common/platform'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import { IBulkEditOptions, IBulkEditResult, IBulkEditService, ResourceEdit, ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; -import { isDiffEditorConfigurationKey, isEditorConfigurationKey } from 'vs/editor/common/config/editorConfigurationSchema'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition, Position as Pos } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel, ITextSnapshot } from 'vs/editor/common/model'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IResolvedTextEditorModel, ITextModelContentProvider, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { ITextResourceConfigurationService, ITextResourcePropertiesService, ITextResourceConfigurationChangeEvent } from 'vs/editor/common/services/textResourceConfiguration'; -import { CommandsRegistry, ICommandEvent, ICommandHandler, ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationChangeEvent, IConfigurationData, IConfigurationOverrides, IConfigurationService, IConfigurationModel, IConfigurationValue, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; -import { Configuration, ConfigurationModel, ConfigurationChangeEvent } from 'vs/platform/configuration/common/configurationModels'; -import { IContextKeyService, ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; -import { IConfirmation, IConfirmationResult, IDialogService, IInputResult, IPrompt, IPromptResult, IPromptWithCustomCancel, IPromptResultWithCancel, IPromptWithDefaultCancel, IPromptBaseButton } from 'vs/platform/dialogs/common/dialogs'; -import { createDecorator, IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; -import { AbstractKeybindingService } from 'vs/platform/keybinding/common/abstractKeybindingService'; -import { IKeybindingService, IKeyboardEvent, KeybindingsSchemaContribution } from 'vs/platform/keybinding/common/keybinding'; -import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver'; -import { IKeybindingItem, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; -import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding'; -import { ILabelService, ResourceLabelFormatter, IFormatterChangeEvent, Verbosity } from 'vs/platform/label/common/label'; -import { INotification, INotificationHandle, INotificationService, IPromptChoice, IPromptOptions, NoOpNotification, IStatusMessageOptions, INotificationSource, INotificationSourceFilter, NotificationsFilter } from 'vs/platform/notification/common/notification'; -import { IProgressRunner, IEditorProgressService, IProgressService, IProgress, IProgressCompositeOptions, IProgressDialogOptions, IProgressNotificationOptions, IProgressOptions, IProgressStep, IProgressWindowOptions } from 'vs/platform/progress/common/progress'; -import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, IWorkspace, IWorkspaceContextService, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, IWorkspaceFoldersWillChangeEvent, WorkbenchState, WorkspaceFolder, STANDALONE_EDITOR_WORKSPACE_ID } from 'vs/platform/workspace/common/workspace'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { StandaloneServicesNLS } from 'vs/editor/common/standaloneStrings'; -import { basename } from 'vs/base/common/resources'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { ConsoleLogger, ILogService } from 'vs/platform/log/common/log'; -import { IWorkspaceTrustManagementService, IWorkspaceTrustTransitionParticipant, IWorkspaceTrustUriInfo } from 'vs/platform/workspace/common/workspaceTrust'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { IContextMenuService, IContextViewDelegate, IContextViewService, IOpenContextView } from 'vs/platform/contextview/browser/contextView'; -import { ContextViewService } from 'vs/platform/contextview/browser/contextViewService'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService'; -import { getSingletonServiceDescriptors, InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { OpenerService } from 'vs/editor/browser/services/openerService'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { EditorWorkerService } from 'vs/editor/browser/services/editorWorkerService'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { MarkerDecorationsService } from 'vs/editor/common/services/markerDecorationsService'; -import { IMarkerDecorationsService } from 'vs/editor/common/services/markerDecorations'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { StandaloneQuickInputService } from 'vs/editor/standalone/browser/quickInput/standaloneQuickInputService'; -import { StandaloneThemeService } from 'vs/editor/standalone/browser/standaloneThemeService'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { AccessibilityService } from 'vs/platform/accessibility/browser/accessibilityService'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { IMenuService } from 'vs/platform/actions/common/actions'; -import { MenuService } from 'vs/platform/actions/common/menuService'; -import { BrowserClipboardService } from 'vs/platform/clipboard/browser/clipboardService'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IListService, ListService } from 'vs/platform/list/browser/listService'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { MarkerService } from 'vs/platform/markers/common/markerService'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage'; -import { DefaultConfiguration } from 'vs/platform/configuration/common/configurations'; -import { WorkspaceEdit } from 'vs/editor/common/languages'; -import { AccessibilitySignal, AccessibilityModality, IAccessibilitySignalService, Sound } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { LogService } from 'vs/platform/log/common/logService'; -import { getEditorFeatures } from 'vs/editor/common/editorFeatures'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { ExtensionKind, IEnvironmentService, IExtensionHostDebugParams } from 'vs/platform/environment/common/environment'; -import { mainWindow } from 'vs/base/browser/window'; -import { ResourceMap } from 'vs/base/common/map'; -import { ITreeSitterParserService } from 'vs/editor/common/services/treeSitterParserService'; -import { StandaloneTreeSitterParserService } from 'vs/editor/standalone/browser/standaloneTreeSitterService'; -import { IWorkerDescriptor } from 'vs/base/common/worker/simpleWorker'; +import './standaloneCodeEditorService.js'; +import './standaloneLayoutService.js'; +import '../../../platform/undoRedo/common/undoRedoService.js'; +import '../../common/services/languageFeatureDebounce.js'; +import '../../common/services/semanticTokensStylingService.js'; +import '../../common/services/languageFeaturesService.js'; +import '../../browser/services/hoverService/hoverService.js'; + +import * as strings from '../../../base/common/strings.js'; +import * as dom from '../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { Emitter, Event, IValueWithChangeEvent, ValueWithChangeEvent } from '../../../base/common/event.js'; +import { ResolvedKeybinding, KeyCodeChord, Keybinding, decodeKeybinding } from '../../../base/common/keybindings.js'; +import { IDisposable, IReference, ImmortalReference, toDisposable, DisposableStore, Disposable, combinedDisposable } from '../../../base/common/lifecycle.js'; +import { OS, isLinux, isMacintosh } from '../../../base/common/platform.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import { IBulkEditOptions, IBulkEditResult, IBulkEditService, ResourceEdit, ResourceTextEdit } from '../../browser/services/bulkEditService.js'; +import { isDiffEditorConfigurationKey, isEditorConfigurationKey } from '../../common/config/editorConfigurationSchema.js'; +import { EditOperation, ISingleEditOperation } from '../../common/core/editOperation.js'; +import { IPosition, Position as Pos } from '../../common/core/position.js'; +import { Range } from '../../common/core/range.js'; +import { ITextModel, ITextSnapshot } from '../../common/model.js'; +import { IModelService } from '../../common/services/model.js'; +import { IResolvedTextEditorModel, ITextModelContentProvider, ITextModelService } from '../../common/services/resolverService.js'; +import { ITextResourceConfigurationService, ITextResourcePropertiesService, ITextResourceConfigurationChangeEvent } from '../../common/services/textResourceConfiguration.js'; +import { CommandsRegistry, ICommandEvent, ICommandHandler, ICommandService } from '../../../platform/commands/common/commands.js'; +import { IConfigurationChangeEvent, IConfigurationData, IConfigurationOverrides, IConfigurationService, IConfigurationModel, IConfigurationValue, ConfigurationTarget } from '../../../platform/configuration/common/configuration.js'; +import { Configuration, ConfigurationModel, ConfigurationChangeEvent } from '../../../platform/configuration/common/configurationModels.js'; +import { IContextKeyService, ContextKeyExpression } from '../../../platform/contextkey/common/contextkey.js'; +import { IConfirmation, IConfirmationResult, IDialogService, IInputResult, IPrompt, IPromptResult, IPromptWithCustomCancel, IPromptResultWithCancel, IPromptWithDefaultCancel, IPromptBaseButton } from '../../../platform/dialogs/common/dialogs.js'; +import { createDecorator, IInstantiationService, ServiceIdentifier } from '../../../platform/instantiation/common/instantiation.js'; +import { AbstractKeybindingService } from '../../../platform/keybinding/common/abstractKeybindingService.js'; +import { IKeybindingService, IKeyboardEvent, KeybindingsSchemaContribution } from '../../../platform/keybinding/common/keybinding.js'; +import { KeybindingResolver } from '../../../platform/keybinding/common/keybindingResolver.js'; +import { IKeybindingItem, KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ResolvedKeybindingItem } from '../../../platform/keybinding/common/resolvedKeybindingItem.js'; +import { USLayoutResolvedKeybinding } from '../../../platform/keybinding/common/usLayoutResolvedKeybinding.js'; +import { ILabelService, ResourceLabelFormatter, IFormatterChangeEvent, Verbosity } from '../../../platform/label/common/label.js'; +import { INotification, INotificationHandle, INotificationService, IPromptChoice, IPromptOptions, NoOpNotification, IStatusMessageOptions, INotificationSource, INotificationSourceFilter, NotificationsFilter } from '../../../platform/notification/common/notification.js'; +import { IProgressRunner, IEditorProgressService, IProgressService, IProgress, IProgressCompositeOptions, IProgressDialogOptions, IProgressNotificationOptions, IProgressOptions, IProgressStep, IProgressWindowOptions } from '../../../platform/progress/common/progress.js'; +import { ITelemetryService, TelemetryLevel } from '../../../platform/telemetry/common/telemetry.js'; +import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, IWorkspace, IWorkspaceContextService, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, IWorkspaceFoldersWillChangeEvent, WorkbenchState, WorkspaceFolder, STANDALONE_EDITOR_WORKSPACE_ID } from '../../../platform/workspace/common/workspace.js'; +import { ILayoutService } from '../../../platform/layout/browser/layoutService.js'; +import { StandaloneServicesNLS } from '../../common/standaloneStrings.js'; +import { basename } from '../../../base/common/resources.js'; +import { ICodeEditorService } from '../../browser/services/codeEditorService.js'; +import { ConsoleLogger, ILogService } from '../../../platform/log/common/log.js'; +import { IWorkspaceTrustManagementService, IWorkspaceTrustTransitionParticipant, IWorkspaceTrustUriInfo } from '../../../platform/workspace/common/workspaceTrust.js'; +import { EditorOption } from '../../common/config/editorOptions.js'; +import { ICodeEditor, IDiffEditor } from '../../browser/editorBrowser.js'; +import { IContextMenuService, IContextViewDelegate, IContextViewService, IOpenContextView } from '../../../platform/contextview/browser/contextView.js'; +import { ContextViewService } from '../../../platform/contextview/browser/contextViewService.js'; +import { LanguageService } from '../../common/services/languageService.js'; +import { ContextMenuService } from '../../../platform/contextview/browser/contextMenuService.js'; +import { getSingletonServiceDescriptors, InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { OpenerService } from '../../browser/services/openerService.js'; +import { IEditorWorkerService } from '../../common/services/editorWorker.js'; +import { EditorWorkerService } from '../../browser/services/editorWorkerService.js'; +import { ILanguageService } from '../../common/languages/language.js'; +import { MarkerDecorationsService } from '../../common/services/markerDecorationsService.js'; +import { IMarkerDecorationsService } from '../../common/services/markerDecorations.js'; +import { ModelService } from '../../common/services/modelService.js'; +import { StandaloneQuickInputService } from './quickInput/standaloneQuickInputService.js'; +import { StandaloneThemeService } from './standaloneThemeService.js'; +import { IStandaloneThemeService } from '../common/standaloneTheme.js'; +import { AccessibilityService } from '../../../platform/accessibility/browser/accessibilityService.js'; +import { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js'; +import { IMenuService } from '../../../platform/actions/common/actions.js'; +import { MenuService } from '../../../platform/actions/common/menuService.js'; +import { BrowserClipboardService } from '../../../platform/clipboard/browser/clipboardService.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; +import { ContextKeyService } from '../../../platform/contextkey/browser/contextKeyService.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { InstantiationService } from '../../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { IListService, ListService } from '../../../platform/list/browser/listService.js'; +import { IMarkerService } from '../../../platform/markers/common/markers.js'; +import { MarkerService } from '../../../platform/markers/common/markerService.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { IQuickInputService } from '../../../platform/quickinput/common/quickInput.js'; +import { IStorageService, InMemoryStorageService } from '../../../platform/storage/common/storage.js'; +import { DefaultConfiguration } from '../../../platform/configuration/common/configurations.js'; +import { WorkspaceEdit } from '../../common/languages.js'; +import { AccessibilitySignal, AccessibilityModality, IAccessibilitySignalService, Sound } from '../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js'; +import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js'; +import { LogService } from '../../../platform/log/common/logService.js'; +import { getEditorFeatures } from '../../common/editorFeatures.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { ExtensionKind, IEnvironmentService, IExtensionHostDebugParams } from '../../../platform/environment/common/environment.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { ITreeSitterParserService } from '../../common/services/treeSitterParserService.js'; +import { StandaloneTreeSitterParserService } from './standaloneTreeSitterService.js'; +import { IWorkerDescriptor } from '../../../base/common/worker/simpleWorker.js'; class SimpleModel implements IResolvedTextEditorModel { diff --git a/src/vs/editor/standalone/browser/standaloneThemeService.ts b/src/vs/editor/standalone/browser/standaloneThemeService.ts index 959ca9048..eb2470683 100644 --- a/src/vs/editor/standalone/browser/standaloneThemeService.ts +++ b/src/vs/editor/standalone/browser/standaloneThemeService.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { addMatchMediaChangeListener } from 'vs/base/browser/browser'; -import { Color } from 'vs/base/common/color'; -import { Emitter } from 'vs/base/common/event'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { FontStyle, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; -import { ITokenThemeRule, TokenTheme, generateTokensCSSForColorMap } from 'vs/editor/common/languages/supports/tokenization'; -import { BuiltinTheme, IStandaloneTheme, IStandaloneThemeData, IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { hc_black, hc_light, vs, vs_dark } from 'vs/editor/standalone/common/themes'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { asCssVariableName, ColorIdentifier, Extensions, IColorRegistry } from 'vs/platform/theme/common/colorRegistry'; -import { Extensions as ThemingExtensions, ICssStyleCollector, IFileIconTheme, IProductIconTheme, IThemingRegistry, ITokenStyle } from 'vs/platform/theme/common/themeService'; -import { IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { ColorScheme, isDark, isHighContrast } from 'vs/platform/theme/common/theme'; -import { getIconsStyleSheet, UnthemedProductIconTheme } from 'vs/platform/theme/browser/iconsStyleSheet'; -import { mainWindow } from 'vs/base/browser/window'; +import * as dom from '../../../base/browser/dom.js'; +import { addMatchMediaChangeListener } from '../../../base/browser/browser.js'; +import { Color } from '../../../base/common/color.js'; +import { Emitter } from '../../../base/common/event.js'; +import { TokenizationRegistry } from '../../common/languages.js'; +import { FontStyle, TokenMetadata } from '../../common/encodedTokenAttributes.js'; +import { ITokenThemeRule, TokenTheme, generateTokensCSSForColorMap } from '../../common/languages/supports/tokenization.js'; +import { BuiltinTheme, IStandaloneTheme, IStandaloneThemeData, IStandaloneThemeService } from '../common/standaloneTheme.js'; +import { hc_black, hc_light, vs, vs_dark } from '../common/themes.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { asCssVariableName, ColorIdentifier, Extensions, IColorRegistry } from '../../../platform/theme/common/colorRegistry.js'; +import { Extensions as ThemingExtensions, ICssStyleCollector, IFileIconTheme, IProductIconTheme, IThemingRegistry, ITokenStyle } from '../../../platform/theme/common/themeService.js'; +import { IDisposable, Disposable } from '../../../base/common/lifecycle.js'; +import { ColorScheme, isDark, isHighContrast } from '../../../platform/theme/common/theme.js'; +import { getIconsStyleSheet, UnthemedProductIconTheme } from '../../../platform/theme/browser/iconsStyleSheet.js'; +import { mainWindow } from '../../../base/browser/window.js'; export const VS_LIGHT_THEME_NAME = 'vs'; export const VS_DARK_THEME_NAME = 'vs-dark'; diff --git a/src/vs/editor/standalone/browser/standaloneTreeSitterService.ts b/src/vs/editor/standalone/browser/standaloneTreeSitterService.ts index 153a9b887..b2bb183fc 100644 --- a/src/vs/editor/standalone/browser/standaloneTreeSitterService.ts +++ b/src/vs/editor/standalone/browser/standaloneTreeSitterService.ts @@ -3,17 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// eslint-disable-next-line local/code-import-patterns import type { Parser } from '@vscode/tree-sitter-wasm'; -import { Event } from 'vs/base/common/event'; -import { ITextModel } from 'vs/editor/common/model'; -import { ITreeSitterParseResult, ITreeSitterParserService } from 'vs/editor/common/services/treeSitterParserService'; +import { Event } from '../../../base/common/event.js'; +import { ITextModel } from '../../common/model.js'; +import { ITreeSitterParseResult, ITreeSitterParserService } from '../../common/services/treeSitterParserService.js'; +import { Range } from '../../common/core/range.js'; /** * The monaco build doesn't like the dynamic import of tree sitter in the real service. * We use a dummy sertive here to make the build happy. */ export class StandaloneTreeSitterParserService implements ITreeSitterParserService { + onDidUpdateTree: Event<{ textModel: ITextModel; ranges: Range[] }> = Event.None; readonly _serviceBrand: undefined; onDidAddLanguage: Event<{ id: string; language: Parser.Language }> = Event.None; diff --git a/src/vs/editor/standalone/browser/standaloneWebWorker.ts b/src/vs/editor/standalone/browser/standaloneWebWorker.ts index 74b1de918..22d073a48 100644 --- a/src/vs/editor/standalone/browser/standaloneWebWorker.ts +++ b/src/vs/editor/standalone/browser/standaloneWebWorker.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getAllMethodNames } from 'vs/base/common/objects'; -import { URI } from 'vs/base/common/uri'; -import { IWorkerDescriptor } from 'vs/base/common/worker/simpleWorker'; -import { EditorWorkerClient } from 'vs/editor/browser/services/editorWorkerService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { standaloneEditorWorkerDescriptor } from 'vs/editor/standalone/browser/standaloneServices'; +import { getAllMethodNames } from '../../../base/common/objects.js'; +import { URI } from '../../../base/common/uri.js'; +import { IWorkerDescriptor } from '../../../base/common/worker/simpleWorker.js'; +import { EditorWorkerClient } from '../../browser/services/editorWorkerService.js'; +import { IModelService } from '../../common/services/model.js'; +import { standaloneEditorWorkerDescriptor } from './standaloneServices.js'; /** * Create a new web worker that has model syncing capabilities built in. diff --git a/src/vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.ts b/src/vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.ts index 4fe1552eb..a824d4b61 100644 --- a/src/vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.ts +++ b/src/vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { ToggleHighContrastNLS } from 'vs/editor/common/standaloneStrings'; -import { isDark, isHighContrast } from 'vs/platform/theme/common/theme'; -import { HC_BLACK_THEME_NAME, HC_LIGHT_THEME_NAME, VS_DARK_THEME_NAME, VS_LIGHT_THEME_NAME } from 'vs/editor/standalone/browser/standaloneThemeService'; +import { ICodeEditor } from '../../../browser/editorBrowser.js'; +import { EditorAction, ServicesAccessor, registerEditorAction } from '../../../browser/editorExtensions.js'; +import { IStandaloneThemeService } from '../../common/standaloneTheme.js'; +import { ToggleHighContrastNLS } from '../../../common/standaloneStrings.js'; +import { isDark, isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { HC_BLACK_THEME_NAME, HC_LIGHT_THEME_NAME, VS_DARK_THEME_NAME, VS_LIGHT_THEME_NAME } from '../standaloneThemeService.js'; class ToggleHighContrast extends EditorAction { diff --git a/src/vs/editor/standalone/common/monarch/monarchCompile.ts b/src/vs/editor/standalone/common/monarch/monarchCompile.ts index 599c89a02..8f3e2bef6 100644 --- a/src/vs/editor/standalone/common/monarch/monarchCompile.ts +++ b/src/vs/editor/standalone/common/monarch/monarchCompile.ts @@ -8,8 +8,8 @@ * into a typed and checked ILexer definition. */ -import * as monarchCommon from 'vs/editor/standalone/common/monarch/monarchCommon'; -import { IMonarchLanguage, IMonarchLanguageBracket } from 'vs/editor/standalone/common/monarch/monarchTypes'; +import * as monarchCommon from './monarchCommon.js'; +import { IMonarchLanguage, IMonarchLanguageBracket } from './monarchTypes.js'; /* * Type helpers diff --git a/src/vs/editor/standalone/common/monarch/monarchLexer.ts b/src/vs/editor/standalone/common/monarch/monarchLexer.ts index d1d2c2c1f..b48d54598 100644 --- a/src/vs/editor/standalone/common/monarch/monarchLexer.ts +++ b/src/vs/editor/standalone/common/monarch/monarchLexer.ts @@ -8,15 +8,15 @@ * using regular expressions. */ -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import * as languages from 'vs/editor/common/languages'; -import { NullState, nullTokenizeEncoded, nullTokenize } from 'vs/editor/common/languages/nullTokenize'; -import { TokenTheme } from 'vs/editor/common/languages/supports/tokenization'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import * as monarchCommon from 'vs/editor/standalone/common/monarch/monarchCommon'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { LanguageId, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import * as languages from '../../../common/languages.js'; +import { NullState, nullTokenizeEncoded, nullTokenize } from '../../../common/languages/nullTokenize.js'; +import { TokenTheme } from '../../../common/languages/supports/tokenization.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import * as monarchCommon from './monarchCommon.js'; +import { IStandaloneThemeService } from '../standaloneTheme.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { LanguageId, MetadataConsts } from '../../../common/encodedTokenAttributes.js'; const CACHE_STACK_DEPTH = 5; diff --git a/src/vs/editor/standalone/common/standaloneTheme.ts b/src/vs/editor/standalone/common/standaloneTheme.ts index 44ed8d14c..717b0de4f 100644 --- a/src/vs/editor/standalone/common/standaloneTheme.ts +++ b/src/vs/editor/standalone/common/standaloneTheme.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color } from 'vs/base/common/color'; -import { ITokenThemeRule, TokenTheme } from 'vs/editor/common/languages/supports/tokenization'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; +import { Color } from '../../../base/common/color.js'; +import { ITokenThemeRule, TokenTheme } from '../../common/languages/supports/tokenization.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IColorTheme, IThemeService } from '../../../platform/theme/common/themeService.js'; export const IStandaloneThemeService = createDecorator('themeService'); diff --git a/src/vs/editor/standalone/common/themes.ts b/src/vs/editor/standalone/common/themes.ts index e5f9b91bf..2e24698ec 100644 --- a/src/vs/editor/standalone/common/themes.ts +++ b/src/vs/editor/standalone/common/themes.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { editorActiveIndentGuide1, editorIndentGuide1 } from 'vs/editor/common/core/editorColorRegistry'; -import { IStandaloneThemeData } from 'vs/editor/standalone/common/standaloneTheme'; -import { editorBackground, editorForeground, editorInactiveSelection, editorSelectionHighlight } from 'vs/platform/theme/common/colorRegistry'; +import { editorActiveIndentGuide1, editorIndentGuide1 } from '../../common/core/editorColorRegistry.js'; +import { IStandaloneThemeData } from './standaloneTheme.js'; +import { editorBackground, editorForeground, editorInactiveSelection, editorSelectionHighlight } from '../../../platform/theme/common/colorRegistry.js'; /* -------------------------------- Begin vs theme -------------------------------- */ export const vs: IStandaloneThemeData = { diff --git a/src/vs/editor/standalone/test/browser/monarch.test.ts b/src/vs/editor/standalone/test/browser/monarch.test.ts index 7a1ba1d9d..f7048db8e 100644 --- a/src/vs/editor/standalone/test/browser/monarch.test.ts +++ b/src/vs/editor/standalone/test/browser/monarch.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Token, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { StandaloneConfigurationService } from 'vs/editor/standalone/browser/standaloneServices'; -import { compile } from 'vs/editor/standalone/common/monarch/monarchCompile'; -import { MonarchTokenizer } from 'vs/editor/standalone/common/monarch/monarchLexer'; -import { IMonarchLanguage } from 'vs/editor/standalone/common/monarch/monarchTypes'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Token, TokenizationRegistry } from '../../../common/languages.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { LanguageService } from '../../../common/services/languageService.js'; +import { StandaloneConfigurationService } from '../../browser/standaloneServices.js'; +import { compile } from '../../common/monarch/monarchCompile.js'; +import { MonarchTokenizer } from '../../common/monarch/monarchLexer.js'; +import { IMonarchLanguage } from '../../common/monarch/monarchTypes.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; suite('Monarch', () => { diff --git a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts index 745c00755..0fa82cf78 100644 --- a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts +++ b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Color } from 'vs/base/common/color'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LanguageId, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { IState, Token } from 'vs/editor/common/languages'; -import { TokenTheme } from 'vs/editor/common/languages/supports/tokenization'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { ILineTokens, IToken, TokenizationSupportAdapter, TokensProvider } from 'vs/editor/standalone/browser/standaloneLanguages'; -import { IStandaloneTheme, IStandaloneThemeData, IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -import { UnthemedProductIconTheme } from 'vs/platform/theme/browser/iconsStyleSheet'; -import { ColorIdentifier } from 'vs/platform/theme/common/colorRegistry'; -import { ColorScheme } from 'vs/platform/theme/common/theme'; -import { IColorTheme, IFileIconTheme, IProductIconTheme, ITokenStyle } from 'vs/platform/theme/common/themeService'; +import { Color } from '../../../../base/common/color.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { LanguageId, MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { IState, Token } from '../../../common/languages.js'; +import { TokenTheme } from '../../../common/languages/supports/tokenization.js'; +import { LanguageService } from '../../../common/services/languageService.js'; +import { ILineTokens, IToken, TokenizationSupportAdapter, TokensProvider } from '../../browser/standaloneLanguages.js'; +import { IStandaloneTheme, IStandaloneThemeData, IStandaloneThemeService } from '../../common/standaloneTheme.js'; +import { UnthemedProductIconTheme } from '../../../../platform/theme/browser/iconsStyleSheet.js'; +import { ColorIdentifier } from '../../../../platform/theme/common/colorRegistry.js'; +import { ColorScheme } from '../../../../platform/theme/common/theme.js'; +import { IColorTheme, IFileIconTheme, IProductIconTheme, ITokenStyle } from '../../../../platform/theme/common/themeService.js'; suite('TokenizationSupport2Adapter', () => { diff --git a/src/vs/editor/standalone/test/browser/standaloneServices.test.ts b/src/vs/editor/standalone/test/browser/standaloneServices.test.ts index 649783848..666ddc2a6 100644 --- a/src/vs/editor/standalone/test/browser/standaloneServices.test.ts +++ b/src/vs/editor/standalone/test/browser/standaloneServices.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { StandaloneCodeEditorService } from 'vs/editor/standalone/browser/standaloneCodeEditorService'; -import { StandaloneCommandService, StandaloneConfigurationService, StandaloneKeybindingService, StandaloneNotificationService } from 'vs/editor/standalone/browser/standaloneServices'; -import { StandaloneThemeService } from 'vs/editor/standalone/browser/standaloneThemeService'; -import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { StandaloneCodeEditorService } from '../../browser/standaloneCodeEditorService.js'; +import { StandaloneCommandService, StandaloneConfigurationService, StandaloneKeybindingService, StandaloneNotificationService } from '../../browser/standaloneServices.js'; +import { StandaloneThemeService } from '../../browser/standaloneThemeService.js'; +import { ContextKeyService } from '../../../../platform/contextkey/browser/contextKeyService.js'; +import { InstantiationService } from '../../../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { IKeyboardEvent } from '../../../../platform/keybinding/common/keybinding.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { NullTelemetryService } from '../../../../platform/telemetry/common/telemetryUtils.js'; suite('StandaloneKeybindingService', () => { diff --git a/src/vs/editor/test/browser/commands/shiftCommand.test.ts b/src/vs/editor/test/browser/commands/shiftCommand.test.ts index 8d98e8036..9e78a5568 100644 --- a/src/vs/editor/test/browser/commands/shiftCommand.test.ts +++ b/src/vs/editor/test/browser/commands/shiftCommand.test.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { getEditOperation, testCommand } from 'vs/editor/test/browser/testCommand'; -import { javascriptOnEnterRules } from 'vs/editor/test/common/modes/supports/onEnterRules'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { withEditorModel } from 'vs/editor/test/common/testTextModel'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ShiftCommand } from '../../../common/commands/shiftCommand.js'; +import { EditorAutoIndentStrategy } from '../../../common/config/editorOptions.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { getEditOperation, testCommand } from '../testCommand.js'; +import { javascriptOnEnterRules } from '../../common/modes/supports/onEnterRules.js'; +import { TestLanguageConfigurationService } from '../../common/modes/testLanguageConfigurationService.js'; +import { withEditorModel } from '../../common/testTextModel.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; /** * Create single edit operation diff --git a/src/vs/editor/test/browser/commands/sideEditing.test.ts b/src/vs/editor/test/browser/commands/sideEditing.test.ts index fbd9a36c9..db35d5e1a 100644 --- a/src/vs/editor/test/browser/commands/sideEditing.test.ts +++ b/src/vs/editor/test/browser/commands/sideEditing.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { withTestCodeEditor } from '../testCodeEditor.js'; function testCommand(lines: string[], selections: Selection[], edits: ISingleEditOperation[], expectedLines: string[], expectedSelections: Selection[]): void { withTestCodeEditor(lines, {}, (editor, viewModel) => { diff --git a/src/vs/editor/test/browser/commands/trimTrailingWhitespaceCommand.test.ts b/src/vs/editor/test/browser/commands/trimTrailingWhitespaceCommand.test.ts index 15f9bb999..503dc55f8 100644 --- a/src/vs/editor/test/browser/commands/trimTrailingWhitespaceCommand.test.ts +++ b/src/vs/editor/test/browser/commands/trimTrailingWhitespaceCommand.test.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TrimTrailingWhitespaceCommand, trimTrailingWhitespace } from 'vs/editor/common/commands/trimTrailingWhitespaceCommand'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { MetadataConsts, StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { getEditOperation } from 'vs/editor/test/browser/testCommand'; -import { createModelServices, instantiateTextModel, withEditorModel } from 'vs/editor/test/common/testTextModel'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TrimTrailingWhitespaceCommand, trimTrailingWhitespace } from '../../../common/commands/trimTrailingWhitespaceCommand.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { MetadataConsts, StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, ITokenizationSupport, TokenizationRegistry } from '../../../common/languages.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { NullState } from '../../../common/languages/nullTokenize.js'; +import { getEditOperation } from '../testCommand.js'; +import { createModelServices, instantiateTextModel, withEditorModel } from '../../common/testTextModel.js'; /** * Create single edit operation diff --git a/src/vs/editor/test/browser/config/editorConfiguration.test.ts b/src/vs/editor/test/browser/config/editorConfiguration.test.ts index 911b73018..3dcf64631 100644 --- a/src/vs/editor/test/browser/config/editorConfiguration.test.ts +++ b/src/vs/editor/test/browser/config/editorConfiguration.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvConfiguration } from 'vs/editor/browser/config/editorConfiguration'; -import { migrateOptions } from 'vs/editor/browser/config/migrateOptions'; -import { ConfigurationChangedEvent, EditorOption, IEditorHoverOptions, IQuickSuggestionsOptions } from 'vs/editor/common/config/editorOptions'; -import { EditorZoom } from 'vs/editor/common/config/editorZoom'; -import { TestConfiguration } from 'vs/editor/test/browser/config/testConfiguration'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvConfiguration } from '../../../browser/config/editorConfiguration.js'; +import { migrateOptions } from '../../../browser/config/migrateOptions.js'; +import { ConfigurationChangedEvent, EditorOption, IEditorHoverOptions, IQuickSuggestionsOptions } from '../../../common/config/editorOptions.js'; +import { EditorZoom } from '../../../common/config/editorZoom.js'; +import { TestConfiguration } from './testConfiguration.js'; +import { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js'; suite('Common Editor Config', () => { diff --git a/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts b/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts index a2e3ace58..8966df17f 100644 --- a/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts +++ b/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ComputedEditorOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { EditorLayoutInfo, EditorLayoutInfoComputer, EditorMinimapOptions, EditorOption, EditorOptions, InternalEditorRenderLineNumbersOptions, InternalEditorScrollbarOptions, RenderLineNumbersType, RenderMinimap } from 'vs/editor/common/config/editorOptions'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ComputedEditorOptions } from '../../../browser/config/editorConfiguration.js'; +import { EditorLayoutInfo, EditorLayoutInfoComputer, EditorMinimapOptions, EditorOption, EditorOptions, InternalEditorRenderLineNumbersOptions, InternalEditorScrollbarOptions, RenderLineNumbersType, RenderMinimap } from '../../../common/config/editorOptions.js'; interface IEditorLayoutProviderOpts { readonly outerWidth: number; diff --git a/src/vs/editor/test/browser/config/testConfiguration.ts b/src/vs/editor/test/browser/config/testConfiguration.ts index 4a2e87e6d..3c1862c96 100644 --- a/src/vs/editor/test/browser/config/testConfiguration.ts +++ b/src/vs/editor/test/browser/config/testConfiguration.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EditorConfiguration, IEnvConfiguration } from 'vs/editor/browser/config/editorConfiguration'; -import { EditorFontLigatures, EditorFontVariations } from 'vs/editor/common/config/editorOptions'; -import { BareFontInfo, FontInfo } from 'vs/editor/common/config/fontInfo'; -import { TestCodeEditorCreationOptions } from 'vs/editor/test/browser/testCodeEditor'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService'; -import { MenuId } from 'vs/platform/actions/common/actions'; +import { EditorConfiguration, IEnvConfiguration } from '../../../browser/config/editorConfiguration.js'; +import { EditorFontLigatures, EditorFontVariations } from '../../../common/config/editorOptions.js'; +import { BareFontInfo, FontInfo } from '../../../common/config/fontInfo.js'; +import { TestCodeEditorCreationOptions } from '../testCodeEditor.js'; +import { AccessibilitySupport } from '../../../../platform/accessibility/common/accessibility.js'; +import { TestAccessibilityService } from '../../../../platform/accessibility/test/common/testAccessibilityService.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; export class TestConfiguration extends EditorConfiguration { diff --git a/src/vs/editor/test/browser/controller/cursor.integrationTest.ts b/src/vs/editor/test/browser/controller/cursor.integrationTest.ts index bd956a353..d39b24c36 100644 --- a/src/vs/editor/test/browser/controller/cursor.integrationTest.ts +++ b/src/vs/editor/test/browser/controller/cursor.integrationTest.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Selection } from 'vs/editor/common/core/selection'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { Selection } from '../../../common/core/selection.js'; +import { withTestCodeEditor } from '../testCodeEditor.js'; suite('Editor Controller', () => { diff --git a/src/vs/editor/test/browser/controller/cursor.test.ts b/src/vs/editor/test/browser/controller/cursor.test.ts index bb2abffb9..2eb1303c2 100644 --- a/src/vs/editor/test/browser/controller/cursor.test.ts +++ b/src/vs/editor/test/browser/controller/cursor.test.ts @@ -4,30 +4,30 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreEditingCommands, CoreNavigationCommands } from 'vs/editor/browser/coreCommands'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { MetadataConsts, StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IndentAction, IndentationRule } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { EndOfLinePreference, EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { OutgoingViewModelEventKind } from 'vs/editor/common/viewModelEventDispatcher'; -import { ITestCodeEditor, TestCodeEditorInstantiationOptions, createCodeEditorServices, instantiateTestCodeEditor, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { IRelaxedTextModelCreationOptions, createTextModel, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { CoreEditingCommands, CoreNavigationCommands } from '../../../browser/coreCommands.js'; +import { IEditorOptions } from '../../../common/config/editorOptions.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ICursorPositionChangedEvent } from '../../../common/cursorEvents.js'; +import { ICommand, ICursorStateComputerData, IEditOperationBuilder } from '../../../common/editorCommon.js'; +import { MetadataConsts, StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IState, ITokenizationSupport, TokenizationRegistry } from '../../../common/languages.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { IndentAction, IndentationRule } from '../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { NullState } from '../../../common/languages/nullTokenize.js'; +import { EndOfLinePreference, EndOfLineSequence, ITextModel } from '../../../common/model.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { ViewModel } from '../../../common/viewModel/viewModelImpl.js'; +import { OutgoingViewModelEventKind } from '../../../common/viewModelEventDispatcher.js'; +import { ITestCodeEditor, TestCodeEditorInstantiationOptions, createCodeEditorServices, instantiateTestCodeEditor, withTestCodeEditor } from '../testCodeEditor.js'; +import { IRelaxedTextModelCreationOptions, createTextModel, instantiateTextModel } from '../../common/testTextModel.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; // --------- utils diff --git a/src/vs/editor/test/browser/controller/cursorMoveCommand.test.ts b/src/vs/editor/test/browser/controller/cursorMoveCommand.test.ts index c4bee4b9f..511842715 100644 --- a/src/vs/editor/test/browser/controller/cursorMoveCommand.test.ts +++ b/src/vs/editor/test/browser/controller/cursorMoveCommand.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CoreNavigationCommands } from 'vs/editor/browser/coreCommands'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { CursorMove } from 'vs/editor/common/cursor/cursorMoveCommands'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { ITestCodeEditor, withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { CoreNavigationCommands } from '../../../browser/coreCommands.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { CursorMove } from '../../../common/cursor/cursorMoveCommands.js'; +import { ViewModel } from '../../../common/viewModel/viewModelImpl.js'; +import { ITestCodeEditor, withTestCodeEditor } from '../testCodeEditor.js'; suite('Cursor move command test', () => { diff --git a/src/vs/editor/test/browser/controller/imeRecordedTypes.ts b/src/vs/editor/test/browser/controller/imeRecordedTypes.ts index 70499b308..8777d4c43 100644 --- a/src/vs/editor/test/browser/controller/imeRecordedTypes.ts +++ b/src/vs/editor/test/browser/controller/imeRecordedTypes.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OperatingSystem } from 'vs/base/common/platform'; -import { IBrowser } from 'vs/editor/browser/controller/textAreaInput'; +import { OperatingSystem } from '../../../../base/common/platform.js'; +import { IBrowser } from '../../../browser/controller/editContext/textArea/textAreaEditContextInput.js'; export interface IRecordedTextareaState { selectionDirection: 'forward' | 'backward' | 'none'; diff --git a/src/vs/editor/test/browser/controller/imeRecorder.ts b/src/vs/editor/test/browser/controller/imeRecorder.ts index 36290eb2e..4b22ced51 100644 --- a/src/vs/editor/test/browser/controller/imeRecorder.ts +++ b/src/vs/editor/test/browser/controller/imeRecorder.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TextAreaWrapper } from 'vs/editor/browser/controller/textAreaInput'; -import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IRecorded, IRecordedCompositionEvent, IRecordedEvent, IRecordedInputEvent, IRecordedKeyboardEvent, IRecordedTextareaState } from 'vs/editor/test/browser/controller/imeRecordedTypes'; -import * as browser from 'vs/base/browser/browser'; -import * as platform from 'vs/base/common/platform'; -import { mainWindow } from 'vs/base/browser/window'; +import { DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IRecorded, IRecordedCompositionEvent, IRecordedEvent, IRecordedInputEvent, IRecordedKeyboardEvent, IRecordedTextareaState } from './imeRecordedTypes.js'; +import * as browser from '../../../../base/browser/browser.js'; +import * as platform from '../../../../base/common/platform.js'; +import { mainWindow } from '../../../../base/browser/window.js'; +import { TextAreaWrapper } from '../../../browser/controller/editContext/textArea/textAreaEditContextInput.js'; (() => { diff --git a/src/vs/editor/test/browser/controller/imeTester.ts b/src/vs/editor/test/browser/controller/imeTester.ts index 3aeaed1d9..25a9e6c51 100644 --- a/src/vs/editor/test/browser/controller/imeTester.ts +++ b/src/vs/editor/test/browser/controller/imeTester.ts @@ -3,17 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITextAreaInputHost, TextAreaInput, TextAreaWrapper } from 'vs/editor/browser/controller/textAreaInput'; -import { ISimpleModel, PagedScreenReaderStrategy, TextAreaState } from 'vs/editor/browser/controller/textAreaState'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { EndOfLinePreference } from 'vs/editor/common/model'; -import * as dom from 'vs/base/browser/dom'; -import * as browser from 'vs/base/browser/browser'; -import * as platform from 'vs/base/common/platform'; -import { mainWindow } from 'vs/base/browser/window'; -import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { EndOfLinePreference } from '../../../common/model.js'; +import * as dom from '../../../../base/browser/dom.js'; +import * as browser from '../../../../base/browser/browser.js'; +import * as platform from '../../../../base/common/platform.js'; +import { mainWindow } from '../../../../base/browser/window.js'; +import { TestAccessibilityService } from '../../../../platform/accessibility/test/common/testAccessibilityService.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ISimpleModel, PagedScreenReaderStrategy } from '../../../browser/controller/editContext/screenReaderUtils.js'; +import { TextAreaState } from '../../../browser/controller/editContext/textArea/textAreaEditContextState.js'; +import { ITextAreaInputHost, TextAreaInput, TextAreaWrapper } from '../../../browser/controller/editContext/textArea/textAreaEditContextInput.js'; // To run this test, open imeTester.html @@ -117,7 +118,8 @@ function doCreateTest(description: string, inputStr: string, expectedStr: string getScreenReaderContent: (): TextAreaState => { const selection = new Range(1, 1 + cursorOffset, 1, 1 + cursorOffset + cursorLength); - return PagedScreenReaderStrategy.fromEditorSelection(model, selection, 10, true); + const screenReaderContentState = PagedScreenReaderStrategy.fromEditorSelection(model, selection, 10, true); + return TextAreaState.fromScreenReaderContentState(screenReaderContentState); }, deduceModelPosition: (viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position => { return null!; diff --git a/src/vs/editor/test/browser/controller/textAreaInput.test.ts b/src/vs/editor/test/browser/controller/textAreaInput.test.ts index fd2e23e37..a1cfa1942 100644 --- a/src/vs/editor/test/browser/controller/textAreaInput.test.ts +++ b/src/vs/editor/test/browser/controller/textAreaInput.test.ts @@ -4,16 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ClipboardDataToCopy, IBrowser, ICompleteTextAreaWrapper, ITextAreaInputHost, TextAreaInput } from 'vs/editor/browser/controller/textAreaInput'; -import { TextAreaState } from 'vs/editor/browser/controller/textAreaState'; -import { Position } from 'vs/editor/common/core/position'; -import { IRecorded, IRecordedEvent, IRecordedTextareaState } from 'vs/editor/test/browser/controller/imeRecordedTypes'; -import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { OperatingSystem } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Position } from '../../../common/core/position.js'; +import { IRecorded, IRecordedEvent, IRecordedTextareaState } from './imeRecordedTypes.js'; +import { TestAccessibilityService } from '../../../../platform/accessibility/test/common/testAccessibilityService.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { IBrowser, ICompleteTextAreaWrapper, ITextAreaInputHost, TextAreaInput } from '../../../browser/controller/editContext/textArea/textAreaEditContextInput.js'; +import { ClipboardDataToCopy } from '../../../browser/controller/editContext/clipboardUtils.js'; +import { TextAreaState } from '../../../browser/controller/editContext/textArea/textAreaEditContextState.js'; suite('TextAreaInput', () => { diff --git a/src/vs/editor/test/browser/controller/textAreaState.test.ts b/src/vs/editor/test/browser/controller/textAreaState.test.ts index 2baa9ddda..a0f9ce82e 100644 --- a/src/vs/editor/test/browser/controller/textAreaState.test.ts +++ b/src/vs/editor/test/browser/controller/textAreaState.test.ts @@ -4,12 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ITextAreaWrapper, PagedScreenReaderStrategy, TextAreaState } from 'vs/editor/browser/controller/textAreaState'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ITextAreaWrapper, TextAreaState } from '../../../browser/controller/editContext/textArea/textAreaEditContextState.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { createTextModel } from '../../common/testTextModel.js'; +import { PagedScreenReaderStrategy } from '../../../browser/controller/editContext/screenReaderUtils.js'; class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper { @@ -364,8 +365,9 @@ suite('TextAreaState', () => { function testPagedScreenReaderStrategy(lines: string[], selection: Selection, expected: TextAreaState): void { const model = createTextModel(lines.join('\n')); - const actual = PagedScreenReaderStrategy.fromEditorSelection(model, selection, 10, true); - assert.ok(equalsTextAreaState(actual, expected)); + const screenReaderContentState = PagedScreenReaderStrategy.fromEditorSelection(model, selection, 10, true); + const textAreaState = TextAreaState.fromScreenReaderContentState(screenReaderContentState); + assert.ok(equalsTextAreaState(textAreaState, expected)); model.dispose(); } diff --git a/src/vs/editor/test/browser/diff/testDiffProviderFactoryService.ts b/src/vs/editor/test/browser/diff/testDiffProviderFactoryService.ts index 275c49959..7d889f501 100644 --- a/src/vs/editor/test/browser/diff/testDiffProviderFactoryService.ts +++ b/src/vs/editor/test/browser/diff/testDiffProviderFactoryService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { IDocumentDiff, IDocumentDiffProvider, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { linesDiffComputers } from 'vs/editor/common/diff/linesDiffComputers'; -import { ITextModel } from 'vs/editor/common/model'; -import { Event } from 'vs/base/common/event'; -import { IDiffProviderFactoryService } from 'vs/editor/browser/widget/diffEditor/diffProviderFactoryService'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { toDisposable } from '../../../../base/common/lifecycle.js'; +import { IDocumentDiff, IDocumentDiffProvider, IDocumentDiffProviderOptions } from '../../../common/diff/documentDiffProvider.js'; +import { linesDiffComputers } from '../../../common/diff/linesDiffComputers.js'; +import { ITextModel } from '../../../common/model.js'; +import { Event } from '../../../../base/common/event.js'; +import { IDiffProviderFactoryService } from '../../../browser/widget/diffEditor/diffProviderFactoryService.js'; export class TestDiffProviderFactoryService implements IDiffProviderFactoryService { declare readonly _serviceBrand: undefined; diff --git a/src/vs/editor/test/browser/editorTestServices.ts b/src/vs/editor/test/browser/editorTestServices.ts index 951759f9f..861a8f778 100644 --- a/src/vs/editor/test/browser/editorTestServices.ts +++ b/src/vs/editor/test/browser/editorTestServices.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { AbstractCodeEditorService, GlobalStyleSheet } from 'vs/editor/browser/services/abstractCodeEditorService'; -import { CommandsRegistry, ICommandEvent, ICommandService } from 'vs/platform/commands/common/commands'; -import { IResourceEditorInput } from 'vs/platform/editor/common/editor'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { ICodeEditor } from '../../browser/editorBrowser.js'; +import { AbstractCodeEditorService, GlobalStyleSheet } from '../../browser/services/abstractCodeEditorService.js'; +import { CommandsRegistry, ICommandEvent, ICommandService } from '../../../platform/commands/common/commands.js'; +import { IResourceEditorInput } from '../../../platform/editor/common/editor.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; export class TestCodeEditorService extends AbstractCodeEditorService { diff --git a/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts b/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts index 9160c0707..7a35640c7 100644 --- a/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts +++ b/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import * as platform from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon'; -import { TestCodeEditorService, TestGlobalStyleSheet } from 'vs/editor/test/browser/editorTestServices'; -import { TestColorTheme, TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; +import * as platform from '../../../../base/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IDecorationRenderOptions } from '../../../common/editorCommon.js'; +import { TestCodeEditorService, TestGlobalStyleSheet } from '../editorTestServices.js'; +import { TestColorTheme, TestThemeService } from '../../../../platform/theme/test/common/testThemeService.js'; suite('Decoration Render Options', () => { const store = ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/browser/services/openerService.test.ts b/src/vs/editor/test/browser/services/openerService.test.ts index d732776a8..8e35ac410 100644 --- a/src/vs/editor/test/browser/services/openerService.test.ts +++ b/src/vs/editor/test/browser/services/openerService.test.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { OpenerService } from 'vs/editor/browser/services/openerService'; -import { TestCodeEditorService } from 'vs/editor/test/browser/editorTestServices'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { NullCommandService } from 'vs/platform/commands/test/common/nullCommandService'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { matchesScheme, matchesSomeScheme } from 'vs/base/common/network'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { OpenerService } from '../../../browser/services/openerService.js'; +import { TestCodeEditorService } from '../editorTestServices.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { NullCommandService } from '../../../../platform/commands/test/common/nullCommandService.js'; +import { ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { matchesScheme, matchesSomeScheme } from '../../../../base/common/network.js'; +import { TestThemeService } from '../../../../platform/theme/test/common/testThemeService.js'; suite('OpenerService', function () { const themeService = new TestThemeService(); diff --git a/src/vs/editor/test/browser/services/treeSitterParserService.test.ts b/src/vs/editor/test/browser/services/treeSitterParserService.test.ts index ca9dcaac4..d90cca2af 100644 --- a/src/vs/editor/test/browser/services/treeSitterParserService.test.ts +++ b/src/vs/editor/test/browser/services/treeSitterParserService.test.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TextModelTreeSitter, TreeSitterImporter, TreeSitterLanguages } from 'vs/editor/browser/services/treeSitter/treeSitterParserService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TextModelTreeSitter, TreeSitterImporter, TreeSitterLanguages } from '../../../browser/services/treeSitter/treeSitterParserService.js'; import type { Parser } from '@vscode/tree-sitter-wasm'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { timeout } from 'vs/base/common/async'; -import { ConsoleMainLogger, ILogService } from 'vs/platform/log/common/log'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { LogService } from 'vs/platform/log/common/logService'; -import { mock } from 'vs/base/test/common/mock'; +import { createTextModel } from '../../common/testTextModel.js'; +import { timeout } from '../../../../base/common/async.js'; +import { ConsoleMainLogger, ILogService } from '../../../../platform/log/common/log.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { LogService } from '../../../../platform/log/common/logService.js'; +import { mock } from '../../../../base/test/common/mock.js'; class MockParser implements Parser { static async init(): Promise { } diff --git a/src/vs/editor/test/browser/testCodeEditor.ts b/src/vs/editor/test/browser/testCodeEditor.ts index 5a79e4837..72da19339 100644 --- a/src/vs/editor/test/browser/testCodeEditor.ts +++ b/src/vs/editor/test/browser/testCodeEditor.ts @@ -3,64 +3,64 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { mock } from 'vs/base/test/common/mock'; -import { EditorConfiguration } from 'vs/editor/browser/config/editorConfiguration'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { View } from 'vs/editor/browser/view'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import * as editorOptions from 'vs/editor/common/config/editorOptions'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextBufferFactory, ITextModel } from 'vs/editor/common/model'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration'; -import { ITreeSitterParserService } from 'vs/editor/common/services/treeSitterParserService'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { TestConfiguration } from 'vs/editor/test/browser/config/testConfiguration'; -import { TestCodeEditorService, TestCommandService } from 'vs/editor/test/browser/editorTestServices'; -import { TestTreeSitterParserService } from 'vs/editor/test/common/services/testTreeSitterService'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { TestEditorWorkerService } from 'vs/editor/test/common/services/testEditorWorkerService'; -import { TestTextResourcePropertiesService } from 'vs/editor/test/common/services/testTextResourcePropertiesService'; -import { instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { AccessibilitySupport, IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { TestClipboardService } from 'vs/platform/clipboard/test/common/testClipboardService'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { BrandedService, IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { MockContextKeyService, MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { NullOpenerService } from 'vs/platform/opener/test/common/nullOpenerService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryServiceShape } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; -import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; -import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { mock } from '../../../base/test/common/mock.js'; +import { EditorConfiguration } from '../../browser/config/editorConfiguration.js'; +import { IActiveCodeEditor, ICodeEditor } from '../../browser/editorBrowser.js'; +import { ICodeEditorService } from '../../browser/services/codeEditorService.js'; +import { View } from '../../browser/view.js'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../../browser/widget/codeEditor/codeEditorWidget.js'; +import * as editorOptions from '../../common/config/editorOptions.js'; +import { IEditorContribution } from '../../common/editorCommon.js'; +import { ILanguageService } from '../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js'; +import { ITextBufferFactory, ITextModel } from '../../common/model.js'; +import { IEditorWorkerService } from '../../common/services/editorWorker.js'; +import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../common/services/languageFeaturesService.js'; +import { LanguageService } from '../../common/services/languageService.js'; +import { IModelService } from '../../common/services/model.js'; +import { ModelService } from '../../common/services/modelService.js'; +import { ITextResourcePropertiesService } from '../../common/services/textResourceConfiguration.js'; +import { ITreeSitterParserService } from '../../common/services/treeSitterParserService.js'; +import { ViewModel } from '../../common/viewModel/viewModelImpl.js'; +import { TestConfiguration } from './config/testConfiguration.js'; +import { TestCodeEditorService, TestCommandService } from './editorTestServices.js'; +import { TestTreeSitterParserService } from '../common/services/testTreeSitterService.js'; +import { TestLanguageConfigurationService } from '../common/modes/testLanguageConfigurationService.js'; +import { TestEditorWorkerService } from '../common/services/testEditorWorkerService.js'; +import { TestTextResourcePropertiesService } from '../common/services/testTextResourcePropertiesService.js'; +import { instantiateTextModel } from '../common/testTextModel.js'; +import { AccessibilitySupport, IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js'; +import { TestAccessibilityService } from '../../../platform/accessibility/test/common/testAccessibilityService.js'; +import { MenuId } from '../../../platform/actions/common/actions.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; +import { TestClipboardService } from '../../../platform/clipboard/test/common/testClipboardService.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../platform/configuration/test/common/testConfigurationService.js'; +import { IContextKeyService, IContextKeyServiceTarget } from '../../../platform/contextkey/common/contextkey.js'; +import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { TestDialogService } from '../../../platform/dialogs/test/common/testDialogService.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { BrandedService, IInstantiationService, ServiceIdentifier } from '../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { TestInstantiationService } from '../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { MockContextKeyService, MockKeybindingService } from '../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { ILogService, NullLogService } from '../../../platform/log/common/log.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { TestNotificationService } from '../../../platform/notification/test/common/testNotificationService.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { NullOpenerService } from '../../../platform/opener/test/common/nullOpenerService.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryServiceShape } from '../../../platform/telemetry/common/telemetryUtils.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { TestThemeService } from '../../../platform/theme/test/common/testThemeService.js'; +import { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js'; +import { UndoRedoService } from '../../../platform/undoRedo/common/undoRedoService.js'; export interface ITestCodeEditor extends IActiveCodeEditor { getViewModel(): ViewModel | undefined; @@ -179,7 +179,7 @@ function _withTestCodeEditor(arg: ITextModel | string | string[] | ITextBufferFa disposables.dispose(); } -export function createCodeEditorServices(disposables: DisposableStore, services: ServiceCollection = new ServiceCollection()): TestInstantiationService { +export function createCodeEditorServices(disposables: Pick, services: ServiceCollection = new ServiceCollection()): TestInstantiationService { const serviceIdentifiers: ServiceIdentifier[] = []; const define = (id: ServiceIdentifier, ctor: new (...args: any[]) => T) => { if (!services.has(id)) { diff --git a/src/vs/editor/test/browser/testCommand.ts b/src/vs/editor/test/browser/testCommand.ts index e12d2cc52..2d54a5f2e 100644 --- a/src/vs/editor/test/browser/testCommand.ts +++ b/src/vs/editor/test/browser/testCommand.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IRange } from 'vs/editor/common/core/range'; -import { Selection, ISelection } from 'vs/editor/common/core/selection'; -import { ICommand, IEditOperationBuilder } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; -import { instantiateTestCodeEditor, createCodeEditorServices } from 'vs/editor/test/browser/testCodeEditor'; -import { instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; +import { IRange } from '../../common/core/range.js'; +import { Selection, ISelection } from '../../common/core/selection.js'; +import { ICommand, IEditOperationBuilder } from '../../common/editorCommon.js'; +import { ITextModel } from '../../common/model.js'; +import { instantiateTestCodeEditor, createCodeEditorServices } from './testCodeEditor.js'; +import { instantiateTextModel } from '../common/testTextModel.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { ISingleEditOperation } from '../../common/core/editOperation.js'; export function testCommand( lines: string[], diff --git a/src/vs/editor/test/browser/view/gpu/atlas/testUtil.ts b/src/vs/editor/test/browser/view/gpu/atlas/testUtil.ts new file mode 100644 index 000000000..73d1e167f --- /dev/null +++ b/src/vs/editor/test/browser/view/gpu/atlas/testUtil.ts @@ -0,0 +1,55 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { fail, ok } from 'assert'; +import type { ITextureAtlasPageGlyph } from '../../../../../browser/gpu/atlas/atlas.js'; +import { TextureAtlas } from '../../../../../browser/gpu/atlas/textureAtlas.js'; +import { isNumber } from '../../../../../../base/common/types.js'; +import { ensureNonNullable } from '../../../../../browser/gpu/gpuUtils.js'; + +export function assertIsValidGlyph(glyph: Readonly | undefined, atlasOrSource: TextureAtlas | OffscreenCanvas) { + if (glyph === undefined) { + fail('glyph is undefined'); + } + const pageW = atlasOrSource instanceof TextureAtlas ? atlasOrSource.pageSize : atlasOrSource.width; + const pageH = atlasOrSource instanceof TextureAtlas ? atlasOrSource.pageSize : atlasOrSource.width; + const source = atlasOrSource instanceof TextureAtlas ? atlasOrSource.pages[glyph.pageIndex].source : atlasOrSource; + + // (x,y) are valid coordinates + ok(isNumber(glyph.x)); + ok(glyph.x >= 0); + ok(glyph.x < pageW); + ok(isNumber(glyph.y)); + ok(glyph.y >= 0); + ok(glyph.y < pageH); + + // (w,h) are valid dimensions + ok(isNumber(glyph.w)); + ok(glyph.w > 0); + ok(glyph.w <= pageW); + ok(isNumber(glyph.h)); + ok(glyph.h > 0); + ok(glyph.h <= pageH); + + // (originOffsetX, originOffsetY) are valid offsets + ok(isNumber(glyph.originOffsetX)); + ok(isNumber(glyph.originOffsetY)); + + // (x,y) + (w,h) are within the bounds of the atlas + ok(glyph.x + glyph.w <= pageW); + ok(glyph.y + glyph.h <= pageH); + + // Each of the glyph's outer pixel edges contain at least 1 non-transparent pixel + const ctx = ensureNonNullable(source.getContext('2d')); + const edges = [ + ctx.getImageData(glyph.x, glyph.y, glyph.w, 1).data, + ctx.getImageData(glyph.x, glyph.y + glyph.h - 1, glyph.w, 1).data, + ctx.getImageData(glyph.x, glyph.y, 1, glyph.h).data, + ctx.getImageData(glyph.x + glyph.w - 1, glyph.y, 1, glyph.h).data, + ]; + for (const edge of edges) { + ok(edge.some(color => (color & 0xFF) !== 0)); + } +} diff --git a/src/vs/editor/test/browser/view/gpu/atlas/textureAtlas.test.ts b/src/vs/editor/test/browser/view/gpu/atlas/textureAtlas.test.ts new file mode 100644 index 000000000..5a4353a1d --- /dev/null +++ b/src/vs/editor/test/browser/view/gpu/atlas/textureAtlas.test.ts @@ -0,0 +1,130 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { strictEqual, throws } from 'assert'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js'; +import type { IGlyphRasterizer, IRasterizedGlyph } from '../../../../../browser/gpu/raster/raster.js'; +import { ensureNonNullable } from '../../../../../browser/gpu/gpuUtils.js'; +import type { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; +import { TextureAtlas } from '../../../../../browser/gpu/atlas/textureAtlas.js'; +import { createCodeEditorServices } from '../../../testCodeEditor.js'; +import { assertIsValidGlyph } from './testUtil.js'; +import { TextureAtlasSlabAllocator } from '../../../../../browser/gpu/atlas/textureAtlasSlabAllocator.js'; + +const blackInt = 0x000000FF; + +let lastUniqueGlyph: string | undefined; +function getUniqueGlyphId(): [chars: string, tokenFg: number] { + if (!lastUniqueGlyph) { + lastUniqueGlyph = 'a'; + } else { + lastUniqueGlyph = String.fromCharCode(lastUniqueGlyph.charCodeAt(0) + 1); + } + return [lastUniqueGlyph, blackInt]; +} + +class TestGlyphRasterizer implements IGlyphRasterizer { + readonly id = 0; + readonly cacheKey = ''; + nextGlyphColor: [number, number, number, number] = [0, 0, 0, 0]; + nextGlyphDimensions: [number, number] = [0, 0]; + rasterizeGlyph(chars: string, metadata: number, colorMap: string[]): Readonly { + const w = this.nextGlyphDimensions[0]; + const h = this.nextGlyphDimensions[1]; + if (w === 0 || h === 0) { + throw new Error('TestGlyphRasterizer.nextGlyphDimensions must be set to a non-zero value before calling rasterizeGlyph'); + } + const imageData = new ImageData(w, h); + let i = 0; + for (let y = 0; y < h; y++) { + for (let x = 0; x < w; x++) { + const [r, g, b, a] = this.nextGlyphColor; + i = (y * w + x) * 4; + imageData.data[i + 0] = r; + imageData.data[i + 1] = g; + imageData.data[i + 2] = b; + imageData.data[i + 3] = a; + } + } + const canvas = new OffscreenCanvas(w, h); + const ctx = ensureNonNullable(canvas.getContext('2d')); + ctx.putImageData(imageData, 0, 0); + return { + source: canvas, + boundingBox: { top: 0, left: 0, bottom: h - 1, right: w - 1 }, + originOffset: { x: 0, y: 0 }, + }; + } +} + +suite('TextureAtlas', () => { + const store = ensureNoDisposablesAreLeakedInTestSuite(); + + suiteSetup(() => { + lastUniqueGlyph = undefined; + }); + + let instantiationService: IInstantiationService; + + let atlas: TextureAtlas; + let glyphRasterizer: TestGlyphRasterizer; + + setup(() => { + instantiationService = createCodeEditorServices(store); + atlas = store.add(instantiationService.createInstance(TextureAtlas, 2, undefined)); + glyphRasterizer = new TestGlyphRasterizer(); + glyphRasterizer.nextGlyphDimensions = [1, 1]; + glyphRasterizer.nextGlyphColor = [0, 0, 0, 0xFF]; + }); + + test('get single glyph', () => { + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + }); + + test('get multiple glyphs', () => { + atlas = store.add(instantiationService.createInstance(TextureAtlas, 32, undefined)); + for (let i = 0; i < 10; i++) { + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + } + }); + + test('adding glyph to full page creates new page', () => { + let pageCount: number | undefined; + for (let i = 0; i < 4; i++) { + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + if (pageCount === undefined) { + pageCount = atlas.pages.length; + } else { + strictEqual(atlas.pages.length, pageCount, 'the number of pages should not change when the page is being filled'); + } + } + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + strictEqual(atlas.pages.length, pageCount! + 1, 'the 5th glyph should overflow to a new page'); + }); + + test('adding a glyph larger than the atlas', () => { + glyphRasterizer.nextGlyphDimensions = [3, 2]; + throws(() => atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), 'should throw when the glyph is too large, this should not happen in practice'); + }); + + test('adding a glyph larger than the standard slab size', () => { + glyphRasterizer.nextGlyphDimensions = [2, 2]; + atlas = store.add(instantiationService.createInstance(TextureAtlas, 32, { + allocatorType: (canvas, textureIndex) => new TextureAtlasSlabAllocator(canvas, textureIndex, { slabW: 1, slabH: 1 }) + })); + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + }); + + test('adding a non-first glyph larger than the standard slab size, causing an overflow to a new page', () => { + atlas = store.add(instantiationService.createInstance(TextureAtlas, 2, { + allocatorType: (canvas, textureIndex) => new TextureAtlasSlabAllocator(canvas, textureIndex, { slabW: 1, slabH: 1 }) + })); + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + strictEqual(atlas.pages.length, 1); + glyphRasterizer.nextGlyphDimensions = [2, 2]; + assertIsValidGlyph(atlas.getGlyph(glyphRasterizer, ...getUniqueGlyphId()), atlas); + strictEqual(atlas.pages.length, 2, 'the 2nd glyph should overflow to a new page with a larger slab size'); + }); +}); diff --git a/src/vs/editor/test/browser/view/gpu/atlas/textureAtlasAllocator.test.ts b/src/vs/editor/test/browser/view/gpu/atlas/textureAtlasAllocator.test.ts new file mode 100644 index 000000000..92d354a5f --- /dev/null +++ b/src/vs/editor/test/browser/view/gpu/atlas/textureAtlasAllocator.test.ts @@ -0,0 +1,202 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { deepStrictEqual, strictEqual, throws } from 'assert'; +import type { IRasterizedGlyph } from '../../../../../browser/gpu/raster/raster.js'; +import { ensureNonNullable } from '../../../../../browser/gpu/gpuUtils.js'; +import type { ITextureAtlasAllocator } from '../../../../../browser/gpu/atlas/atlas.js'; +import { TextureAtlasShelfAllocator } from '../../../../../browser/gpu/atlas/textureAtlasShelfAllocator.js'; +import { TextureAtlasSlabAllocator, type TextureAtlasSlabAllocatorOptions } from '../../../../../browser/gpu/atlas/textureAtlasSlabAllocator.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js'; +import { assertIsValidGlyph } from './testUtil.js'; +import { BugIndicatingError } from '../../../../../../base/common/errors.js'; + +const blackArr = [0x00, 0x00, 0x00, 0xFF]; + +const pixel1x1 = createRasterizedGlyph(1, 1, [...blackArr]); +const pixel2x1 = createRasterizedGlyph(2, 1, [...blackArr, ...blackArr]); +const pixel1x2 = createRasterizedGlyph(1, 2, [...blackArr, ...blackArr]); + +function createRasterizedGlyph(w: number, h: number, data: ArrayLike): IRasterizedGlyph { + strictEqual(w * h * 4, data.length); + const source = new OffscreenCanvas(w, h); + const imageData = new ImageData(w, h); + imageData.data.set(data); + ensureNonNullable(source.getContext('2d')).putImageData(imageData, 0, 0); + return { + source, + boundingBox: { top: 0, left: 0, bottom: h - 1, right: w - 1 }, + originOffset: { x: 0, y: 0 }, + }; +} + +function allocateAndAssert(allocator: ITextureAtlasAllocator, rasterizedGlyph: IRasterizedGlyph, expected: { x: number; y: number; w: number; h: number } | undefined): void { + const actual = allocator.allocate(rasterizedGlyph); + if (!actual) { + strictEqual(actual, expected); + return; + } + deepStrictEqual({ + x: actual.x, + y: actual.y, + w: actual.w, + h: actual.h, + }, expected); +} + +function initShelfAllocator(w: number, h: number): { canvas: OffscreenCanvas; allocator: TextureAtlasShelfAllocator } { + const canvas = new OffscreenCanvas(w, h); + const allocator = new TextureAtlasShelfAllocator(canvas, 0); + return { canvas, allocator }; +} + +function initSlabAllocator(w: number, h: number, options?: TextureAtlasSlabAllocatorOptions): { canvas: OffscreenCanvas; allocator: TextureAtlasSlabAllocator } { + const canvas = new OffscreenCanvas(w, h); + const allocator = new TextureAtlasSlabAllocator(canvas, 0, options); + return { canvas, allocator }; +} + +const allocatorDefinitions: { name: string; initAllocator: (w: number, h: number) => { canvas: OffscreenCanvas; allocator: ITextureAtlasAllocator } }[] = [ + { name: 'shelf', initAllocator: initShelfAllocator }, + { name: 'slab', initAllocator: initSlabAllocator }, +]; + +suite('TextureAtlasAllocator', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + + suite('shared tests', () => { + for (const { name, initAllocator } of allocatorDefinitions) { + test(`(${name}) single allocation`, () => { + const { canvas, allocator } = initAllocator(2, 2); + assertIsValidGlyph(allocator.allocate(pixel1x1), canvas); + }); + // Skipping because it fails unexpectedly on web only when asserting the error message + test.skip(`(${name}) glyph too large for canvas`, () => { + const { allocator } = initAllocator(1, 1); + throws(() => allocateAndAssert(allocator, pixel2x1, undefined), new BugIndicatingError('Glyph is too large for the atlas page')); + }); + } + }); + + suite('TextureAtlasShelfAllocator', () => { + const initAllocator = initShelfAllocator; + + test('single allocation', () => { + const { allocator } = initAllocator(2, 2); + // 1o + // oo + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + }); + test('wrapping', () => { + const { allocator } = initAllocator(5, 4); + + // 1233o + // o2ooo + // ooooo + // ooooo + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x2, { x: 1, y: 0, w: 1, h: 2 }); + allocateAndAssert(allocator, pixel2x1, { x: 2, y: 0, w: 2, h: 1 }); + + // 1233x + // x2xxx + // 44556 + // ooooo + allocateAndAssert(allocator, pixel2x1, { x: 0, y: 2, w: 2, h: 1 }); + allocateAndAssert(allocator, pixel2x1, { x: 2, y: 2, w: 2, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 4, y: 2, w: 1, h: 1 }); + + // 1233x + // x2xxx + // 44556 + // 7oooo + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 3, w: 1, h: 1 }); + }); + test('full', () => { + const { allocator } = initAllocator(3, 2); + // 122 + // 1oo + allocateAndAssert(allocator, pixel1x2, { x: 0, y: 0, w: 1, h: 2 }); + allocateAndAssert(allocator, pixel2x1, { x: 1, y: 0, w: 2, h: 1 }); + allocateAndAssert(allocator, pixel1x1, undefined); + }); + }); + + suite('TextureAtlasSlabAllocator', () => { + const initAllocator = initSlabAllocator; + + test('single allocation', () => { + const { allocator } = initAllocator(2, 2); + // 1o + // oo + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + }); + + test('single slab single glyph full', () => { + const { allocator } = initAllocator(1, 1, { slabW: 1, slabH: 1 }); + + // 1 + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + + allocateAndAssert(allocator, pixel1x1, undefined); + }); + + test('single slab multiple glyph full', () => { + const { allocator } = initAllocator(2, 2, { slabW: 2, slabH: 2 }); + + // 1 + // 1 + allocateAndAssert(allocator, pixel1x2, { x: 0, y: 0, w: 1, h: 2 }); + allocateAndAssert(allocator, pixel1x2, { x: 1, y: 0, w: 1, h: 2 }); + + allocateAndAssert(allocator, pixel1x2, undefined); + }); + + test('allocate 1x1 to multiple slabs until full', () => { + const { allocator } = initAllocator(4, 2, { slabW: 2, slabH: 2 }); + + // 12│oo + // 34│oo + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 1, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 1, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 1, y: 1, w: 1, h: 1 }); + + // 12│56 + // 34│78 + allocateAndAssert(allocator, pixel1x1, { x: 2, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 3, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 2, y: 1, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 3, y: 1, w: 1, h: 1 }); + + allocateAndAssert(allocator, pixel1x1, undefined); + }); + + test('glyph too large for slab (increase slab size for first glyph)', () => { + const { allocator } = initAllocator(2, 2, { slabW: 1, slabH: 1 }); + allocateAndAssert(allocator, pixel2x1, { x: 0, y: 0, w: 2, h: 1 }); + }); + + test('glyph too large for slab (undefined as it\'s not the first glyph)', () => { + const { allocator } = initAllocator(2, 2, { slabW: 1, slabH: 1 }); + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel2x1, undefined); + }); + + test('separate slabs for different sized glyphs', () => { + const { allocator } = initAllocator(4, 2, { slabW: 2, slabH: 2 }); + + // 10│2o + // 00│2o + allocateAndAssert(allocator, pixel1x1, { x: 0, y: 0, w: 1, h: 1 }); + allocateAndAssert(allocator, pixel1x2, { x: 2, y: 0, w: 1, h: 2 }); + + // 14│23 + // 00│23 + allocateAndAssert(allocator, pixel1x2, { x: 3, y: 0, w: 1, h: 2 }); + allocateAndAssert(allocator, pixel1x1, { x: 1, y: 0, w: 1, h: 1 }); + }); + }); +}); diff --git a/src/vs/editor/test/browser/view/gpu/bufferDirtyTracker.test.ts b/src/vs/editor/test/browser/view/gpu/bufferDirtyTracker.test.ts new file mode 100644 index 000000000..0ddc7a5be --- /dev/null +++ b/src/vs/editor/test/browser/view/gpu/bufferDirtyTracker.test.ts @@ -0,0 +1,46 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { strictEqual } from 'assert'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { BufferDirtyTracker } from '../../../../browser/gpu/bufferDirtyTracker.js'; + +suite('BufferDirtyTracker', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + + let bdt: BufferDirtyTracker; + + function assertState(dataOffset: number | undefined, dirtySize: number | undefined) { + strictEqual(bdt.dataOffset, dataOffset); + strictEqual(bdt.dirtySize, dirtySize); + strictEqual(bdt.isDirty, dataOffset !== undefined); + } + + setup(() => { + bdt = new BufferDirtyTracker(); + }); + + test('flag(index)', () => { + strictEqual(bdt.flag(0), 0); + assertState(0, 1); + strictEqual(bdt.flag(31), 31); + assertState(0, 32); + bdt.clear(); + assertState(undefined, undefined); + strictEqual(bdt.flag(10), 10); + assertState(10, 1); + strictEqual(bdt.flag(15), 15); + assertState(10, 6); + }); + + test('flag(index, length)', () => { + bdt.flag(0, 32); + assertState(0, 32); + bdt.clear(); + assertState(undefined, undefined); + bdt.flag(10, 6); + assertState(10, 6); + }); +}); diff --git a/src/vs/editor/test/browser/view/gpu/objectCollectionBuffer.test.ts b/src/vs/editor/test/browser/view/gpu/objectCollectionBuffer.test.ts new file mode 100644 index 000000000..ae8c0670d --- /dev/null +++ b/src/vs/editor/test/browser/view/gpu/objectCollectionBuffer.test.ts @@ -0,0 +1,108 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { deepStrictEqual, strictEqual } from 'assert'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { createObjectCollectionBuffer, type IObjectCollectionBuffer } from '../../../../browser/gpu/objectCollectionBuffer.js'; + +suite('ObjectCollectionBuffer', () => { + const store = ensureNoDisposablesAreLeakedInTestSuite(); + + function assertUsedData(buffer: IObjectCollectionBuffer, expected: number[]) { + deepStrictEqual(Array.from(buffer.view.subarray(0, buffer.viewUsedSize)), expected); + } + + test('createEntry', () => { + const buffer = store.add(createObjectCollectionBuffer([ + { name: 'a' }, + { name: 'b' }, + ] as const, 5)); + assertUsedData(buffer, []); + + store.add(buffer.createEntry({ a: 1, b: 2 })); + store.add(buffer.createEntry({ a: 3, b: 4 })); + store.add(buffer.createEntry({ a: 5, b: 6 })); + store.add(buffer.createEntry({ a: 7, b: 8 })); + store.add(buffer.createEntry({ a: 9, b: 10 })); + assertUsedData(buffer, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + }); + + test('createEntry beyond capacity', () => { + const buffer = store.add(createObjectCollectionBuffer([ + { name: 'a' }, + { name: 'b' }, + ] as const, 1)); + store.add(buffer.createEntry({ a: 1, b: 2 })); + strictEqual(buffer.entryCount, 1); + strictEqual(buffer.buffer.byteLength, 8); + buffer.createEntry({ a: 3, b: 4 }); + strictEqual(buffer.entryCount, 2); + strictEqual(buffer.buffer.byteLength, 16); + }); + + test('dispose entry', () => { + const buffer = store.add(createObjectCollectionBuffer([ + { name: 'a' }, + { name: 'b' }, + ] as const, 5)); + store.add(buffer.createEntry({ a: 1, b: 2 })); + const entry1 = buffer.createEntry({ a: 3, b: 4 }); + store.add(buffer.createEntry({ a: 5, b: 6 })); + const entry2 = buffer.createEntry({ a: 7, b: 8 }); + store.add(buffer.createEntry({ a: 9, b: 10 })); + entry1.dispose(); + entry2.dispose(); + // Data from disposed entries is stale and doesn't need to be validated + assertUsedData(buffer, [1, 2, 5, 6, 9, 10]); + }); + + test('entryCount, viewUsedSize, bufferUsedSize', () => { + const buffer = store.add(createObjectCollectionBuffer([ + { name: 'foo' }, + { name: 'bar' }, + ] as const, 5)); + strictEqual(buffer.entryCount, 0); + strictEqual(buffer.bufferUsedSize, 0); + strictEqual(buffer.viewUsedSize, 0); + buffer.createEntry({ foo: 1, bar: 2 }); + strictEqual(buffer.entryCount, 1); + strictEqual(buffer.viewUsedSize, 2); + strictEqual(buffer.bufferUsedSize, 8); + const entry = buffer.createEntry({ foo: 3, bar: 4 }); + strictEqual(buffer.entryCount, 2); + strictEqual(buffer.viewUsedSize, 4); + strictEqual(buffer.bufferUsedSize, 16); + entry.dispose(); + strictEqual(buffer.entryCount, 1); + strictEqual(buffer.viewUsedSize, 2); + strictEqual(buffer.bufferUsedSize, 8); + }); + + test('entry.get', () => { + const buffer = store.add(createObjectCollectionBuffer([ + { name: 'foo' }, + { name: 'bar' }, + ] as const, 5)); + const entry = store.add(buffer.createEntry({ foo: 1, bar: 2 })); + strictEqual(entry.get('foo'), 1); + strictEqual(entry.get('bar'), 2); + }); + + test('entry.set', () => { + const buffer = store.add(createObjectCollectionBuffer([ + { name: 'foo' }, + { name: 'bar' }, + ] as const, 5)); + const entry = store.add(buffer.createEntry({ foo: 1, bar: 2 })); + let changeCount = 0; + store.add(buffer.onDidChange(() => changeCount++)); + entry.set('foo', 3); + strictEqual(changeCount, 1); + strictEqual(entry.get('foo'), 3); + entry.set('bar', 4); + strictEqual(changeCount, 2); + strictEqual(entry.get('bar'), 4); + }); +}); diff --git a/src/vs/editor/test/browser/view/minimapCharRenderer.test.ts b/src/vs/editor/test/browser/view/minimapCharRenderer.test.ts index 4fcfa5cf3..20af8f3d0 100644 --- a/src/vs/editor/test/browser/view/minimapCharRenderer.test.ts +++ b/src/vs/editor/test/browser/view/minimapCharRenderer.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { MinimapCharRendererFactory } from 'vs/editor/browser/viewParts/minimap/minimapCharRendererFactory'; -import { Constants } from 'vs/editor/browser/viewParts/minimap/minimapCharSheet'; -import { RGBA8 } from 'vs/editor/common/core/rgba'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { MinimapCharRendererFactory } from '../../../browser/viewParts/minimap/minimapCharRendererFactory.js'; +import { Constants } from '../../../browser/viewParts/minimap/minimapCharSheet.js'; +import { RGBA8 } from '../../../common/core/rgba.js'; suite('MinimapCharRenderer', () => { diff --git a/src/vs/editor/test/browser/view/viewLayer.test.ts b/src/vs/editor/test/browser/view/viewLayer.test.ts index be227dce1..e9632a4c9 100644 --- a/src/vs/editor/test/browser/view/viewLayer.test.ts +++ b/src/vs/editor/test/browser/view/viewLayer.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ILine, RenderedLinesCollection } from 'vs/editor/browser/view/viewLayer'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ILine, RenderedLinesCollection } from '../../../browser/view/viewLayer.js'; class TestLine implements ILine { diff --git a/src/vs/editor/test/browser/viewModel/modelLineProjection.test.ts b/src/vs/editor/test/browser/viewModel/modelLineProjection.test.ts index 292aa0ed1..417249f54 100644 --- a/src/vs/editor/test/browser/viewModel/modelLineProjection.test.ts +++ b/src/vs/editor/test/browser/viewModel/modelLineProjection.test.ts @@ -4,24 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import * as languages from 'vs/editor/common/languages'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { EndOfLinePreference } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { ViewLineData } from 'vs/editor/common/viewModel'; -import { IModelLineProjection, ISimpleModel, createModelLineProjection } from 'vs/editor/common/viewModel/modelLineProjection'; -import { MonospaceLineBreaksComputerFactory } from 'vs/editor/common/viewModel/monospaceLineBreaksComputer'; -import { ViewModelLinesFromProjectedModel } from 'vs/editor/common/viewModel/viewModelLines'; -import { TestConfiguration } from 'vs/editor/test/browser/config/testConfiguration'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditorOption } from '../../../common/config/editorOptions.js'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import * as languages from '../../../common/languages.js'; +import { NullState } from '../../../common/languages/nullTokenize.js'; +import { EndOfLinePreference } from '../../../common/model.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { ModelLineProjectionData } from '../../../common/modelLineProjectionData.js'; +import { IViewLineTokens } from '../../../common/tokens/lineTokens.js'; +import { ViewLineData } from '../../../common/viewModel.js'; +import { IModelLineProjection, ISimpleModel, createModelLineProjection } from '../../../common/viewModel/modelLineProjection.js'; +import { MonospaceLineBreaksComputerFactory } from '../../../common/viewModel/monospaceLineBreaksComputer.js'; +import { ViewModelLinesFromProjectedModel } from '../../../common/viewModel/viewModelLines.js'; +import { TestConfiguration } from '../config/testConfiguration.js'; +import { createTextModel } from '../../common/testTextModel.js'; suite('Editor ViewModel - SplitLinesCollection', () => { diff --git a/src/vs/editor/test/browser/viewModel/testViewModel.ts b/src/vs/editor/test/browser/viewModel/testViewModel.ts index 36749b71b..1c59f3de1 100644 --- a/src/vs/editor/test/browser/viewModel/testViewModel.ts +++ b/src/vs/editor/test/browser/viewModel/testViewModel.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { TestConfiguration } from 'vs/editor/test/browser/config/testConfiguration'; -import { MonospaceLineBreaksComputerFactory } from 'vs/editor/common/viewModel/monospaceLineBreaksComputer'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; +import { IEditorOptions } from '../../../common/config/editorOptions.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { ViewModel } from '../../../common/viewModel/viewModelImpl.js'; +import { TestConfiguration } from '../config/testConfiguration.js'; +import { MonospaceLineBreaksComputerFactory } from '../../../common/viewModel/monospaceLineBreaksComputer.js'; +import { createTextModel } from '../../common/testTextModel.js'; +import { TestLanguageConfigurationService } from '../../common/modes/testLanguageConfigurationService.js'; +import { TestThemeService } from '../../../../platform/theme/test/common/testThemeService.js'; export function testViewModel(text: string[], options: IEditorOptions, callback: (viewModel: ViewModel, model: TextModel) => void): void { const EDITOR_ID = 1; diff --git a/src/vs/editor/test/browser/viewModel/viewModelDecorations.test.ts b/src/vs/editor/test/browser/viewModel/viewModelDecorations.test.ts index a89fc01e2..bed88ad12 100644 --- a/src/vs/editor/test/browser/viewModel/viewModelDecorations.test.ts +++ b/src/vs/editor/test/browser/viewModel/viewModelDecorations.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { InlineDecoration, InlineDecorationType } from 'vs/editor/common/viewModel'; -import { testViewModel } from 'vs/editor/test/browser/viewModel/testViewModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEditorOptions } from '../../../common/config/editorOptions.js'; +import { Range } from '../../../common/core/range.js'; +import { InlineDecoration, InlineDecorationType } from '../../../common/viewModel.js'; +import { testViewModel } from './testViewModel.js'; suite('ViewModelDecorations', () => { diff --git a/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts b/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts index ff16b570b..8afa07a8b 100644 --- a/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts +++ b/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { EndOfLineSequence, PositionAffinity } from 'vs/editor/common/model'; -import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; -import { ViewEvent } from 'vs/editor/common/viewEvents'; -import { testViewModel } from 'vs/editor/test/browser/viewModel/testViewModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { EndOfLineSequence, PositionAffinity } from '../../../common/model.js'; +import { ViewEventHandler } from '../../../common/viewEventHandler.js'; +import { ViewEvent } from '../../../common/viewEvents.js'; +import { testViewModel } from './testViewModel.js'; suite('ViewModel', () => { diff --git a/src/vs/editor/test/browser/widget/codeEditorWidget.test.ts b/src/vs/editor/test/browser/widget/codeEditorWidget.test.ts index a09d5c98f..fead379bd 100644 --- a/src/vs/editor/test/browser/widget/codeEditorWidget.test.ts +++ b/src/vs/editor/test/browser/widget/codeEditorWidget.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { withTestCodeEditor } from '../testCodeEditor.js'; suite('CodeEditorWidget', () => { diff --git a/src/vs/editor/test/browser/widget/diffEditorWidget.test.ts b/src/vs/editor/test/browser/widget/diffEditorWidget.test.ts index 53ecda34e..eeac9f526 100644 --- a/src/vs/editor/test/browser/widget/diffEditorWidget.test.ts +++ b/src/vs/editor/test/browser/widget/diffEditorWidget.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { UnchangedRegion } from 'vs/editor/browser/widget/diffEditor/diffEditorViewModel'; -import { LineRange } from 'vs/editor/common/core/lineRange'; -import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { UnchangedRegion } from '../../../browser/widget/diffEditor/diffEditorViewModel.js'; +import { LineRange } from '../../../common/core/lineRange.js'; +import { DetailedLineRangeMapping } from '../../../common/diff/rangeMapping.js'; suite('DiffEditorWidget2', () => { diff --git a/src/vs/editor/test/browser/widget/observableCodeEditor.test.ts b/src/vs/editor/test/browser/widget/observableCodeEditor.test.ts index 0a1049664..d9144896a 100644 --- a/src/vs/editor/test/browser/widget/observableCodeEditor.test.ts +++ b/src/vs/editor/test/browser/widget/observableCodeEditor.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from "assert"; -import { DisposableStore } from "vs/base/common/lifecycle"; -import { IObservable, derivedHandleChanges } from "vs/base/common/observable"; -import { ensureNoDisposablesAreLeakedInTestSuite } from "vs/base/test/common/utils"; -import { ICodeEditor } from "vs/editor/browser/editorBrowser"; -import { ObservableCodeEditor, observableCodeEditor } from "vs/editor/browser/observableCodeEditor"; -import { Position } from "vs/editor/common/core/position"; -import { Range } from "vs/editor/common/core/range"; -import { ViewModel } from "vs/editor/common/viewModel/viewModelImpl"; -import { withTestCodeEditor } from "vs/editor/test/browser/testCodeEditor"; +import { DisposableStore } from "../../../../base/common/lifecycle.js"; +import { IObservable, derivedHandleChanges } from "../../../../base/common/observable.js"; +import { ensureNoDisposablesAreLeakedInTestSuite } from "../../../../base/test/common/utils.js"; +import { ICodeEditor } from "../../../browser/editorBrowser.js"; +import { ObservableCodeEditor, observableCodeEditor } from "../../../browser/observableCodeEditor.js"; +import { Position } from "../../../common/core/position.js"; +import { Range } from "../../../common/core/range.js"; +import { ViewModel } from "../../../common/viewModel/viewModelImpl.js"; +import { withTestCodeEditor } from "../testCodeEditor.js"; suite("CodeEditorWidget", () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/common/controller/cursorAtomicMoveOperations.test.ts b/src/vs/editor/test/common/controller/cursorAtomicMoveOperations.test.ts index 9c2efda4f..819c2b962 100644 --- a/src/vs/editor/test/common/controller/cursorAtomicMoveOperations.test.ts +++ b/src/vs/editor/test/common/controller/cursorAtomicMoveOperations.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { AtomicTabMoveOperations, Direction } from 'vs/editor/common/cursor/cursorAtomicMoveOperations'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { AtomicTabMoveOperations, Direction } from '../../../common/cursor/cursorAtomicMoveOperations.js'; suite('Cursor move command test', () => { diff --git a/src/vs/editor/test/common/core/characterClassifier.test.ts b/src/vs/editor/test/common/core/characterClassifier.test.ts index 4271d91f9..7bd42977c 100644 --- a/src/vs/editor/test/common/core/characterClassifier.test.ts +++ b/src/vs/editor/test/common/core/characterClassifier.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CharCode } from 'vs/base/common/charCode'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CharacterClassifier } from 'vs/editor/common/core/characterClassifier'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { CharacterClassifier } from '../../../common/core/characterClassifier.js'; suite('CharacterClassifier', () => { diff --git a/src/vs/editor/test/common/controller/cursorMoveHelper.test.ts b/src/vs/editor/test/common/core/cursorColumns.test.ts similarity index 77% rename from src/vs/editor/test/common/controller/cursorMoveHelper.test.ts rename to src/vs/editor/test/common/core/cursorColumns.test.ts index e90bdd5a5..9e9f27280 100644 --- a/src/vs/editor/test/common/controller/cursorMoveHelper.test.ts +++ b/src/vs/editor/test/common/core/cursorColumns.test.ts @@ -3,45 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { CursorColumns } from '../../../common/core/cursorColumns.js'; -suite('CursorMove', () => { +suite('CursorColumns', () => { ensureNoDisposablesAreLeakedInTestSuite(); - test('nextRenderTabStop', () => { - assert.strictEqual(CursorColumns.nextRenderTabStop(0, 4), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(1, 4), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(2, 4), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(3, 4), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(4, 4), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(5, 4), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(6, 4), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(7, 4), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(8, 4), 12); - - assert.strictEqual(CursorColumns.nextRenderTabStop(0, 2), 2); - assert.strictEqual(CursorColumns.nextRenderTabStop(1, 2), 2); - assert.strictEqual(CursorColumns.nextRenderTabStop(2, 2), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(3, 2), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(4, 2), 6); - assert.strictEqual(CursorColumns.nextRenderTabStop(5, 2), 6); - assert.strictEqual(CursorColumns.nextRenderTabStop(6, 2), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(7, 2), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(8, 2), 10); - - assert.strictEqual(CursorColumns.nextRenderTabStop(0, 1), 1); - assert.strictEqual(CursorColumns.nextRenderTabStop(1, 1), 2); - assert.strictEqual(CursorColumns.nextRenderTabStop(2, 1), 3); - assert.strictEqual(CursorColumns.nextRenderTabStop(3, 1), 4); - assert.strictEqual(CursorColumns.nextRenderTabStop(4, 1), 5); - assert.strictEqual(CursorColumns.nextRenderTabStop(5, 1), 6); - assert.strictEqual(CursorColumns.nextRenderTabStop(6, 1), 7); - assert.strictEqual(CursorColumns.nextRenderTabStop(7, 1), 8); - assert.strictEqual(CursorColumns.nextRenderTabStop(8, 1), 9); - }); - test('visibleColumnFromColumn', () => { function testVisibleColumnFromColumn(text: string, tabSize: number, column: number, expected: number): void { @@ -101,6 +69,62 @@ suite('CursorMove', () => { testVisibleColumnFromColumn('📚az', 4, 5, 4); }); + test('toStatusbarColumn', () => { + + function t(text: string, tabSize: number, column: number, expected: number): void { + assert.strictEqual(CursorColumns.toStatusbarColumn(text, column, tabSize), expected, `<>`); + } + + t(' spaces', 4, 1, 1); + t(' spaces', 4, 2, 2); + t(' spaces', 4, 3, 3); + t(' spaces', 4, 4, 4); + t(' spaces', 4, 5, 5); + t(' spaces', 4, 6, 6); + t(' spaces', 4, 7, 7); + t(' spaces', 4, 8, 8); + t(' spaces', 4, 9, 9); + t(' spaces', 4, 10, 10); + t(' spaces', 4, 11, 11); + + t('\ttab', 4, 1, 1); + t('\ttab', 4, 2, 5); + t('\ttab', 4, 3, 6); + t('\ttab', 4, 4, 7); + t('\ttab', 4, 5, 8); + + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 1, 1); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 2, 2); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 3, 2); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 4, 3); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 5, 3); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 6, 4); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 7, 4); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 8, 5); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 9, 5); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 10, 6); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 11, 6); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 12, 7); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 13, 7); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 14, 8); + t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 15, 8); + + t('🎈🎈🎈🎈', 4, 1, 1); + t('🎈🎈🎈🎈', 4, 2, 2); + t('🎈🎈🎈🎈', 4, 3, 2); + t('🎈🎈🎈🎈', 4, 4, 3); + t('🎈🎈🎈🎈', 4, 5, 3); + t('🎈🎈🎈🎈', 4, 6, 4); + t('🎈🎈🎈🎈', 4, 7, 4); + t('🎈🎈🎈🎈', 4, 8, 5); + t('🎈🎈🎈🎈', 4, 9, 5); + + t('何何何何', 4, 1, 1); + t('何何何何', 4, 2, 2); + t('何何何何', 4, 3, 3); + t('何何何何', 4, 4, 4); + }); + test('columnFromVisibleColumn', () => { function testColumnFromVisibleColumn(text: string, tabSize: number, visibleColumn: number, expected: number): void { @@ -177,59 +201,81 @@ suite('CursorMove', () => { testColumnFromVisibleColumn('📚az', 4, 4, 5); }); - test('toStatusbarColumn', () => { + for (const [name, fn] of [ + ['nextRenderTabStop', CursorColumns.nextRenderTabStop], + ['nextIndentTabStop', CursorColumns.nextIndentTabStop], + ] as const) { + test(name, () => { + assert.strictEqual(fn(0, 4), 4); + assert.strictEqual(fn(1, 4), 4); + assert.strictEqual(fn(2, 4), 4); + assert.strictEqual(fn(3, 4), 4); + assert.strictEqual(fn(4, 4), 8); + assert.strictEqual(fn(5, 4), 8); + assert.strictEqual(fn(6, 4), 8); + assert.strictEqual(fn(7, 4), 8); + assert.strictEqual(fn(8, 4), 12); - function t(text: string, tabSize: number, column: number, expected: number): void { - assert.strictEqual(CursorColumns.toStatusbarColumn(text, column, tabSize), expected, `<>`); - } + assert.strictEqual(fn(0, 2), 2); + assert.strictEqual(fn(1, 2), 2); + assert.strictEqual(fn(2, 2), 4); + assert.strictEqual(fn(3, 2), 4); + assert.strictEqual(fn(4, 2), 6); + assert.strictEqual(fn(5, 2), 6); + assert.strictEqual(fn(6, 2), 8); + assert.strictEqual(fn(7, 2), 8); + assert.strictEqual(fn(8, 2), 10); - t(' spaces', 4, 1, 1); - t(' spaces', 4, 2, 2); - t(' spaces', 4, 3, 3); - t(' spaces', 4, 4, 4); - t(' spaces', 4, 5, 5); - t(' spaces', 4, 6, 6); - t(' spaces', 4, 7, 7); - t(' spaces', 4, 8, 8); - t(' spaces', 4, 9, 9); - t(' spaces', 4, 10, 10); - t(' spaces', 4, 11, 11); + assert.strictEqual(fn(0, 1), 1); + assert.strictEqual(fn(1, 1), 2); + assert.strictEqual(fn(2, 1), 3); + assert.strictEqual(fn(3, 1), 4); + assert.strictEqual(fn(4, 1), 5); + assert.strictEqual(fn(5, 1), 6); + assert.strictEqual(fn(6, 1), 7); + assert.strictEqual(fn(7, 1), 8); + assert.strictEqual(fn(8, 1), 9); + }); + } - t('\ttab', 4, 1, 1); - t('\ttab', 4, 2, 5); - t('\ttab', 4, 3, 6); - t('\ttab', 4, 4, 7); - t('\ttab', 4, 5, 8); + for (const [name, fn] of [ + ['prevRenderTabStop', CursorColumns.prevRenderTabStop], + ['prevIndentTabStop', CursorColumns.prevIndentTabStop], + ] as const) { + test(name, () => { + assert.strictEqual(fn(0, 4), 0); + assert.strictEqual(fn(1, 4), 0); + assert.strictEqual(fn(2, 4), 0); + assert.strictEqual(fn(3, 4), 0); + assert.strictEqual(fn(4, 4), 0); + assert.strictEqual(fn(5, 4), 4); + assert.strictEqual(fn(6, 4), 4); + assert.strictEqual(fn(7, 4), 4); + assert.strictEqual(fn(8, 4), 4); + assert.strictEqual(fn(9, 4), 8); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 1, 1); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 2, 2); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 3, 2); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 4, 3); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 5, 3); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 6, 4); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 7, 4); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 8, 5); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 9, 5); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 10, 6); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 11, 6); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 12, 7); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 13, 7); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 14, 8); - t('𐌀𐌁𐌂𐌃𐌄𐌅𐌆', 4, 15, 8); + assert.strictEqual(fn(0, 2), 0); + assert.strictEqual(fn(1, 2), 0); + assert.strictEqual(fn(2, 2), 0); + assert.strictEqual(fn(3, 2), 2); + assert.strictEqual(fn(4, 2), 2); + assert.strictEqual(fn(5, 2), 4); + assert.strictEqual(fn(6, 2), 4); + assert.strictEqual(fn(7, 2), 6); + assert.strictEqual(fn(8, 2), 6); + assert.strictEqual(fn(9, 2), 8); - t('🎈🎈🎈🎈', 4, 1, 1); - t('🎈🎈🎈🎈', 4, 2, 2); - t('🎈🎈🎈🎈', 4, 3, 2); - t('🎈🎈🎈🎈', 4, 4, 3); - t('🎈🎈🎈🎈', 4, 5, 3); - t('🎈🎈🎈🎈', 4, 6, 4); - t('🎈🎈🎈🎈', 4, 7, 4); - t('🎈🎈🎈🎈', 4, 8, 5); - t('🎈🎈🎈🎈', 4, 9, 5); + assert.strictEqual(fn(0, 1), 0); + assert.strictEqual(fn(1, 1), 0); + assert.strictEqual(fn(2, 1), 1); + assert.strictEqual(fn(3, 1), 2); + assert.strictEqual(fn(4, 1), 3); + assert.strictEqual(fn(5, 1), 4); + assert.strictEqual(fn(6, 1), 5); + assert.strictEqual(fn(7, 1), 6); + assert.strictEqual(fn(8, 1), 7); + assert.strictEqual(fn(9, 1), 8); + }); + } - t('何何何何', 4, 1, 1); - t('何何何何', 4, 2, 2); - t('何何何何', 4, 3, 3); - t('何何何何', 4, 4, 4); - }); }); diff --git a/src/vs/editor/test/common/core/lineRange.test.ts b/src/vs/editor/test/common/core/lineRange.test.ts index 1b45b3f28..308322500 100644 --- a/src/vs/editor/test/common/core/lineRange.test.ts +++ b/src/vs/editor/test/common/core/lineRange.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LineRange, LineRangeSet } from 'vs/editor/common/core/lineRange'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { LineRange, LineRangeSet } from '../../../common/core/lineRange.js'; suite('LineRange', () => { diff --git a/src/vs/editor/test/common/core/lineTokens.test.ts b/src/vs/editor/test/common/core/lineTokens.test.ts index d2457fa2b..cb53c9d2b 100644 --- a/src/vs/editor/test/common/core/lineTokens.test.ts +++ b/src/vs/editor/test/common/core/lineTokens.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { LanguageIdCodec } from 'vs/editor/common/services/languagesRegistry'; -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { LanguageIdCodec } from '../../../common/services/languagesRegistry.js'; +import { IViewLineTokens, LineTokens } from '../../../common/tokens/lineTokens.js'; suite('LineTokens', () => { diff --git a/src/vs/editor/test/common/core/positionOffsetTransformer.test.ts b/src/vs/editor/test/common/core/positionOffsetTransformer.test.ts index 1811a08e9..e44b41bd6 100644 --- a/src/vs/editor/test/common/core/positionOffsetTransformer.test.ts +++ b/src/vs/editor/test/common/core/positionOffsetTransformer.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { PositionOffsetTransformer } from 'vs/editor/common/core/positionToOffset'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { PositionOffsetTransformer } from '../../../common/core/positionToOffset.js'; suite('PositionOffsetTransformer', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/common/core/random.ts b/src/vs/editor/test/common/core/random.ts index d48f4173f..cbf9a5fec 100644 --- a/src/vs/editor/test/common/core/random.ts +++ b/src/vs/editor/test/common/core/random.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { numberComparator } from 'vs/base/common/arrays'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { Position } from 'vs/editor/common/core/position'; -import { PositionOffsetTransformer } from 'vs/editor/common/core/positionToOffset'; -import { Range } from 'vs/editor/common/core/range'; -import { AbstractText, SingleTextEdit, TextEdit } from 'vs/editor/common/core/textEdit'; +import { numberComparator } from '../../../../base/common/arrays.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { Position } from '../../../common/core/position.js'; +import { PositionOffsetTransformer } from '../../../common/core/positionToOffset.js'; +import { Range } from '../../../common/core/range.js'; +import { AbstractText, SingleTextEdit, TextEdit } from '../../../common/core/textEdit.js'; export abstract class Random { public static basicAlphabet: string = ' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; diff --git a/src/vs/editor/test/common/core/range.test.ts b/src/vs/editor/test/common/core/range.test.ts index fcbb0cd0f..5916ebe33 100644 --- a/src/vs/editor/test/common/core/range.test.ts +++ b/src/vs/editor/test/common/core/range.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; suite('Editor Core - Range', () => { diff --git a/src/vs/editor/test/common/core/stringBuilder.test.ts b/src/vs/editor/test/common/core/stringBuilder.test.ts index 6afe99db3..add312118 100644 --- a/src/vs/editor/test/common/core/stringBuilder.test.ts +++ b/src/vs/editor/test/common/core/stringBuilder.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { writeUInt16LE } from 'vs/base/common/buffer'; -import { CharCode } from 'vs/base/common/charCode'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { decodeUTF16LE, StringBuilder } from 'vs/editor/common/core/stringBuilder'; +import { writeUInt16LE } from '../../../../base/common/buffer.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { decodeUTF16LE, StringBuilder } from '../../../common/core/stringBuilder.js'; suite('decodeUTF16LE', () => { diff --git a/src/vs/editor/test/common/core/testLineToken.ts b/src/vs/editor/test/common/core/testLineToken.ts index f3c498079..1d4d832d5 100644 --- a/src/vs/editor/test/common/core/testLineToken.ts +++ b/src/vs/editor/test/common/core/testLineToken.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { ColorId, TokenMetadata, ITokenPresentation, StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageIdCodec } from 'vs/editor/common/languages'; +import { IViewLineTokens } from '../../../common/tokens/lineTokens.js'; +import { ColorId, TokenMetadata, ITokenPresentation, StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { ILanguageIdCodec } from '../../../common/languages.js'; /** * A token on a line. diff --git a/src/vs/editor/test/common/core/textEdit.test.ts b/src/vs/editor/test/common/core/textEdit.test.ts index 4458eaf8a..c048f0fbd 100644 --- a/src/vs/editor/test/common/core/textEdit.test.ts +++ b/src/vs/editor/test/common/core/textEdit.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { StringText } from 'vs/editor/common/core/textEdit'; -import { Random } from 'vs/editor/test/common/core/random'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { StringText } from '../../../common/core/textEdit.js'; +import { Random } from './random.js'; suite('TextEdit', () => { suite('inverse', () => { diff --git a/src/vs/editor/test/common/diff/diffComputer.test.ts b/src/vs/editor/test/common/diff/diffComputer.test.ts index 651dc5a79..d751ff5f4 100644 --- a/src/vs/editor/test/common/diff/diffComputer.test.ts +++ b/src/vs/editor/test/common/diff/diffComputer.test.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Constants } from 'vs/base/common/uint'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { DiffComputer, ICharChange, ILineChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { IIdentifiedSingleEditOperation, ITextModel } from 'vs/editor/common/model'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { Constants } from '../../../../base/common/uint.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Range } from '../../../common/core/range.js'; +import { DiffComputer, ICharChange, ILineChange } from '../../../common/diff/legacyLinesDiffComputer.js'; +import { IIdentifiedSingleEditOperation, ITextModel } from '../../../common/model.js'; +import { createTextModel } from '../testTextModel.js'; function assertDiff(originalLines: string[], modifiedLines: string[], expectedChanges: ILineChange[], shouldComputeCharChanges: boolean = true, shouldPostProcessCharChanges: boolean = false, shouldIgnoreTrimWhitespace: boolean = false) { const diffComputer = new DiffComputer(originalLines, modifiedLines, { diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/beforeEditPositionMapper.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/beforeEditPositionMapper.test.ts index 514556238..47d8cd1f2 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/beforeEditPositionMapper.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/beforeEditPositionMapper.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { splitLines } from 'vs/base/common/strings'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { BeforeEditPositionMapper, TextEditInfo } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper'; -import { Length, lengthOfString, lengthToObj, lengthToPosition, toLength } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; +import { splitLines } from '../../../../../base/common/strings.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { IRange, Range } from '../../../../common/core/range.js'; +import { BeforeEditPositionMapper, TextEditInfo } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.js'; +import { Length, lengthOfString, lengthToObj, lengthToPosition, toLength } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/length.js'; suite('Bracket Pair Colorizer - BeforeEditPositionMapper', () => { diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/brackets.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/brackets.test.ts index 1c2ea8c3b..d98e324ec 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/brackets.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/brackets.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LanguageAgnosticBracketTokens } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets'; -import { SmallImmutableSet, DenseKeyProvider } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet'; -import { Token, TokenKind } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { LanguageAgnosticBracketTokens } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.js'; +import { SmallImmutableSet, DenseKeyProvider } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js'; +import { Token, TokenKind } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.js'; +import { TestLanguageConfigurationService } from '../../modes/testLanguageConfigurationService.js'; suite('Bracket Pair Colorizer - Brackets', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/combineTextEditInfos.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/combineTextEditInfos.test.ts index a1def431d..2d60eb415 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/combineTextEditInfos.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/combineTextEditInfos.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { SingleTextEdit } from 'vs/editor/common/core/textEdit'; -import { TextEditInfo } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper'; -import { combineTextEditInfos } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos'; -import { lengthAdd, lengthToObj, lengthToPosition, positionToLength, toLength } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { Random } from 'vs/editor/test/common/core/random'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { SingleTextEdit } from '../../../../common/core/textEdit.js'; +import { TextEditInfo } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.js'; +import { combineTextEditInfos } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.js'; +import { lengthAdd, lengthToObj, lengthToPosition, positionToLength, toLength } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/length.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { Random } from '../../core/random.js'; +import { createTextModel } from '../../testTextModel.js'; suite('combineTextEditInfos', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/concat23Trees.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/concat23Trees.test.ts index 6fced6cef..fbf5a1ba3 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/concat23Trees.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/concat23Trees.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { AstNode, AstNodeKind, ListAstNode, TextAstNode } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast'; -import { concat23Trees } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees'; -import { toLength } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { AstNode, AstNodeKind, ListAstNode, TextAstNode } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/ast.js'; +import { concat23Trees } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.js'; +import { toLength } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/length.js'; suite('Bracket Pair Colorizer - mergeItems', () => { diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/getBracketPairsInRange.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/getBracketPairsInRange.test.ts index 87215503d..c3293730e 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/getBracketPairsInRange.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/getBracketPairsInRange.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore, disposeOnReturn } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { BracketPairInfo } from 'vs/editor/common/textModelBracketPairs'; -import { TokenInfo, TokenizedDocument } from 'vs/editor/test/common/model/bracketPairColorizer/tokenizer.test'; -import { createModelServices, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; +import { DisposableStore, disposeOnReturn } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { StandardTokenType } from '../../../../common/encodedTokenAttributes.js'; +import { TokenizationRegistry } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { BracketPairInfo } from '../../../../common/textModelBracketPairs.js'; +import { TokenInfo, TokenizedDocument } from './tokenizer.test.js'; +import { createModelServices, instantiateTextModel } from '../../testTextModel.js'; suite('Bracket Pair Colorizer - getBracketPairsInRange', () => { diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/length.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/length.test.ts index 57086d81f..174f0d85c 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/length.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/length.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Length, lengthAdd, lengthDiffNonNegative, lengthToObj, toLength } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Length, lengthAdd, lengthDiffNonNegative, lengthToObj, toLength } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/length.js'; suite('Bracket Pair Colorizer - Length', () => { diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/smallImmutableSet.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/smallImmutableSet.test.ts index 2b5026e4f..3714c31fa 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/smallImmutableSet.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/smallImmutableSet.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { DenseKeyProvider, SmallImmutableSet } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { DenseKeyProvider, SmallImmutableSet } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js'; suite('Bracket Pair Colorizer - ImmutableSet', () => { diff --git a/src/vs/editor/test/common/model/bracketPairColorizer/tokenizer.test.ts b/src/vs/editor/test/common/model/bracketPairColorizer/tokenizer.test.ts index f306d99cc..3b18e1d83 100644 --- a/src/vs/editor/test/common/model/bracketPairColorizer/tokenizer.test.ts +++ b/src/vs/editor/test/common/model/bracketPairColorizer/tokenizer.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LanguageId, MetadataConsts, StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { LanguageAgnosticBracketTokens } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets'; -import { Length, lengthAdd, lengthsToRange, lengthZero } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; -import { DenseKeyProvider } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet'; -import { TextBufferTokenizer, Token, Tokenizer, TokenKind } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { createModelServices, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { LanguageId, MetadataConsts, StandardTokenType } from '../../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IState, ITokenizationSupport, TokenizationRegistry } from '../../../../common/languages.js'; +import { ILanguageService } from '../../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js'; +import { LanguageAgnosticBracketTokens } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.js'; +import { Length, lengthAdd, lengthsToRange, lengthZero } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/length.js'; +import { DenseKeyProvider } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js'; +import { TextBufferTokenizer, Token, Tokenizer, TokenKind } from '../../../../common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.js'; +import { TextModel } from '../../../../common/model/textModel.js'; +import { createModelServices, instantiateTextModel } from '../../testTextModel.js'; suite('Bracket Pair Colorizer - Tokenizer', () => { diff --git a/src/vs/editor/test/common/model/editStack.test.ts b/src/vs/editor/test/common/model/editStack.test.ts index da409c9d8..4572a71a4 100644 --- a/src/vs/editor/test/common/model/editStack.test.ts +++ b/src/vs/editor/test/common/model/editStack.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Selection } from 'vs/editor/common/core/selection'; -import { TextChange } from 'vs/editor/common/core/textChange'; -import { EndOfLineSequence } from 'vs/editor/common/model'; -import { SingleModelEditStackData } from 'vs/editor/common/model/editStack'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Selection } from '../../../common/core/selection.js'; +import { TextChange } from '../../../common/core/textChange.js'; +import { EndOfLineSequence } from '../../../common/model.js'; +import { SingleModelEditStackData } from '../../../common/model/editStack.js'; suite('EditStack', () => { diff --git a/src/vs/editor/test/common/model/editableTextModel.test.ts b/src/vs/editor/test/common/model/editableTextModel.test.ts index d2af95194..d2b73c7f5 100644 --- a/src/vs/editor/test/common/model/editableTextModel.test.ts +++ b/src/vs/editor/test/common/model/editableTextModel.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { EndOfLinePreference, EndOfLineSequence } from 'vs/editor/common/model'; -import { MirrorTextModel } from 'vs/editor/common/model/mirrorTextModel'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { assertSyncedModels, testApplyEditsWithSyncedModels } from 'vs/editor/test/common/model/editableTextModelTestUtils'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { EndOfLinePreference, EndOfLineSequence } from '../../../common/model.js'; +import { MirrorTextModel } from '../../../common/model/mirrorTextModel.js'; +import { IModelContentChangedEvent } from '../../../common/textModelEvents.js'; +import { assertSyncedModels, testApplyEditsWithSyncedModels } from './editableTextModelTestUtils.js'; +import { createTextModel } from '../testTextModel.js'; suite('EditorModel - EditableTextModel.applyEdits updates mightContainRTL', () => { diff --git a/src/vs/editor/test/common/model/editableTextModelAuto.test.ts b/src/vs/editor/test/common/model/editableTextModelAuto.test.ts index 31e118bbc..f8dfb21eb 100644 --- a/src/vs/editor/test/common/model/editableTextModelAuto.test.ts +++ b/src/vs/editor/test/common/model/editableTextModelAuto.test.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { testApplyEditsWithSyncedModels } from 'vs/editor/test/common/model/editableTextModelTestUtils'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { testApplyEditsWithSyncedModels } from './editableTextModelTestUtils.js'; const GENERATE_TESTS = false; diff --git a/src/vs/editor/test/common/model/editableTextModelTestUtils.ts b/src/vs/editor/test/common/model/editableTextModelTestUtils.ts index 2228a6174..2014dc290 100644 --- a/src/vs/editor/test/common/model/editableTextModelTestUtils.ts +++ b/src/vs/editor/test/common/model/editableTextModelTestUtils.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { EndOfLinePreference, EndOfLineSequence } from 'vs/editor/common/model'; -import { MirrorTextModel } from 'vs/editor/common/model/mirrorTextModel'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { EndOfLinePreference, EndOfLineSequence } from '../../../common/model.js'; +import { MirrorTextModel } from '../../../common/model/mirrorTextModel.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { IModelContentChangedEvent } from '../../../common/textModelEvents.js'; +import { createTextModel } from '../testTextModel.js'; export function testApplyEditsWithSyncedModels(original: string[], edits: ISingleEditOperation[], expected: string[], inputEditsAreInvalid: boolean = false): void { const originalStr = original.join('\n'); diff --git a/src/vs/editor/test/common/model/intervalTree.test.ts b/src/vs/editor/test/common/model/intervalTree.test.ts index dd2fd332b..b6b09e383 100644 --- a/src/vs/editor/test/common/model/intervalTree.test.ts +++ b/src/vs/editor/test/common/model/intervalTree.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TrackedRangeStickiness } from 'vs/editor/common/model'; -import { IntervalNode, IntervalTree, NodeColor, SENTINEL, getNodeColor, intervalCompare, nodeAcceptEdit, setNodeStickiness } from 'vs/editor/common/model/intervalTree'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TrackedRangeStickiness } from '../../../common/model.js'; +import { IntervalNode, IntervalTree, NodeColor, SENTINEL, getNodeColor, intervalCompare, nodeAcceptEdit, setNodeStickiness } from '../../../common/model/intervalTree.js'; const GENERATE_TESTS = false; const TEST_COUNT = GENERATE_TESTS ? 10000 : 0; diff --git a/src/vs/editor/test/common/model/linesTextBuffer/linesTextBuffer.test.ts b/src/vs/editor/test/common/model/linesTextBuffer/linesTextBuffer.test.ts index a4604874d..db95c0926 100644 --- a/src/vs/editor/test/common/model/linesTextBuffer/linesTextBuffer.test.ts +++ b/src/vs/editor/test/common/model/linesTextBuffer/linesTextBuffer.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { DefaultEndOfLine } from 'vs/editor/common/model'; -import { IValidatedEditOperation, PieceTreeTextBuffer } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer'; -import { createTextBufferFactory } from 'vs/editor/common/model/textModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { DefaultEndOfLine } from '../../../../common/model.js'; +import { IValidatedEditOperation, PieceTreeTextBuffer } from '../../../../common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js'; +import { createTextBufferFactory } from '../../../../common/model/textModel.js'; suite('PieceTreeTextBuffer._getInverseEdits', () => { diff --git a/src/vs/editor/test/common/model/linesTextBuffer/linesTextBufferBuilder.test.ts b/src/vs/editor/test/common/model/linesTextBuffer/linesTextBufferBuilder.test.ts index 662ef1fe8..a855ea2ca 100644 --- a/src/vs/editor/test/common/model/linesTextBuffer/linesTextBufferBuilder.test.ts +++ b/src/vs/editor/test/common/model/linesTextBuffer/linesTextBufferBuilder.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import * as strings from 'vs/base/common/strings'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { DefaultEndOfLine } from 'vs/editor/common/model'; -import { createTextBufferFactory } from 'vs/editor/common/model/textModel'; +import * as strings from '../../../../../base/common/strings.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { DefaultEndOfLine } from '../../../../common/model.js'; +import { createTextBufferFactory } from '../../../../common/model/textModel.js'; function testTextBufferFactory(text: string, eol: string, mightContainNonBasicASCII: boolean, mightContainRTL: boolean): void { const { disposable, textBuffer } = createTextBufferFactory(text).create(DefaultEndOfLine.LF); diff --git a/src/vs/editor/test/common/model/model.line.test.ts b/src/vs/editor/test/common/model/model.line.test.ts index 91279c1d7..446e7acaf 100644 --- a/src/vs/editor/test/common/model/model.line.test.ts +++ b/src/vs/editor/test/common/model/model.line.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, IState, ITokenizationSupport, TokenizationRegistry, TokenizationResult } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { computeIndentLevel } from 'vs/editor/common/model/utils'; -import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { TestLineToken, TestLineTokenFactory } from 'vs/editor/test/common/core/testLineToken'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Range } from '../../../common/core/range.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, IState, ITokenizationSupport, TokenizationRegistry, TokenizationResult } from '../../../common/languages.js'; +import { ITextModel } from '../../../common/model.js'; +import { computeIndentLevel } from '../../../common/model/utils.js'; +import { ContiguousMultilineTokensBuilder } from '../../../common/tokens/contiguousMultilineTokensBuilder.js'; +import { LineTokens } from '../../../common/tokens/lineTokens.js'; +import { TestLineToken, TestLineTokenFactory } from '../core/testLineToken.js'; +import { createTextModel } from '../testTextModel.js'; interface ILineEdit { startColumn: number; diff --git a/src/vs/editor/test/common/model/model.modes.test.ts b/src/vs/editor/test/common/model/model.modes.test.ts index 66df53d83..a7ad097c0 100644 --- a/src/vs/editor/test/common/model/model.modes.test.ts +++ b/src/vs/editor/test/common/model/model.modes.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import * as languages from 'vs/editor/common/languages'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import * as languages from '../../../common/languages.js'; +import { NullState } from '../../../common/languages/nullTokenize.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { createTextModel } from '../testTextModel.js'; // --------- utils diff --git a/src/vs/editor/test/common/model/model.test.ts b/src/vs/editor/test/common/model/model.test.ts index e699174a6..e18b84385 100644 --- a/src/vs/editor/test/common/model/model.test.ts +++ b/src/vs/editor/test/common/model/model.test.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Disposable, DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IState, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { InternalModelContentChangeEvent, ModelRawContentChangedEvent, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from 'vs/editor/common/textModelEvents'; -import { createModelServices, createTextModel, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; +import { Disposable, DisposableStore, dispose } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IState, TokenizationRegistry } from '../../../common/languages.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { NullState } from '../../../common/languages/nullTokenize.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { InternalModelContentChangeEvent, ModelRawContentChangedEvent, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from '../../../common/textModelEvents.js'; +import { createModelServices, createTextModel, instantiateTextModel } from '../testTextModel.js'; // --------- utils diff --git a/src/vs/editor/test/common/model/modelDecorations.test.ts b/src/vs/editor/test/common/model/modelDecorations.test.ts index c00d0ce8f..142bbead1 100644 --- a/src/vs/editor/test/common/model/modelDecorations.test.ts +++ b/src/vs/editor/test/common/model/modelDecorations.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { EndOfLineSequence, IModelDeltaDecoration, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { EndOfLineSequence, IModelDeltaDecoration, TrackedRangeStickiness } from '../../../common/model.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { createTextModel } from '../testTextModel.js'; // --------- utils diff --git a/src/vs/editor/test/common/model/modelEditOperation.test.ts b/src/vs/editor/test/common/model/modelEditOperation.test.ts index 0aeebe90c..fba9c92cf 100644 --- a/src/vs/editor/test/common/model/modelEditOperation.test.ts +++ b/src/vs/editor/test/common/model/modelEditOperation.test.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { createTextModel } from '../testTextModel.js'; suite('Editor Model - Model Edit Operation', () => { const LINE1 = 'My First Line'; diff --git a/src/vs/editor/test/common/model/modelInjectedText.test.ts b/src/vs/editor/test/common/model/modelInjectedText.test.ts index f7c023c4f..b342e6bfb 100644 --- a/src/vs/editor/test/common/model/modelInjectedText.test.ts +++ b/src/vs/editor/test/common/model/modelInjectedText.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { InternalModelContentChangeEvent, LineInjectedText, ModelRawChange, RawContentChangedType } from 'vs/editor/common/textModelEvents'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { InternalModelContentChangeEvent, LineInjectedText, ModelRawChange, RawContentChangedType } from '../../../common/textModelEvents.js'; +import { createTextModel } from '../testTextModel.js'; suite('Editor Model - Injected Text Events', () => { const store = ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts index 01cc7cb6e..cb60242c2 100644 --- a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts +++ b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { WordCharacterClassifier } from 'vs/editor/common/core/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { DefaultEndOfLine, ITextSnapshot, SearchData } from 'vs/editor/common/model'; -import { PieceTreeBase } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase'; -import { PieceTreeTextBuffer } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer'; -import { PieceTreeTextBufferBuilder } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder'; -import { NodeColor, SENTINEL, TreeNode } from 'vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { splitLines } from 'vs/base/common/strings'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { WordCharacterClassifier } from '../../../../common/core/wordCharacterClassifier.js'; +import { Position } from '../../../../common/core/position.js'; +import { Range } from '../../../../common/core/range.js'; +import { DefaultEndOfLine, ITextSnapshot, SearchData } from '../../../../common/model.js'; +import { PieceTreeBase } from '../../../../common/model/pieceTreeTextBuffer/pieceTreeBase.js'; +import { PieceTreeTextBuffer } from '../../../../common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js'; +import { PieceTreeTextBufferBuilder } from '../../../../common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js'; +import { NodeColor, SENTINEL, TreeNode } from '../../../../common/model/pieceTreeTextBuffer/rbTreeBase.js'; +import { createTextModel } from '../../testTextModel.js'; +import { splitLines } from '../../../../../base/common/strings.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n'; diff --git a/src/vs/editor/test/common/model/textChange.test.ts b/src/vs/editor/test/common/model/textChange.test.ts index a58430b30..5c0292b42 100644 --- a/src/vs/editor/test/common/model/textChange.test.ts +++ b/src/vs/editor/test/common/model/textChange.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { compressConsecutiveTextChanges, TextChange } from 'vs/editor/common/core/textChange'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { compressConsecutiveTextChanges, TextChange } from '../../../common/core/textChange.js'; const GENERATE_TESTS = false; diff --git a/src/vs/editor/test/common/model/textModel.test.ts b/src/vs/editor/test/common/model/textModel.test.ts index 3270a5633..9165d77af 100644 --- a/src/vs/editor/test/common/model/textModel.test.ts +++ b/src/vs/editor/test/common/model/textModel.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { UTF8_BOM_CHARACTER } from 'vs/base/common/strings'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { EndOfLinePreference } from 'vs/editor/common/model'; -import { TextModel, createTextBuffer } from 'vs/editor/common/model/textModel'; -import { createModelServices, createTextModel } from 'vs/editor/test/common/testTextModel'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { UTF8_BOM_CHARACTER } from '../../../../base/common/strings.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../common/languages/modesRegistry.js'; +import { EndOfLinePreference } from '../../../common/model.js'; +import { TextModel, createTextBuffer } from '../../../common/model/textModel.js'; +import { createModelServices, createTextModel } from '../testTextModel.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; function testGuessIndentation(defaultInsertSpaces: boolean, defaultTabSize: number, expectedInsertSpaces: boolean, expectedTabSize: number, text: string[], msg?: string): void { const m = createTextModel( diff --git a/src/vs/editor/test/common/model/textModelSearch.test.ts b/src/vs/editor/test/common/model/textModelSearch.test.ts index 0f03a1e07..dac7171f5 100644 --- a/src/vs/editor/test/common/model/textModelSearch.test.ts +++ b/src/vs/editor/test/common/model/textModelSearch.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { getMapForWordSeparators } from 'vs/editor/common/core/wordCharacterClassifier'; -import { USUAL_WORD_SEPARATORS } from 'vs/editor/common/core/wordHelper'; -import { EndOfLineSequence, FindMatch, SearchData } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { SearchParams, TextModelSearch, isMultilineRegexSource } from 'vs/editor/common/model/textModelSearch'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { getMapForWordSeparators } from '../../../common/core/wordCharacterClassifier.js'; +import { USUAL_WORD_SEPARATORS } from '../../../common/core/wordHelper.js'; +import { EndOfLineSequence, FindMatch, SearchData } from '../../../common/model.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { SearchParams, TextModelSearch, isMultilineRegexSource } from '../../../common/model/textModelSearch.js'; +import { createTextModel } from '../testTextModel.js'; // --------- Find suite('TextModelSearch', () => { diff --git a/src/vs/editor/test/common/model/textModelTokens.test.ts b/src/vs/editor/test/common/model/textModelTokens.test.ts index 34171ea9b..8850c911c 100644 --- a/src/vs/editor/test/common/model/textModelTokens.test.ts +++ b/src/vs/editor/test/common/model/textModelTokens.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { RangePriorityQueueImpl } from 'vs/editor/common/model/textModelTokens'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { RangePriorityQueueImpl } from '../../../common/model/textModelTokens.js'; suite('RangePriorityQueueImpl', () => { diff --git a/src/vs/editor/test/common/model/textModelWithTokens.test.ts b/src/vs/editor/test/common/model/textModelWithTokens.test.ts index 54ef6b8d6..3783e8e26 100644 --- a/src/vs/editor/test/common/model/textModelWithTokens.test.ts +++ b/src/vs/editor/test/common/model/textModelWithTokens.test.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IFoundBracket } from 'vs/editor/common/textModelBracketPairs'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ITokenizationSupport, TokenizationRegistry, EncodedTokenizationResult } from 'vs/editor/common/languages'; -import { StandardTokenType, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { CharacterPair } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { NullState } from 'vs/editor/common/languages/nullTokenize'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { TestLineToken } from 'vs/editor/test/common/core/testLineToken'; -import { createModelServices, createTextModel, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { IFoundBracket } from '../../../common/textModelBracketPairs.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { ITokenizationSupport, TokenizationRegistry, EncodedTokenizationResult } from '../../../common/languages.js'; +import { StandardTokenType, MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { CharacterPair } from '../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { NullState } from '../../../common/languages/nullTokenize.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { TestLineToken } from '../core/testLineToken.js'; +import { createModelServices, createTextModel, instantiateTextModel } from '../testTextModel.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; function createTextModelWithBrackets(disposables: DisposableStore, text: string, brackets: CharacterPair[]): TextModel { const languageId = 'bracketMode2'; diff --git a/src/vs/editor/test/common/model/tokensStore.test.ts b/src/vs/editor/test/common/model/tokensStore.test.ts index f4e9413a4..c40695bd4 100644 --- a/src/vs/editor/test/common/model/tokensStore.test.ts +++ b/src/vs/editor/test/common/model/tokensStore.test.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ColorId, FontStyle, MetadataConsts, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; -import { ILanguageConfigurationService, LanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { LanguageIdCodec } from 'vs/editor/common/services/languagesRegistry'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; -import { SparseTokensStore } from 'vs/editor/common/tokens/sparseTokensStore'; -import { createModelServices, createTextModel, instantiateTextModel } from 'vs/editor/test/common/testTextModel'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ISingleEditOperation } from '../../../common/core/editOperation.js'; +import { Position } from '../../../common/core/position.js'; +import { Range } from '../../../common/core/range.js'; +import { ColorId, FontStyle, MetadataConsts, TokenMetadata } from '../../../common/encodedTokenAttributes.js'; +import { ILanguageConfigurationService, LanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js'; +import { TextModel } from '../../../common/model/textModel.js'; +import { LanguageIdCodec } from '../../../common/services/languagesRegistry.js'; +import { LineTokens } from '../../../common/tokens/lineTokens.js'; +import { SparseMultilineTokens } from '../../../common/tokens/sparseMultilineTokens.js'; +import { SparseTokensStore } from '../../../common/tokens/sparseTokensStore.js'; +import { createModelServices, createTextModel, instantiateTextModel } from '../testTextModel.js'; suite('TokensStore', () => { diff --git a/src/vs/editor/test/common/modes/languageConfiguration.test.ts b/src/vs/editor/test/common/modes/languageConfiguration.test.ts index 28e6340d9..f6e4fb34a 100644 --- a/src/vs/editor/test/common/modes/languageConfiguration.test.ts +++ b/src/vs/editor/test/common/modes/languageConfiguration.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { StandardAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { StandardTokenType } from '../../../common/encodedTokenAttributes.js'; +import { StandardAutoClosingPairConditional } from '../../../common/languages/languageConfiguration.js'; +import { TestLanguageConfigurationService } from './testLanguageConfigurationService.js'; suite('StandardAutoClosingPairConditional', () => { diff --git a/src/vs/editor/test/common/modes/languageSelector.test.ts b/src/vs/editor/test/common/modes/languageSelector.test.ts index 3de1b762b..31f6c051a 100644 --- a/src/vs/editor/test/common/modes/languageSelector.test.ts +++ b/src/vs/editor/test/common/modes/languageSelector.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LanguageSelector, score } from 'vs/editor/common/languageSelector'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { LanguageSelector, score } from '../../../common/languageSelector.js'; suite('LanguageSelector', function () { diff --git a/src/vs/editor/test/common/modes/linkComputer.test.ts b/src/vs/editor/test/common/modes/linkComputer.test.ts index 2d7698376..8a955f968 100644 --- a/src/vs/editor/test/common/modes/linkComputer.test.ts +++ b/src/vs/editor/test/common/modes/linkComputer.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ILink } from 'vs/editor/common/languages'; -import { ILinkComputerTarget, computeLinks } from 'vs/editor/common/languages/linkComputer'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ILink } from '../../../common/languages.js'; +import { ILinkComputerTarget, computeLinks } from '../../../common/languages/linkComputer.js'; class SimpleLinkComputerTarget implements ILinkComputerTarget { diff --git a/src/vs/editor/test/common/modes/supports/autoClosingPairsRules.ts b/src/vs/editor/test/common/modes/supports/autoClosingPairsRules.ts index 0f5ebc499..d9e226ee0 100644 --- a/src/vs/editor/test/common/modes/supports/autoClosingPairsRules.ts +++ b/src/vs/editor/test/common/modes/supports/autoClosingPairsRules.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAutoClosingPair, IAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; +import { IAutoClosingPair, IAutoClosingPairConditional } from '../../../../common/languages/languageConfiguration.js'; export const javascriptAutoClosingPairsRules: IAutoClosingPairConditional[] = [ { open: '{', close: '}' }, diff --git a/src/vs/editor/test/common/modes/supports/bracketRules.ts b/src/vs/editor/test/common/modes/supports/bracketRules.ts index d21b70a6d..0ce5793a4 100644 --- a/src/vs/editor/test/common/modes/supports/bracketRules.ts +++ b/src/vs/editor/test/common/modes/supports/bracketRules.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharacterPair } from 'vs/editor/common/languages/languageConfiguration'; +import { CharacterPair } from '../../../../common/languages/languageConfiguration.js'; const standardBracketRules: CharacterPair[] = [ ['{', '}'], diff --git a/src/vs/editor/test/common/modes/supports/characterPair.test.ts b/src/vs/editor/test/common/modes/supports/characterPair.test.ts index e92b7db2e..0e0f4e019 100644 --- a/src/vs/editor/test/common/modes/supports/characterPair.test.ts +++ b/src/vs/editor/test/common/modes/supports/characterPair.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { StandardAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; -import { CharacterPairSupport } from 'vs/editor/common/languages/supports/characterPair'; -import { TokenText, createFakeScopedLineTokens } from 'vs/editor/test/common/modesTestUtils'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { StandardTokenType } from '../../../../common/encodedTokenAttributes.js'; +import { StandardAutoClosingPairConditional } from '../../../../common/languages/languageConfiguration.js'; +import { CharacterPairSupport } from '../../../../common/languages/supports/characterPair.js'; +import { TokenText, createFakeScopedLineTokens } from '../../modesTestUtils.js'; suite('CharacterPairSupport', () => { diff --git a/src/vs/editor/test/common/modes/supports/electricCharacter.test.ts b/src/vs/editor/test/common/modes/supports/electricCharacter.test.ts index 20170cb8f..f6258de67 100644 --- a/src/vs/editor/test/common/modes/supports/electricCharacter.test.ts +++ b/src/vs/editor/test/common/modes/supports/electricCharacter.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { BracketElectricCharacterSupport, IElectricAction } from 'vs/editor/common/languages/supports/electricCharacter'; -import { RichEditBrackets } from 'vs/editor/common/languages/supports/richEditBrackets'; -import { TokenText, createFakeScopedLineTokens } from 'vs/editor/test/common/modesTestUtils'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { StandardTokenType } from '../../../../common/encodedTokenAttributes.js'; +import { BracketElectricCharacterSupport, IElectricAction } from '../../../../common/languages/supports/electricCharacter.js'; +import { RichEditBrackets } from '../../../../common/languages/supports/richEditBrackets.js'; +import { TokenText, createFakeScopedLineTokens } from '../../modesTestUtils.js'; const fakeLanguageId = 'test'; diff --git a/src/vs/editor/test/common/modes/supports/onEnter.test.ts b/src/vs/editor/test/common/modes/supports/onEnter.test.ts index 4ed40eb1a..901ad06fb 100644 --- a/src/vs/editor/test/common/modes/supports/onEnter.test.ts +++ b/src/vs/editor/test/common/modes/supports/onEnter.test.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CharacterPair, IndentAction } from 'vs/editor/common/languages/languageConfiguration'; -import { OnEnterSupport } from 'vs/editor/common/languages/supports/onEnter'; -import { javascriptOnEnterRules } from 'vs/editor/test/common/modes/supports/onEnterRules'; -import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CharacterPair, IndentAction } from '../../../../common/languages/languageConfiguration.js'; +import { OnEnterSupport } from '../../../../common/languages/supports/onEnter.js'; +import { javascriptOnEnterRules } from './onEnterRules.js'; +import { EditorAutoIndentStrategy } from '../../../../common/config/editorOptions.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; suite('OnEnter', () => { diff --git a/src/vs/editor/test/common/modes/supports/onEnterRules.ts b/src/vs/editor/test/common/modes/supports/onEnterRules.ts index 66e683fdc..b3cb35e27 100644 --- a/src/vs/editor/test/common/modes/supports/onEnterRules.ts +++ b/src/vs/editor/test/common/modes/supports/onEnterRules.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IndentAction } from 'vs/editor/common/languages/languageConfiguration'; +import { IndentAction } from '../../../../common/languages/languageConfiguration.js'; export const javascriptOnEnterRules = [ { diff --git a/src/vs/editor/test/common/modes/supports/richEditBrackets.test.ts b/src/vs/editor/test/common/modes/supports/richEditBrackets.test.ts index 5fd90a715..27f27e7d5 100644 --- a/src/vs/editor/test/common/modes/supports/richEditBrackets.test.ts +++ b/src/vs/editor/test/common/modes/supports/richEditBrackets.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { BracketsUtils } from 'vs/editor/common/languages/supports/richEditBrackets'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { Range } from '../../../../common/core/range.js'; +import { BracketsUtils } from '../../../../common/languages/supports/richEditBrackets.js'; suite('richEditBrackets', () => { diff --git a/src/vs/editor/test/common/modes/supports/tokenization.test.ts b/src/vs/editor/test/common/modes/supports/tokenization.test.ts index b5386ec1b..69fe4beaa 100644 --- a/src/vs/editor/test/common/modes/supports/tokenization.test.ts +++ b/src/vs/editor/test/common/modes/supports/tokenization.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { FontStyle } from 'vs/editor/common/encodedTokenAttributes'; -import { ColorMap, ExternalThemeTrieElement, ParsedTokenThemeRule, ThemeTrieElementRule, TokenTheme, parseTokenTheme, strcmp } from 'vs/editor/common/languages/supports/tokenization'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; +import { FontStyle } from '../../../../common/encodedTokenAttributes.js'; +import { ColorMap, ExternalThemeTrieElement, ParsedTokenThemeRule, ThemeTrieElementRule, TokenTheme, parseTokenTheme, strcmp } from '../../../../common/languages/supports/tokenization.js'; suite('Token theme matching', () => { diff --git a/src/vs/editor/test/common/modes/testLanguageConfigurationService.ts b/src/vs/editor/test/common/modes/testLanguageConfigurationService.ts index ece0981cb..fb3a50425 100644 --- a/src/vs/editor/test/common/modes/testLanguageConfigurationService.ts +++ b/src/vs/editor/test/common/modes/testLanguageConfigurationService.ts @@ -2,10 +2,10 @@ * 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 { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { LanguageConfiguration } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService, LanguageConfigurationRegistry, LanguageConfigurationServiceChangeEvent, ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { LanguageConfiguration } from '../../../common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService, LanguageConfigurationRegistry, LanguageConfigurationServiceChangeEvent, ResolvedLanguageConfiguration } from '../../../common/languages/languageConfigurationRegistry.js'; export class TestLanguageConfigurationService extends Disposable implements ILanguageConfigurationService { _serviceBrand: undefined; diff --git a/src/vs/editor/test/common/modes/textToHtmlTokenizer.test.ts b/src/vs/editor/test/common/modes/textToHtmlTokenizer.test.ts index af7015a19..31230b133 100644 --- a/src/vs/editor/test/common/modes/textToHtmlTokenizer.test.ts +++ b/src/vs/editor/test/common/modes/textToHtmlTokenizer.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ColorId, FontStyle, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IState, TokenizationRegistry } from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { _tokenizeToString, tokenizeLineToHTML } from 'vs/editor/common/languages/textToHtmlTokenizer'; -import { LanguageIdCodec } from 'vs/editor/common/services/languagesRegistry'; -import { TestLineToken, TestLineTokens } from 'vs/editor/test/common/core/testLineToken'; -import { createModelServices } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ColorId, FontStyle, MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { EncodedTokenizationResult, IState, TokenizationRegistry } from '../../../common/languages.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { _tokenizeToString, tokenizeLineToHTML } from '../../../common/languages/textToHtmlTokenizer.js'; +import { LanguageIdCodec } from '../../../common/services/languagesRegistry.js'; +import { TestLineToken, TestLineTokens } from '../core/testLineToken.js'; +import { createModelServices } from '../testTextModel.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; suite('Editor Modes - textToHtmlTokenizer', () => { diff --git a/src/vs/editor/test/common/modesTestUtils.ts b/src/vs/editor/test/common/modesTestUtils.ts index b96bea4d8..509eff0ea 100644 --- a/src/vs/editor/test/common/modesTestUtils.ts +++ b/src/vs/editor/test/common/modesTestUtils.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { StandardTokenType, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { ScopedLineTokens, createScopedLineTokens } from 'vs/editor/common/languages/supports'; -import { LanguageIdCodec } from 'vs/editor/common/services/languagesRegistry'; +import { LineTokens } from '../../common/tokens/lineTokens.js'; +import { StandardTokenType, MetadataConsts } from '../../common/encodedTokenAttributes.js'; +import { ScopedLineTokens, createScopedLineTokens } from '../../common/languages/supports.js'; +import { LanguageIdCodec } from '../../common/services/languagesRegistry.js'; export interface TokenText { text: string; diff --git a/src/vs/editor/test/common/services/editorSimpleWorker.test.ts b/src/vs/editor/test/common/services/editorSimpleWorker.test.ts index f35928e29..1cc3d022d 100644 --- a/src/vs/editor/test/common/services/editorSimpleWorker.test.ts +++ b/src/vs/editor/test/common/services/editorSimpleWorker.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { TextEdit } from 'vs/editor/common/languages'; -import { BaseEditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker'; -import { ICommonModel } from 'vs/editor/common/services/textModelSync/textModelSync.impl'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Position } from '../../../common/core/position.js'; +import { IRange, Range } from '../../../common/core/range.js'; +import { TextEdit } from '../../../common/languages.js'; +import { BaseEditorSimpleWorker } from '../../../common/services/editorSimpleWorker.js'; +import { ICommonModel } from '../../../common/services/textModelSync/textModelSync.impl.js'; suite('EditorSimpleWorker', () => { diff --git a/src/vs/editor/test/common/services/languageService.test.ts b/src/vs/editor/test/common/services/languageService.test.ts index e8317e6ae..ba3c588fa 100644 --- a/src/vs/editor/test/common/services/languageService.test.ts +++ b/src/vs/editor/test/common/services/languageService.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { LanguageService } from 'vs/editor/common/services/languageService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../common/languages/modesRegistry.js'; +import { LanguageService } from '../../../common/services/languageService.js'; suite('LanguageService', () => { diff --git a/src/vs/editor/test/common/services/languagesAssociations.test.ts b/src/vs/editor/test/common/services/languagesAssociations.test.ts index 7d6ce3ba4..891260d0f 100644 --- a/src/vs/editor/test/common/services/languagesAssociations.test.ts +++ b/src/vs/editor/test/common/services/languagesAssociations.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { getMimeTypes, registerPlatformLanguageAssociation, registerConfiguredLanguageAssociation } from 'vs/editor/common/services/languagesAssociations'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { getMimeTypes, registerPlatformLanguageAssociation, registerConfiguredLanguageAssociation } from '../../../common/services/languagesAssociations.js'; suite('LanguagesAssociations', () => { diff --git a/src/vs/editor/test/common/services/languagesRegistry.test.ts b/src/vs/editor/test/common/services/languagesRegistry.test.ts index d4715b853..9789d1380 100644 --- a/src/vs/editor/test/common/services/languagesRegistry.test.ts +++ b/src/vs/editor/test/common/services/languagesRegistry.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { LanguagesRegistry } from 'vs/editor/common/services/languagesRegistry'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { LanguagesRegistry } from '../../../common/services/languagesRegistry.js'; suite('LanguagesRegistry', () => { diff --git a/src/vs/editor/test/common/services/modelService.test.ts b/src/vs/editor/test/common/services/modelService.test.ts index cd4b53d86..ccc2fabc2 100644 --- a/src/vs/editor/test/common/services/modelService.test.ts +++ b/src/vs/editor/test/common/services/modelService.test.ts @@ -4,23 +4,23 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CharCode } from 'vs/base/common/charCode'; -import * as platform from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { DefaultEndOfLine, ITextBuffer, ITextBufferFactory, ITextSnapshot } from 'vs/editor/common/model'; -import { createTextBuffer } from 'vs/editor/common/model/textModel'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { createModelServices, createTextModel } from 'vs/editor/test/common/testTextModel'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CharCode } from '../../../../base/common/charCode.js'; +import * as platform from '../../../../base/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import { EditOperation } from '../../../common/core/editOperation.js'; +import { Range } from '../../../common/core/range.js'; +import { Selection } from '../../../common/core/selection.js'; +import { StringBuilder } from '../../../common/core/stringBuilder.js'; +import { DefaultEndOfLine, ITextBuffer, ITextBufferFactory, ITextSnapshot } from '../../../common/model.js'; +import { createTextBuffer } from '../../../common/model/textModel.js'; +import { ModelService } from '../../../common/services/modelService.js'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { createModelServices, createTextModel } from '../testTextModel.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IModelService } from '../../../common/services/model.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; const GENERATE_TESTS = false; diff --git a/src/vs/editor/test/common/services/semanticTokensDto.test.ts b/src/vs/editor/test/common/services/semanticTokensDto.test.ts index 709369117..05980e011 100644 --- a/src/vs/editor/test/common/services/semanticTokensDto.test.ts +++ b/src/vs/editor/test/common/services/semanticTokensDto.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IFullSemanticTokensDto, IDeltaSemanticTokensDto, encodeSemanticTokensDto, ISemanticTokensDto, decodeSemanticTokensDto } from 'vs/editor/common/services/semanticTokensDto'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { IFullSemanticTokensDto, IDeltaSemanticTokensDto, encodeSemanticTokensDto, ISemanticTokensDto, decodeSemanticTokensDto } from '../../../common/services/semanticTokensDto.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('SemanticTokensDto', () => { diff --git a/src/vs/editor/test/common/services/semanticTokensProviderStyling.test.ts b/src/vs/editor/test/common/services/semanticTokensProviderStyling.test.ts index 1128768e9..988944036 100644 --- a/src/vs/editor/test/common/services/semanticTokensProviderStyling.test.ts +++ b/src/vs/editor/test/common/services/semanticTokensProviderStyling.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { SemanticTokensProviderStyling, toMultilineTokens2 } from 'vs/editor/common/services/semanticTokensProviderStyling'; -import { createModelServices } from 'vs/editor/test/common/testTextModel'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { IColorTheme, IThemeService, ITokenStyle } from 'vs/platform/theme/common/themeService'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { SparseMultilineTokens } from '../../../common/tokens/sparseMultilineTokens.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { SemanticTokensProviderStyling, toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js'; +import { createModelServices } from '../testTextModel.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { IColorTheme, IThemeService, ITokenStyle } from '../../../../platform/theme/common/themeService.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ModelService', () => { let disposables: DisposableStore; diff --git a/src/vs/editor/test/common/services/testEditorWorkerService.ts b/src/vs/editor/test/common/services/testEditorWorkerService.ts index 078cb885e..44a9d5fff 100644 --- a/src/vs/editor/test/common/services/testEditorWorkerService.ts +++ b/src/vs/editor/test/common/services/testEditorWorkerService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IRange } from 'vs/editor/common/core/range'; -import { DiffAlgorithmName, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; -import { TextEdit, IInplaceReplaceSupportResult, IColorInformation } from 'vs/editor/common/languages'; -import { IDocumentDiff, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { IChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { SectionHeader } from 'vs/editor/common/services/findSectionHeaders'; +import { URI } from '../../../../base/common/uri.js'; +import { IRange } from '../../../common/core/range.js'; +import { DiffAlgorithmName, IEditorWorkerService, IUnicodeHighlightsResult } from '../../../common/services/editorWorker.js'; +import { TextEdit, IInplaceReplaceSupportResult, IColorInformation } from '../../../common/languages.js'; +import { IDocumentDiff, IDocumentDiffProviderOptions } from '../../../common/diff/documentDiffProvider.js'; +import { IChange } from '../../../common/diff/legacyLinesDiffComputer.js'; +import { SectionHeader } from '../../../common/services/findSectionHeaders.js'; export class TestEditorWorkerService implements IEditorWorkerService { diff --git a/src/vs/editor/test/common/services/testTextResourcePropertiesService.ts b/src/vs/editor/test/common/services/testTextResourcePropertiesService.ts index c7079676e..77a92fa0e 100644 --- a/src/vs/editor/test/common/services/testTextResourcePropertiesService.ts +++ b/src/vs/editor/test/common/services/testTextResourcePropertiesService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as platform from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import * as platform from '../../../../base/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ITextResourcePropertiesService } from '../../../common/services/textResourceConfiguration.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; export class TestTextResourcePropertiesService implements ITextResourcePropertiesService { diff --git a/src/vs/editor/test/common/services/testTreeSitterService.ts b/src/vs/editor/test/common/services/testTreeSitterService.ts index e5adcca9f..775b988dd 100644 --- a/src/vs/editor/test/common/services/testTreeSitterService.ts +++ b/src/vs/editor/test/common/services/testTreeSitterService.ts @@ -4,11 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import type { Parser } from '@vscode/tree-sitter-wasm'; -import { Event } from 'vs/base/common/event'; -import { ITextModel } from 'vs/editor/common/model'; -import { ITreeSitterParserService, ITreeSitterParseResult } from 'vs/editor/common/services/treeSitterParserService'; +import { Event } from '../../../../base/common/event.js'; +import { ITextModel } from '../../../common/model.js'; +import { ITreeSitterParserService, ITreeSitterParseResult } from '../../../common/services/treeSitterParserService.js'; +import { Range } from '../../../common/core/range.js'; export class TestTreeSitterParserService implements ITreeSitterParserService { + onDidUpdateTree: Event<{ textModel: ITextModel; ranges: Range[] }> = Event.None; onDidAddLanguage: Event<{ id: string; language: Parser.Language }> = Event.None; _serviceBrand: undefined; getOrInitLanguage(languageId: string): Parser.Language | undefined { diff --git a/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts b/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts index c7fbd1aff..f3299fdba 100644 --- a/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts +++ b/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IConfigurationValue, IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; -import { TextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfigurationService'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { IModelService } from '../../../common/services/model.js'; +import { ILanguageService } from '../../../common/languages/language.js'; +import { IConfigurationValue, IConfigurationService, ConfigurationTarget } from '../../../../platform/configuration/common/configuration.js'; +import { TextResourceConfigurationService } from '../../../common/services/textResourceConfigurationService.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('TextResourceConfigurationService - Update', () => { diff --git a/src/vs/editor/test/common/services/unicodeTextModelHighlighter.test.ts b/src/vs/editor/test/common/services/unicodeTextModelHighlighter.test.ts index 9b5351bd6..3b4b550cf 100644 --- a/src/vs/editor/test/common/services/unicodeTextModelHighlighter.test.ts +++ b/src/vs/editor/test/common/services/unicodeTextModelHighlighter.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { UnicodeHighlighterOptions, UnicodeTextModelHighlighter } from 'vs/editor/common/services/unicodeTextModelHighlighter'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Range } from '../../../common/core/range.js'; +import { UnicodeHighlighterOptions, UnicodeTextModelHighlighter } from '../../../common/services/unicodeTextModelHighlighter.js'; +import { createTextModel } from '../testTextModel.js'; suite('UnicodeTextModelHighlighter', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/editor/test/common/testTextModel.ts b/src/vs/editor/test/common/testTextModel.ts index 029e58d91..01732b711 100644 --- a/src/vs/editor/test/common/testTextModel.ts +++ b/src/vs/editor/test/common/testTextModel.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { BracketPairColorizationOptions, DefaultEndOfLine, ITextBufferFactory, ITextModelCreationOptions } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; -import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; -import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService'; -import { TestTextResourcePropertiesService } from 'vs/editor/test/common/services/testTextResourcePropertiesService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { createServices, ServiceIdCtorPair, TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { mock } from 'vs/base/test/common/mock'; -import { ITreeSitterParserService } from 'vs/editor/common/services/treeSitterParserService'; -import { TestTreeSitterParserService } from 'vs/editor/test/common/services/testTreeSitterService'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { BracketPairColorizationOptions, DefaultEndOfLine, ITextBufferFactory, ITextModelCreationOptions } from '../../common/model.js'; +import { TextModel } from '../../common/model/textModel.js'; +import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js'; +import { ILanguageService } from '../../common/languages/language.js'; +import { LanguageService } from '../../common/services/languageService.js'; +import { ITextResourcePropertiesService } from '../../common/services/textResourceConfiguration.js'; +import { TestLanguageConfigurationService } from './modes/testLanguageConfigurationService.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../platform/configuration/test/common/testConfigurationService.js'; +import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { TestDialogService } from '../../../platform/dialogs/test/common/testDialogService.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService, NullLogService } from '../../../platform/log/common/log.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { TestNotificationService } from '../../../platform/notification/test/common/testNotificationService.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { TestThemeService } from '../../../platform/theme/test/common/testThemeService.js'; +import { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js'; +import { UndoRedoService } from '../../../platform/undoRedo/common/undoRedoService.js'; +import { TestTextResourcePropertiesService } from './services/testTextResourcePropertiesService.js'; +import { IModelService } from '../../common/services/model.js'; +import { ModelService } from '../../common/services/modelService.js'; +import { createServices, ServiceIdCtorPair, TestInstantiationService } from '../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../common/languages/modesRegistry.js'; +import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../common/services/languageFeaturesService.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { mock } from '../../../base/test/common/mock.js'; +import { ITreeSitterParserService } from '../../common/services/treeSitterParserService.js'; +import { TestTreeSitterParserService } from './services/testTreeSitterService.js'; class TestTextModel extends TextModel { public registerDisposable(disposable: IDisposable): void { diff --git a/src/vs/editor/test/common/view/overviewZoneManager.test.ts b/src/vs/editor/test/common/view/overviewZoneManager.test.ts index b488141d7..c3b253058 100644 --- a/src/vs/editor/test/common/view/overviewZoneManager.test.ts +++ b/src/vs/editor/test/common/view/overviewZoneManager.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ColorZone, OverviewRulerZone, OverviewZoneManager } from 'vs/editor/common/viewModel/overviewZoneManager'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ColorZone, OverviewRulerZone, OverviewZoneManager } from '../../../common/viewModel/overviewZoneManager.js'; suite('Editor View - OverviewZoneManager', () => { diff --git a/src/vs/editor/test/common/viewLayout/lineDecorations.test.ts b/src/vs/editor/test/common/viewLayout/lineDecorations.test.ts index d1058c422..59f87b95b 100644 --- a/src/vs/editor/test/common/viewLayout/lineDecorations.test.ts +++ b/src/vs/editor/test/common/viewLayout/lineDecorations.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Range } from 'vs/editor/common/core/range'; -import { DecorationSegment, LineDecoration, LineDecorationsNormalizer } from 'vs/editor/common/viewLayout/lineDecorations'; -import { InlineDecoration, InlineDecorationType } from 'vs/editor/common/viewModel'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Range } from '../../../common/core/range.js'; +import { DecorationSegment, LineDecoration, LineDecorationsNormalizer } from '../../../common/viewLayout/lineDecorations.js'; +import { InlineDecoration, InlineDecorationType } from '../../../common/viewModel.js'; suite('Editor ViewLayout - ViewLineParts', () => { diff --git a/src/vs/editor/test/common/viewLayout/linesLayout.test.ts b/src/vs/editor/test/common/viewLayout/linesLayout.test.ts index 58f9217ea..087c24e45 100644 --- a/src/vs/editor/test/common/viewLayout/linesLayout.test.ts +++ b/src/vs/editor/test/common/viewLayout/linesLayout.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditorWhitespace, LinesLayout } from 'vs/editor/common/viewLayout/linesLayout'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditorWhitespace, LinesLayout } from '../../../common/viewLayout/linesLayout.js'; suite('Editor ViewLayout - LinesLayout', () => { diff --git a/src/vs/editor/test/common/viewLayout/viewLineRenderer.test.ts b/src/vs/editor/test/common/viewLayout/viewLineRenderer.test.ts index 22e1c60f7..c35690fe9 100644 --- a/src/vs/editor/test/common/viewLayout/viewLineRenderer.test.ts +++ b/src/vs/editor/test/common/viewLayout/viewLineRenderer.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CharCode } from 'vs/base/common/charCode'; -import * as strings from 'vs/base/common/strings'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; -import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { CharacterMapping, DomPosition, LineRange, RenderLineInput, RenderLineOutput2, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { InlineDecorationType } from 'vs/editor/common/viewModel'; -import { TestLineToken, TestLineTokens } from 'vs/editor/test/common/core/testLineToken'; +import { CharCode } from '../../../../base/common/charCode.js'; +import * as strings from '../../../../base/common/strings.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { MetadataConsts } from '../../../common/encodedTokenAttributes.js'; +import { IViewLineTokens } from '../../../common/tokens/lineTokens.js'; +import { LineDecoration } from '../../../common/viewLayout/lineDecorations.js'; +import { CharacterMapping, DomPosition, LineRange, RenderLineInput, RenderLineOutput2, renderViewLine2 as renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js'; +import { InlineDecorationType } from '../../../common/viewModel.js'; +import { TestLineToken, TestLineTokens } from '../core/testLineToken.js'; function createViewLineTokens(viewLineTokens: TestLineToken[]): IViewLineTokens { return new TestLineTokens(viewLineTokens); diff --git a/src/vs/editor/test/common/viewModel/glyphLanesModel.test.ts b/src/vs/editor/test/common/viewModel/glyphLanesModel.test.ts index 84659a045..39f80ae0a 100644 --- a/src/vs/editor/test/common/viewModel/glyphLanesModel.test.ts +++ b/src/vs/editor/test/common/viewModel/glyphLanesModel.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { GlyphMarginLanesModel, } from 'vs/editor/common/viewModel/glyphLanesModel'; -import { Range } from 'vs/editor/common/core/range'; -import { GlyphMarginLane } from 'vs/editor/common/model'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { GlyphMarginLanesModel, } from '../../../common/viewModel/glyphLanesModel.js'; +import { Range } from '../../../common/core/range.js'; +import { GlyphMarginLane } from '../../../common/model.js'; suite('GlyphLanesModel', () => { let model: GlyphMarginLanesModel; diff --git a/src/vs/editor/test/common/viewModel/lineBreakData.test.ts b/src/vs/editor/test/common/viewModel/lineBreakData.test.ts index b771b7e5f..b621632fe 100644 --- a/src/vs/editor/test/common/viewModel/lineBreakData.test.ts +++ b/src/vs/editor/test/common/viewModel/lineBreakData.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { PositionAffinity } from 'vs/editor/common/model'; -import { ModelDecorationInjectedTextOptions } from 'vs/editor/common/model/textModel'; -import { ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { PositionAffinity } from '../../../common/model.js'; +import { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js'; +import { ModelLineProjectionData } from '../../../common/modelLineProjectionData.js'; suite('Editor ViewModel - LineBreakData', () => { diff --git a/src/vs/editor/test/common/viewModel/monospaceLineBreaksComputer.test.ts b/src/vs/editor/test/common/viewModel/monospaceLineBreaksComputer.test.ts index a1defd0c4..b5f0e7822 100644 --- a/src/vs/editor/test/common/viewModel/monospaceLineBreaksComputer.test.ts +++ b/src/vs/editor/test/common/viewModel/monospaceLineBreaksComputer.test.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EditorOptions, WrappingIndent } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { ILineBreaksComputerFactory, ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; -import { MonospaceLineBreaksComputerFactory } from 'vs/editor/common/viewModel/monospaceLineBreaksComputer'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EditorOptions, WrappingIndent } from '../../../common/config/editorOptions.js'; +import { FontInfo } from '../../../common/config/fontInfo.js'; +import { ILineBreaksComputerFactory, ModelLineProjectionData } from '../../../common/modelLineProjectionData.js'; +import { MonospaceLineBreaksComputerFactory } from '../../../common/viewModel/monospaceLineBreaksComputer.js'; function parseAnnotatedText(annotatedText: string): { text: string; indices: number[] } { let text = ''; diff --git a/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts b/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts index e1820e6e9..a7f934a62 100644 --- a/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts +++ b/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { toUint32 } from 'vs/base/common/uint'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { PrefixSumComputer, PrefixSumIndexOfResult } from 'vs/editor/common/model/prefixSumComputer'; +import { toUint32 } from '../../../../base/common/uint.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { PrefixSumComputer, PrefixSumIndexOfResult } from '../../../common/model/prefixSumComputer.js'; function toUint32Array(arr: number[]): Uint32Array { const len = arr.length; diff --git a/src/vs/editor/test/node/classification/typescript.test.ts b/src/vs/editor/test/node/classification/typescript.test.ts index d2657a7ce..4166eadcd 100644 --- a/src/vs/editor/test/node/classification/typescript.test.ts +++ b/src/vs/editor/test/node/classification/typescript.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { StandardTokenType } from '../../../common/encodedTokenAttributes.js'; import * as fs from 'fs'; // import { getPathFromAmdModule } from 'vs/base/test/node/testUtils'; // import { parse } from 'vs/editor/common/modes/tokenization/typescript'; -import { toStandardTokenType } from 'vs/editor/common/languages/supports/tokenization'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { toStandardTokenType } from '../../../common/languages/supports/tokenization.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; interface IParseFunc { (text: string): number[]; diff --git a/src/vs/editor/test/node/diffing/defaultLinesDiffComputer.test.ts b/src/vs/editor/test/node/diffing/defaultLinesDiffComputer.test.ts index 72ad7fe21..7e93197ef 100644 --- a/src/vs/editor/test/node/diffing/defaultLinesDiffComputer.test.ts +++ b/src/vs/editor/test/node/diffing/defaultLinesDiffComputer.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Range } from 'vs/editor/common/core/range'; -import { RangeMapping } from 'vs/editor/common/diff/rangeMapping'; -import { OffsetRange } from 'vs/editor/common/core/offsetRange'; -import { getLineRangeMapping } from 'vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer'; -import { LinesSliceCharSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence'; -import { MyersDiffAlgorithm } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm'; -import { DynamicProgrammingDiffing } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Range } from '../../../common/core/range.js'; +import { getLineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js'; +import { OffsetRange } from '../../../common/core/offsetRange.js'; +import { LinesSliceCharSequence } from '../../../common/diff/defaultLinesDiffComputer/linesSliceCharSequence.js'; +import { MyersDiffAlgorithm } from '../../../common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.js'; +import { DynamicProgrammingDiffing } from '../../../common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ArrayText } from '../../../common/core/textEdit.js'; suite('myers', () => { ensureNoDisposablesAreLeakedInTestSuite(); @@ -35,15 +35,15 @@ suite('lineRangeMapping', () => { new Range(2, 1, 3, 1), new Range(2, 1, 2, 1) ), - [ + new ArrayText([ 'const abc = "helloworld".split("");', '', '' - ], - [ + ]), + new ArrayText([ 'const asciiLower = "helloworld".split("");', '' - ] + ]) ).toString(), "{[2,3)->[2,2)}" ); @@ -56,16 +56,16 @@ suite('lineRangeMapping', () => { new Range(2, 1, 2, 1), new Range(2, 1, 4, 1), ), - [ + new ArrayText([ '', '', - ], - [ + ]), + new ArrayText([ '', '', '', '', - ] + ]) ).toString(), "{[2,2)->[2,4)}" ); diff --git a/src/vs/editor/test/node/diffing/fixtures.test.ts b/src/vs/editor/test/node/diffing/fixtures.test.ts index 0ed9a8b11..e85d69f12 100644 --- a/src/vs/editor/test/node/diffing/fixtures.test.ts +++ b/src/vs/editor/test/node/diffing/fixtures.test.ts @@ -6,15 +6,15 @@ import assert from 'assert'; import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'fs'; import { join, resolve } from 'path'; -import { setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { FileAccess } from 'vs/base/common/network'; -import { DetailedLineRangeMapping, RangeMapping } 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'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { AbstractText, ArrayText, SingleTextEdit, TextEdit } from 'vs/editor/common/core/textEdit'; -import { LinesDiff } from 'vs/editor/common/diff/linesDiffComputer'; +import { setUnexpectedErrorHandler } from '../../../../base/common/errors.js'; +import { FileAccess } from '../../../../base/common/network.js'; +import { DetailedLineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js'; +import { LegacyLinesDiffComputer } from '../../../common/diff/legacyLinesDiffComputer.js'; +import { DefaultLinesDiffComputer } from '../../../common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js'; +import { Range } from '../../../common/core/range.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { AbstractText, ArrayText, SingleTextEdit, TextEdit } from '../../../common/core/textEdit.js'; +import { LinesDiff } from '../../../common/diff/linesDiffComputer.js'; suite('diffing fixtures', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index be2c930e9..851575355 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -3680,6 +3680,11 @@ declare namespace monaco.editor { * Defaults to 'always'. */ matchBrackets?: 'never' | 'near' | 'always'; + /** + * Enable experimental rendering using WebGPU. + * Defaults to 'off'. + */ + experimentalGpuAcceleration?: 'on' | 'off'; /** * Enable experimental whitespace rendering. * Defaults to 'svg'. @@ -3783,6 +3788,10 @@ declare namespace monaco.editor { * When enabled, this shows a preview of the drop location and triggers an `onDropIntoEditor` event. */ dropIntoEditor?: IDropIntoEditorOptions; + /** + * Sets whether the new experimental edit context should be used instead of the text area. + */ + experimentalEditContextEnabled?: boolean; /** * Controls support for changing how content is pasted into the editor. */ @@ -4281,6 +4290,11 @@ declare namespace monaco.editor { * Defaults to false. */ padding?: boolean; + /** + * Maximum length for inlay hints per line + * Set to 0 to have an unlimited length. + */ + maximumLength?: number; } /** @@ -4560,6 +4574,7 @@ declare namespace monaco.editor { */ mode?: 'prefix' | 'subword' | 'subwordSmart'; showToolbar?: 'always' | 'onHover' | 'never'; + syntaxHighlightingEnabled?: boolean; suppressSuggestions?: boolean; /** * Does not clear active inline suggestions when the editor loses focus. @@ -4896,120 +4911,122 @@ declare namespace monaco.editor { domReadOnly = 34, dragAndDrop = 35, dropIntoEditor = 36, - emptySelectionClipboard = 37, - experimentalWhitespaceRendering = 38, - extraEditorClassName = 39, - fastScrollSensitivity = 40, - find = 41, - fixedOverflowWidgets = 42, - folding = 43, - foldingStrategy = 44, - foldingHighlight = 45, - foldingImportsByDefault = 46, - foldingMaximumRegions = 47, - unfoldOnClickAfterEndOfLine = 48, - fontFamily = 49, - fontInfo = 50, - fontLigatures = 51, - fontSize = 52, - fontWeight = 53, - fontVariations = 54, - formatOnPaste = 55, - formatOnType = 56, - glyphMargin = 57, - gotoLocation = 58, - hideCursorInOverviewRuler = 59, - hover = 60, - inDiffEditor = 61, - inlineSuggest = 62, - inlineEdit = 63, - letterSpacing = 64, - lightbulb = 65, - lineDecorationsWidth = 66, - lineHeight = 67, - lineNumbers = 68, - lineNumbersMinChars = 69, - linkedEditing = 70, - links = 71, - matchBrackets = 72, - minimap = 73, - mouseStyle = 74, - mouseWheelScrollSensitivity = 75, - mouseWheelZoom = 76, - multiCursorMergeOverlapping = 77, - multiCursorModifier = 78, - multiCursorPaste = 79, - multiCursorLimit = 80, - occurrencesHighlight = 81, - overviewRulerBorder = 82, - overviewRulerLanes = 83, - padding = 84, - pasteAs = 85, - parameterHints = 86, - peekWidgetDefaultFocus = 87, - placeholder = 88, - definitionLinkOpensInPeek = 89, - quickSuggestions = 90, - quickSuggestionsDelay = 91, - readOnly = 92, - readOnlyMessage = 93, - renameOnType = 94, - renderControlCharacters = 95, - renderFinalNewline = 96, - renderLineHighlight = 97, - renderLineHighlightOnlyWhenFocus = 98, - renderValidationDecorations = 99, - renderWhitespace = 100, - revealHorizontalRightPadding = 101, - roundedSelection = 102, - rulers = 103, - scrollbar = 104, - scrollBeyondLastColumn = 105, - scrollBeyondLastLine = 106, - scrollPredominantAxis = 107, - selectionClipboard = 108, - selectionHighlight = 109, - selectOnLineNumbers = 110, - showFoldingControls = 111, - showUnused = 112, - snippetSuggestions = 113, - smartSelect = 114, - smoothScrolling = 115, - stickyScroll = 116, - stickyTabStops = 117, - stopRenderingLineAfter = 118, - suggest = 119, - suggestFontSize = 120, - suggestLineHeight = 121, - suggestOnTriggerCharacters = 122, - suggestSelection = 123, - tabCompletion = 124, - tabIndex = 125, - unicodeHighlighting = 126, - unusualLineTerminators = 127, - useShadowDOM = 128, - useTabStops = 129, - wordBreak = 130, - wordSegmenterLocales = 131, - wordSeparators = 132, - wordWrap = 133, - wordWrapBreakAfterCharacters = 134, - wordWrapBreakBeforeCharacters = 135, - wordWrapColumn = 136, - wordWrapOverride1 = 137, - wordWrapOverride2 = 138, - wrappingIndent = 139, - wrappingStrategy = 140, - showDeprecated = 141, - inlayHints = 142, - editorClassName = 143, - pixelRatio = 144, - tabFocusMode = 145, - layoutInfo = 146, - wrappingInfo = 147, - defaultColorDecorators = 148, - colorDecoratorsActivatedOn = 149, - inlineCompletionsAccessibilityVerbose = 150 + experimentalEditContextEnabled = 37, + emptySelectionClipboard = 38, + experimentalGpuAcceleration = 39, + experimentalWhitespaceRendering = 40, + extraEditorClassName = 41, + fastScrollSensitivity = 42, + find = 43, + fixedOverflowWidgets = 44, + folding = 45, + foldingStrategy = 46, + foldingHighlight = 47, + foldingImportsByDefault = 48, + foldingMaximumRegions = 49, + unfoldOnClickAfterEndOfLine = 50, + fontFamily = 51, + fontInfo = 52, + fontLigatures = 53, + fontSize = 54, + fontWeight = 55, + fontVariations = 56, + formatOnPaste = 57, + formatOnType = 58, + glyphMargin = 59, + gotoLocation = 60, + hideCursorInOverviewRuler = 61, + hover = 62, + inDiffEditor = 63, + inlineSuggest = 64, + inlineEdit = 65, + letterSpacing = 66, + lightbulb = 67, + lineDecorationsWidth = 68, + lineHeight = 69, + lineNumbers = 70, + lineNumbersMinChars = 71, + linkedEditing = 72, + links = 73, + matchBrackets = 74, + minimap = 75, + mouseStyle = 76, + mouseWheelScrollSensitivity = 77, + mouseWheelZoom = 78, + multiCursorMergeOverlapping = 79, + multiCursorModifier = 80, + multiCursorPaste = 81, + multiCursorLimit = 82, + occurrencesHighlight = 83, + overviewRulerBorder = 84, + overviewRulerLanes = 85, + padding = 86, + pasteAs = 87, + parameterHints = 88, + peekWidgetDefaultFocus = 89, + placeholder = 90, + definitionLinkOpensInPeek = 91, + quickSuggestions = 92, + quickSuggestionsDelay = 93, + readOnly = 94, + readOnlyMessage = 95, + renameOnType = 96, + renderControlCharacters = 97, + renderFinalNewline = 98, + renderLineHighlight = 99, + renderLineHighlightOnlyWhenFocus = 100, + renderValidationDecorations = 101, + renderWhitespace = 102, + revealHorizontalRightPadding = 103, + roundedSelection = 104, + rulers = 105, + scrollbar = 106, + scrollBeyondLastColumn = 107, + scrollBeyondLastLine = 108, + scrollPredominantAxis = 109, + selectionClipboard = 110, + selectionHighlight = 111, + selectOnLineNumbers = 112, + showFoldingControls = 113, + showUnused = 114, + snippetSuggestions = 115, + smartSelect = 116, + smoothScrolling = 117, + stickyScroll = 118, + stickyTabStops = 119, + stopRenderingLineAfter = 120, + suggest = 121, + suggestFontSize = 122, + suggestLineHeight = 123, + suggestOnTriggerCharacters = 124, + suggestSelection = 125, + tabCompletion = 126, + tabIndex = 127, + unicodeHighlighting = 128, + unusualLineTerminators = 129, + useShadowDOM = 130, + useTabStops = 131, + wordBreak = 132, + wordSegmenterLocales = 133, + wordSeparators = 134, + wordWrap = 135, + wordWrapBreakAfterCharacters = 136, + wordWrapBreakBeforeCharacters = 137, + wordWrapColumn = 138, + wordWrapOverride1 = 139, + wordWrapOverride2 = 140, + wrappingIndent = 141, + wrappingStrategy = 142, + showDeprecated = 143, + inlayHints = 144, + editorClassName = 145, + pixelRatio = 146, + tabFocusMode = 147, + layoutInfo = 148, + wrappingInfo = 149, + defaultColorDecorators = 150, + colorDecoratorsActivatedOn = 151, + inlineCompletionsAccessibilityVerbose = 152 } export const EditorOptions: { @@ -5053,7 +5070,9 @@ declare namespace monaco.editor { dragAndDrop: IEditorOption; emptySelectionClipboard: IEditorOption; dropIntoEditor: IEditorOption>>; + experimentalEditContextEnabled: IEditorOption; stickyScroll: IEditorOption>>; + experimentalGpuAcceleration: IEditorOption; experimentalWhitespaceRendering: IEditorOption; extraEditorClassName: IEditorOption; fastScrollSensitivity: IEditorOption; @@ -7215,6 +7234,7 @@ declare namespace monaco.languages { * Defaults to `false`. */ readonly completeBracketPairs?: boolean; + readonly isInlineEdit?: boolean; } export interface InlineCompletions { @@ -8069,7 +8089,7 @@ declare namespace monaco.languages { export interface MappedEditsContext { /** The outer array is sorted by priority - from highest to lowest. The inner arrays contain elements of the same priority. */ - documents: DocumentContextItem[][]; + readonly documents: DocumentContextItem[][]; } export interface MappedEditsProvider { diff --git a/src/vs/nls.ts b/src/vs/nls.ts index 2e9147389..e730d0a76 100644 --- a/src/vs/nls.ts +++ b/src/vs/nls.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ // eslint-disable-next-line local/code-import-patterns -import { getNLSLanguage, getNLSMessages } from 'vs/nls.messages'; +import { getNLSLanguage, getNLSMessages } from './nls.messages.js'; // eslint-disable-next-line local/code-import-patterns -export { getNLSLanguage, getNLSMessages } from 'vs/nls.messages'; +export { getNLSLanguage, getNLSMessages } from './nls.messages.js'; -const isPseudo = getNLSLanguage() === 'pseudo' || (typeof document !== 'undefined' && document.location && document.location.hash.indexOf('pseudo=true') >= 0); +const isPseudo = getNLSLanguage() === 'pseudo' || (typeof document !== 'undefined' && document.location && typeof document.location.hash === 'string' && document.location.hash.indexOf('pseudo=true') >= 0); export interface ILocalizeInfo { key: string; diff --git a/src/vs/platform/accessibility/browser/accessibilityService.ts b/src/vs/platform/accessibility/browser/accessibilityService.ts index 408fbc07b..b12806bf7 100644 --- a/src/vs/platform/accessibility/browser/accessibilityService.ts +++ b/src/vs/platform/accessibility/browser/accessibilityService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener } from 'vs/base/browser/dom'; -import { alert, status } from 'vs/base/browser/ui/aria/aria'; -import { mainWindow } from 'vs/base/browser/window'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED, IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; +import { addDisposableListener } from '../../../base/browser/dom.js'; +import { alert, status } from '../../../base/browser/ui/aria/aria.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED, IAccessibilityService } from '../common/accessibility.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IContextKey, IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { ILayoutService } from '../../layout/browser/layoutService.js'; export class AccessibilityService extends Disposable implements IAccessibilityService { declare readonly _serviceBrand: undefined; diff --git a/src/vs/platform/accessibility/browser/accessibleView.ts b/src/vs/platform/accessibility/browser/accessibleView.ts index 071afc8fa..a7b7b5724 100644 --- a/src/vs/platform/accessibility/browser/accessibleView.ts +++ b/src/vs/platform/accessibility/browser/accessibleView.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; -import { IPickerQuickAccessItem } from 'vs/platform/quickinput/browser/pickerQuickAccess'; -import { Event } from 'vs/base/common/event'; -import { IAction } from 'vs/base/common/actions'; -import { IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { IDisposable, Disposable } from 'vs/base/common/lifecycle'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IKeyboardEvent } from '../../keybinding/common/keybinding.js'; +import { IPickerQuickAccessItem } from '../../quickinput/browser/pickerQuickAccess.js'; +import { Event } from '../../../base/common/event.js'; +import { IAction } from '../../../base/common/actions.js'; +import { IQuickPickItem } from '../../quickinput/common/quickInput.js'; +import { IDisposable, Disposable } from '../../../base/common/lifecycle.js'; export const IAccessibleViewService = createDecorator('accessibleViewService'); @@ -23,14 +23,17 @@ export const enum AccessibleViewProviderId { InlineCompletions = 'inlineCompletions', KeybindingsEditor = 'keybindingsEditor', Notebook = 'notebook', + ReplEditor = 'replEditor', Editor = 'editor', Hover = 'hover', Notification = 'notification', EmptyEditorHint = 'emptyEditorHint', Comments = 'comments', + CommentThread = 'commentThread', Repl = 'repl', ReplHelp = 'replHelp', RunAndDebug = 'runAndDebug', + Walkthrough = 'walkthrough', } export const enum AccessibleViewType { diff --git a/src/vs/platform/accessibility/browser/accessibleViewRegistry.ts b/src/vs/platform/accessibility/browser/accessibleViewRegistry.ts index d915dd4e0..fd643b97d 100644 --- a/src/vs/platform/accessibility/browser/accessibleViewRegistry.ts +++ b/src/vs/platform/accessibility/browser/accessibleViewRegistry.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { AccessibleViewType, AccessibleContentProvider, ExtensionContentProvider } from 'vs/platform/accessibility/browser/accessibleView'; -import { ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { AccessibleViewType, AccessibleContentProvider, ExtensionContentProvider } from './accessibleView.js'; +import { ContextKeyExpression } from '../../contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../instantiation/common/instantiation.js'; export interface IAccessibleViewImplentation { type: AccessibleViewType; diff --git a/src/vs/platform/accessibility/common/accessibility.ts b/src/vs/platform/accessibility/common/accessibility.ts index 3022a90e8..d12fb600d 100644 --- a/src/vs/platform/accessibility/common/accessibility.ts +++ b/src/vs/platform/accessibility/common/accessibility.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { RawContextKey } from '../../contextkey/common/contextkey.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IAccessibilityService = createDecorator('accessibilityService'); diff --git a/src/vs/platform/accessibility/test/common/testAccessibilityService.ts b/src/vs/platform/accessibility/test/common/testAccessibilityService.ts index f8dbe1da8..3357330e6 100644 --- a/src/vs/platform/accessibility/test/common/testAccessibilityService.ts +++ b/src/vs/platform/accessibility/test/common/testAccessibilityService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { Event } from '../../../../base/common/event.js'; +import { IAccessibilityService, AccessibilitySupport } from '../../common/accessibility.js'; export class TestAccessibilityService implements IAccessibilityService { diff --git a/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts b/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts index b0e99c5d0..ed312b711 100644 --- a/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts +++ b/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts @@ -3,19 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CachedFunction } from 'vs/base/common/cache'; -import { getStructuralKey } from 'vs/base/common/equals'; -import { Event, IValueWithChangeEvent } from 'vs/base/common/event'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { FileAccess } from 'vs/base/common/network'; -import { derived, observableFromEvent } from 'vs/base/common/observable'; -import { ValueWithChangeEventFromObservable } from 'vs/base/common/observableInternal/utils'; -import { localize } from 'vs/nls'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { observableConfigValue } from 'vs/platform/observable/common/platformObservableUtils'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { CachedFunction } from '../../../base/common/cache.js'; +import { getStructuralKey } from '../../../base/common/equals.js'; +import { Event, IValueWithChangeEvent } from '../../../base/common/event.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { derived, observableFromEvent, ValueWithChangeEventFromObservable } from '../../../base/common/observable.js'; +import { localize } from '../../../nls.js'; +import { IAccessibilityService } from '../../accessibility/common/accessibility.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { observableConfigValue } from '../../observable/common/platformObservableUtils.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; export const IAccessibilitySignalService = createDecorator('accessibilitySignalService'); diff --git a/src/vs/platform/accessibilitySignal/browser/progressAccessibilitySignalScheduler.ts b/src/vs/platform/accessibilitySignal/browser/progressAccessibilitySignalScheduler.ts index faa617f45..40e28f2c5 100644 --- a/src/vs/platform/accessibilitySignal/browser/progressAccessibilitySignalScheduler.ts +++ b/src/vs/platform/accessibilitySignal/browser/progressAccessibilitySignalScheduler.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from './accessibilitySignalService.js'; const PROGRESS_SIGNAL_LOOP_DELAY = 5000; diff --git a/src/vs/platform/action/common/action.ts b/src/vs/platform/action/common/action.ts index c0f4c2dd0..67c67bf11 100644 --- a/src/vs/platform/action/common/action.ts +++ b/src/vs/platform/action/common/action.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI, UriDto } from 'vs/base/common/uri'; -import { ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Categories } from './actionCommonCategories'; -import { ICommandMetadata } from 'vs/platform/commands/common/commands'; +import { URI, UriDto } from '../../../base/common/uri.js'; +import { ContextKeyExpression } from '../../contextkey/common/contextkey.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { Categories } from './actionCommonCategories.js'; +import { ICommandMetadata } from '../../commands/common/commands.js'; export interface ILocalizedString { diff --git a/src/vs/platform/action/common/actionCommonCategories.ts b/src/vs/platform/action/common/actionCommonCategories.ts index dddc652d8..0d725e269 100644 --- a/src/vs/platform/action/common/actionCommonCategories.ts +++ b/src/vs/platform/action/common/actionCommonCategories.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize2 } from 'vs/nls'; +import { localize2 } from '../../../nls.js'; export const Categories = Object.freeze({ View: localize2('view', 'View'), diff --git a/src/vs/platform/actionWidget/browser/actionList.ts b/src/vs/platform/actionWidget/browser/actionList.ts index 98403a2a4..9a48bf706 100644 --- a/src/vs/platform/actionWidget/browser/actionList.ts +++ b/src/vs/platform/actionWidget/browser/actionList.ts @@ -2,22 +2,22 @@ * 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 { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { IListEvent, IListMouseEvent, IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { List } from 'vs/base/browser/ui/list/listWidget'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Codicon } from 'vs/base/common/codicons'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { OS } from 'vs/base/common/platform'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./actionWidget'; -import { localize } from 'vs/nls'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { defaultListStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { asCssVariable } from 'vs/platform/theme/common/colorRegistry'; +import * as dom from '../../../base/browser/dom.js'; +import { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { IListEvent, IListMouseEvent, IListRenderer, IListVirtualDelegate } from '../../../base/browser/ui/list/list.js'; +import { List } from '../../../base/browser/ui/list/listWidget.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { ResolvedKeybinding } from '../../../base/common/keybindings.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { OS } from '../../../base/common/platform.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import './actionWidget.css'; +import { localize } from '../../../nls.js'; +import { IContextViewService } from '../../contextview/browser/contextView.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { defaultListStyles } from '../../theme/browser/defaultStyles.js'; +import { asCssVariable } from '../../theme/common/colorRegistry.js'; export const acceptSelectedActionCommand = 'acceptSelectedCodeAction'; export const previewSelectedActionCommand = 'previewSelectedCodeAction'; @@ -166,8 +166,8 @@ export class ActionList extends Disposable { private readonly _list: List>; - private readonly _actionLineHeight = 28; - private readonly _headerLineHeight = 28; + private readonly _actionLineHeight = 24; + private readonly _headerLineHeight = 26; private readonly _allMenuItems: readonly IActionListItem[]; diff --git a/src/vs/platform/actionWidget/browser/actionWidget.css b/src/vs/platform/actionWidget/browser/actionWidget.css index b9ebc031d..d205c7ab7 100644 --- a/src/vs/platform/actionWidget/browser/actionWidget.css +++ b/src/vs/platform/actionWidget/browser/actionWidget.css @@ -132,8 +132,9 @@ /* Action bar */ .action-widget .action-widget-action-bar { - background-color: var(--vscode-editorHoverWidget-statusBarBackground); + background-color: var(--vscode-editorActionList-background); border-top: 1px solid var(--vscode-editorHoverWidget-border); + margin-top: 2px; } .action-widget .action-widget-action-bar::before { @@ -143,7 +144,7 @@ } .action-widget .action-widget-action-bar .actions-container { - padding: 0 8px; + padding: 3px 8px 0; } .action-widget-action-bar .action-label { diff --git a/src/vs/platform/actionWidget/browser/actionWidget.ts b/src/vs/platform/actionWidget/browser/actionWidget.ts index 20a030b67..450126a0f 100644 --- a/src/vs/platform/actionWidget/browser/actionWidget.ts +++ b/src/vs/platform/actionWidget/browser/actionWidget.ts @@ -2,22 +2,22 @@ * 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 { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IAnchor } from 'vs/base/browser/ui/contextview/contextview'; -import { IAction } from 'vs/base/common/actions'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import 'vs/css!./actionWidget'; -import { localize, localize2 } from 'vs/nls'; -import { acceptSelectedActionCommand, ActionList, IActionListDelegate, IActionListItem, previewSelectedActionCommand } from 'vs/platform/actionWidget/browser/actionList'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator, IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { inputActiveOptionBackground, registerColor } from 'vs/platform/theme/common/colorRegistry'; +import * as dom from '../../../base/browser/dom.js'; +import { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { IAnchor } from '../../../base/browser/ui/contextview/contextview.js'; +import { IAction } from '../../../base/common/actions.js'; +import { KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore, IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import './actionWidget.css'; +import { localize, localize2 } from '../../../nls.js'; +import { acceptSelectedActionCommand, ActionList, IActionListDelegate, IActionListItem, previewSelectedActionCommand } from './actionList.js'; +import { Action2, registerAction2 } from '../../actions/common/actions.js'; +import { IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js'; +import { IContextViewService } from '../../contextview/browser/contextView.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { createDecorator, IInstantiationService, ServicesAccessor } from '../../instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../keybinding/common/keybindingsRegistry.js'; +import { inputActiveOptionBackground, registerColor } from '../../theme/common/colorRegistry.js'; registerColor( 'actionBar.toggledBackground', diff --git a/src/vs/platform/actionWidget/common/actionWidget.ts b/src/vs/platform/actionWidget/common/actionWidget.ts index bd1714df7..70bf0aecf 100644 --- a/src/vs/platform/actionWidget/common/actionWidget.ts +++ b/src/vs/platform/actionWidget/common/actionWidget.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable } from '../../../base/common/lifecycle.js'; export interface ActionSet extends IDisposable { readonly validActions: readonly T[]; diff --git a/src/vs/platform/actions/browser/actionViewItemService.ts b/src/vs/platform/actions/browser/actionViewItemService.ts new file mode 100644 index 000000000..fa5739eec --- /dev/null +++ b/src/vs/platform/actions/browser/actionViewItemService.ts @@ -0,0 +1,80 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IActionViewItemProvider } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { MenuId } from '../common/actions.js'; + + +export const IActionViewItemService = createDecorator('IActionViewItemService'); + +export interface IActionViewItemService { + + _serviceBrand: undefined; + + onDidChange: Event; + + register(menu: MenuId, commandId: string, provider: IActionViewItemProvider, event?: Event): IDisposable; + + lookUp(menu: MenuId, commandId: string): IActionViewItemProvider | undefined; +} + +export class NullActionViewItemService implements IActionViewItemService { + _serviceBrand: undefined; + + onDidChange: Event = Event.None; + + register(menu: MenuId, commandId: string, provider: IActionViewItemProvider, event?: Event): IDisposable { + return toDisposable(() => { }); + } + + lookUp(menu: MenuId, commandId: string): IActionViewItemProvider | undefined { + return undefined; + } +} + +class ActionViewItemService implements IActionViewItemService { + + declare _serviceBrand: undefined; + + private readonly _providers = new Map(); + + private readonly _onDidChange = new Emitter(); + readonly onDidChange: Event = this._onDidChange.event; + + dispose(): void { + this._onDidChange.dispose(); + } + + register(menu: MenuId, commandId: string, provider: IActionViewItemProvider, event?: Event): IDisposable { + const id = this._makeKey(menu, commandId); + if (this._providers.has(id)) { + throw new Error(`A provider for the command ${commandId} and menu ${menu} is already registered.`); + } + this._providers.set(id, provider); + + const listener = event?.(() => { + this._onDidChange.fire(menu); + }); + + return toDisposable(() => { + listener?.dispose(); + this._providers.delete(id); + }); + } + + lookUp(menu: MenuId, commandId: string): IActionViewItemProvider | undefined { + return this._providers.get(this._makeKey(menu, commandId)); + } + + private _makeKey(menu: MenuId, commandId: string) { + return menu.id + commandId; + } +} + +registerSingleton(IActionViewItemService, ActionViewItemService, InstantiationType.Delayed); diff --git a/src/vs/platform/actions/browser/buttonbar.ts b/src/vs/platform/actions/browser/buttonbar.ts index 510267bfe..57497a383 100644 --- a/src/vs/platform/actions/browser/buttonbar.ts +++ b/src/vs/platform/actions/browser/buttonbar.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ButtonBar, IButton } from 'vs/base/browser/ui/button/button'; -import { createInstantHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import { ActionRunner, IAction, IActionRunner, SubmenuAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; -import { Codicon } from 'vs/base/common/codicons'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { localize } from 'vs/nls'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IToolBarRenderOptions } from 'vs/platform/actions/browser/toolbar'; -import { MenuId, IMenuService, MenuItemAction, IMenuActionOptions } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { ButtonBar, IButton } from '../../../base/browser/ui/button/button.js'; +import { createInstantHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import { ActionRunner, IAction, IActionRunner, SubmenuAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { localize } from '../../../nls.js'; +import { createAndFillInActionBarActions } from './menuEntryActionViewItem.js'; +import { IToolBarRenderOptions } from './toolbar.js'; +import { MenuId, IMenuService, MenuItemAction, IMenuActionOptions } from '../common/actions.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../contextview/browser/contextView.js'; +import { IHoverService } from '../../hover/browser/hover.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; export type IButtonConfigProvider = (action: IAction, index: number) => { showIcon?: boolean; diff --git a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts index 698831105..37ab03248 100644 --- a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts +++ b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as DOM from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { ActionViewItem, BaseActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; -import { IAction, IActionRunner } from 'vs/base/common/actions'; -import { Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { MenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { MenuItemAction } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; +import * as DOM from '../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { ActionViewItem, BaseActionViewItem } from '../../../base/browser/ui/actionbar/actionViewItems.js'; +import { DropdownMenuActionViewItem } from '../../../base/browser/ui/dropdown/dropdownActionViewItem.js'; +import { IAction, IActionRunner } from '../../../base/common/actions.js'; +import { Event } from '../../../base/common/event.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { ResolvedKeybinding } from '../../../base/common/keybindings.js'; +import { MenuEntryActionViewItem } from './menuEntryActionViewItem.js'; +import { MenuItemAction } from '../common/actions.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { INotificationService } from '../../notification/common/notification.js'; +import { IThemeService } from '../../theme/common/themeService.js'; +import { IContextMenuService } from '../../contextview/browser/contextView.js'; +import { IAccessibilityService } from '../../accessibility/common/accessibility.js'; +import { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js'; export interface IDropdownWithPrimaryActionViewItemOptions { actionRunner?: IActionRunner; @@ -29,7 +29,7 @@ export interface IDropdownWithPrimaryActionViewItemOptions { } export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { - private _primaryAction: ActionViewItem; + protected readonly _primaryAction: ActionViewItem; private _dropdown: DropdownMenuActionViewItem; private _container: HTMLElement | null = null; private _dropdownContainer: HTMLElement | null = null; @@ -41,10 +41,10 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { constructor( primaryAction: MenuItemAction, dropdownAction: IAction, - dropdownMenuActions: IAction[], + dropdownMenuActions: readonly IAction[], className: string, - private readonly _contextMenuProvider: IContextMenuService, private readonly _options: IDropdownWithPrimaryActionViewItemOptions | undefined, + @IContextMenuService private readonly _contextMenuProvider: IContextMenuService, @IKeybindingService _keybindingService: IKeybindingService, @INotificationService _notificationService: INotificationService, @IContextKeyService _contextKeyService: IContextKeyService, diff --git a/src/vs/platform/actions/browser/floatingMenu.ts b/src/vs/platform/actions/browser/floatingMenu.ts index e7285146a..dc72cf005 100644 --- a/src/vs/platform/actions/browser/floatingMenu.ts +++ b/src/vs/platform/actions/browser/floatingMenu.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, append, clearNode } from 'vs/base/browser/dom'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { IAction } from 'vs/base/common/actions'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { asCssVariable, asCssVariableWithDefault, buttonBackground, buttonForeground, contrastBorder, editorBackground, editorForeground } from 'vs/platform/theme/common/colorRegistry'; +import { $, append, clearNode } from '../../../base/browser/dom.js'; +import { Widget } from '../../../base/browser/ui/widget.js'; +import { IAction } from '../../../base/common/actions.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { createAndFillInActionBarActions } from './menuEntryActionViewItem.js'; +import { IMenu, IMenuService, MenuId } from '../common/actions.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { asCssVariable, asCssVariableWithDefault, buttonBackground, buttonForeground, contrastBorder, editorBackground, editorForeground } from '../../theme/common/colorRegistry.js'; export class FloatingClickWidget extends Widget { diff --git a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts index 58904af44..03080a71d 100644 --- a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts +++ b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, addDisposableListener, append, asCSSUrl, EventType, ModifierKeyEmitter, prepend } from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { ActionViewItem, BaseActionViewItem, SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { DropdownMenuActionViewItem, IDropdownMenuActionViewItemOptions } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; -import { ActionRunner, IAction, IRunEvent, Separator, SubmenuAction } from 'vs/base/common/actions'; -import { Event } from 'vs/base/common/event'; -import { UILabelProvider } from 'vs/base/common/keybindingLabels'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { combinedDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { isLinux, isWindows, OS } from 'vs/base/common/platform'; -import 'vs/css!./menuEntryActionViewItem'; -import { localize } from 'vs/nls'; -import { IMenu, IMenuActionOptions, IMenuService, MenuItemAction, SubmenuItemAction } from 'vs/platform/actions/common/actions'; -import { ICommandAction, isICommandActionToggleInfo } from 'vs/platform/action/common/action'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { isDark } from 'vs/platform/theme/common/theme'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { assertType } from 'vs/base/common/types'; -import { asCssVariable, selectBorder } from 'vs/platform/theme/common/colorRegistry'; -import { defaultSelectBoxStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; +import { $, addDisposableListener, append, asCSSUrl, EventType, ModifierKeyEmitter, prepend } from '../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { ActionViewItem, BaseActionViewItem, SelectActionViewItem } from '../../../base/browser/ui/actionbar/actionViewItems.js'; +import { DropdownMenuActionViewItem, IDropdownMenuActionViewItemOptions } from '../../../base/browser/ui/dropdown/dropdownActionViewItem.js'; +import { ActionRunner, IAction, IRunEvent, Separator, SubmenuAction } from '../../../base/common/actions.js'; +import { Event } from '../../../base/common/event.js'; +import { UILabelProvider } from '../../../base/common/keybindingLabels.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { combinedDisposable, MutableDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { isLinux, isWindows, OS } from '../../../base/common/platform.js'; +import './menuEntryActionViewItem.css'; +import { localize } from '../../../nls.js'; +import { IMenu, IMenuActionOptions, IMenuService, MenuItemAction, SubmenuItemAction } from '../common/actions.js'; +import { ICommandAction, isICommandActionToggleInfo } from '../../action/common/action.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IContextMenuService, IContextViewService } from '../../contextview/browser/contextView.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { INotificationService } from '../../notification/common/notification.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { IThemeService } from '../../theme/common/themeService.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { isDark } from '../../theme/common/theme.js'; +import { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js'; +import { assertType } from '../../../base/common/types.js'; +import { asCssVariable, selectBorder } from '../../theme/common/colorRegistry.js'; +import { defaultSelectBoxStyles } from '../../theme/browser/defaultStyles.js'; +import { IAccessibilityService } from '../../accessibility/common/accessibility.js'; +import { ResolvedKeybinding } from '../../../base/common/keybindings.js'; export function createAndFillInContextMenuActions(menu: IMenu, options: IMenuActionOptions | undefined, target: IAction[] | { primary: IAction[]; secondary: IAction[] }, primaryGroup?: string): void; export function createAndFillInContextMenuActions(menu: [string, Array][], target: IAction[] | { primary: IAction[]; secondary: IAction[] }, primaryGroup?: string): void; diff --git a/src/vs/platform/actions/browser/toolbar.ts b/src/vs/platform/actions/browser/toolbar.ts index 003ee6e78..8817e7f82 100644 --- a/src/vs/platform/actions/browser/toolbar.ts +++ b/src/vs/platform/actions/browser/toolbar.ts @@ -3,25 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener, getWindow } from 'vs/base/browser/dom'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { IToolBarOptions, ToggleMenuAction, ToolBar } from 'vs/base/browser/ui/toolbar/toolbar'; -import { IAction, Separator, SubmenuAction, toAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; -import { coalesceInPlace } from 'vs/base/common/arrays'; -import { intersection } from 'vs/base/common/collections'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuActionOptions, IMenuService, MenuId, MenuItemAction, SubmenuItemAction } from 'vs/platform/actions/common/actions'; -import { createConfigureKeybindingAction } from 'vs/platform/actions/common/menuService'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { addDisposableListener, getWindow } from '../../../base/browser/dom.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { IToolBarOptions, ToggleMenuAction, ToolBar } from '../../../base/browser/ui/toolbar/toolbar.js'; +import { IAction, Separator, SubmenuAction, toAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js'; +import { coalesceInPlace } from '../../../base/common/arrays.js'; +import { intersection } from '../../../base/common/collections.js'; +import { BugIndicatingError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; +import { createActionViewItem, createAndFillInActionBarActions } from './menuEntryActionViewItem.js'; +import { IMenuActionOptions, IMenuService, MenuId, MenuItemAction, SubmenuItemAction } from '../common/actions.js'; +import { createConfigureKeybindingAction } from '../common/menuService.js'; +import { ICommandService } from '../../commands/common/commands.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../contextview/browser/contextView.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IActionViewItemService } from './actionViewItemService.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; export const enum HiddenItemStrategy { /** This toolbar doesn't support hiding*/ @@ -313,6 +315,11 @@ export interface IMenuWorkbenchToolBarOptions extends IWorkbenchToolBarOptions { * id is used. */ resetMenu?: undefined; + + /** + * Customize the debounce delay for menu updates + */ + eventDebounceDelay?: number; } /** @@ -335,11 +342,27 @@ export class MenuWorkbenchToolBar extends WorkbenchToolBar { @IKeybindingService keybindingService: IKeybindingService, @ICommandService commandService: ICommandService, @ITelemetryService telemetryService: ITelemetryService, + @IActionViewItemService actionViewService: IActionViewItemService, + @IInstantiationService instaService: IInstantiationService, ) { - super(container, { resetMenu: menuId, ...options }, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService); + super(container, { + resetMenu: menuId, + ...options, + actionViewItemProvider: (action, opts) => { + let provider = actionViewService.lookUp(menuId, action.id); + if (!provider) { + provider = options?.actionViewItemProvider; + } + const viewItem = provider?.(action, opts); + if (viewItem) { + return viewItem; + } + return createActionViewItem(instaService, action, options); + } + }, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService); // update logic - const menu = this._store.add(menuService.createMenu(menuId, contextKeyService, { emitEventsForSubmenuChanges: true })); + const menu = this._store.add(menuService.createMenu(menuId, contextKeyService, { emitEventsForSubmenuChanges: true, eventDebounceDelay: options?.eventDebounceDelay })); const updateToolbar = () => { const primary: IAction[] = []; const secondary: IAction[] = []; @@ -357,6 +380,12 @@ export class MenuWorkbenchToolBar extends WorkbenchToolBar { updateToolbar(); this._onDidChangeMenuItems.fire(this); })); + + this._store.add(actionViewService.onDidChange(e => { + if (e === menuId) { + updateToolbar(); + } + })); updateToolbar(); } diff --git a/src/vs/platform/actions/common/actions.contribution.ts b/src/vs/platform/actions/common/actions.contribution.ts index 4c0aa9037..d0c4c353e 100644 --- a/src/vs/platform/actions/common/actions.contribution.ts +++ b/src/vs/platform/actions/common/actions.contribution.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMenuService, registerAction2 } from 'vs/platform/actions/common/actions'; -import { MenuHiddenStatesReset } from 'vs/platform/actions/common/menuResetAction'; -import { MenuService } from 'vs/platform/actions/common/menuService'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { IMenuService, registerAction2 } from './actions.js'; +import { MenuHiddenStatesReset } from './menuResetAction.js'; +import { MenuService } from './menuService.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; registerSingleton(IMenuService, MenuService, InstantiationType.Delayed); diff --git a/src/vs/platform/actions/common/actions.ts b/src/vs/platform/actions/common/actions.ts index 4647d7a46..95218276c 100644 --- a/src/vs/platform/actions/common/actions.ts +++ b/src/vs/platform/actions/common/actions.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction, SubmenuAction } from 'vs/base/common/actions'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Event, MicrotaskEmitter } from 'vs/base/common/event'; -import { DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { ICommandAction, ICommandActionTitle, Icon, ILocalizedString } from 'vs/platform/action/common/action'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingRule, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { IAction, SubmenuAction } from '../../../base/common/actions.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { Event, MicrotaskEmitter } from '../../../base/common/event.js'; +import { DisposableStore, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; +import { ICommandAction, ICommandActionTitle, Icon, ILocalizedString } from '../../action/common/action.js'; +import { Categories } from '../../action/common/actionCommonCategories.js'; +import { CommandsRegistry, ICommandService } from '../../commands/common/commands.js'; +import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { createDecorator, ServicesAccessor } from '../../instantiation/common/instantiation.js'; +import { IKeybindingRule, KeybindingsRegistry } from '../../keybinding/common/keybindingsRegistry.js'; export interface IMenuItem { command: ICommandAction; @@ -82,6 +82,7 @@ export class MenuId { static readonly ExplorerContext = new MenuId('ExplorerContext'); static readonly ExplorerContextShare = new MenuId('ExplorerContextShare'); static readonly ExtensionContext = new MenuId('ExtensionContext'); + static readonly ExtensionEditorContextMenu = new MenuId('ExtensionEditorContextMenu'); static readonly GlobalActivity = new MenuId('GlobalActivity'); static readonly CommandCenter = new MenuId('CommandCenter'); static readonly CommandCenterCenter = new MenuId('CommandCenterCenter'); @@ -113,18 +114,7 @@ export class MenuId { static readonly OpenEditorsContextShare = new MenuId('OpenEditorsContextShare'); static readonly ProblemsPanelContext = new MenuId('ProblemsPanelContext'); static readonly SCMInputBox = new MenuId('SCMInputBox'); - static readonly SCMChangesSeparator = new MenuId('SCMChangesSeparator'); static readonly SCMChangesContext = new MenuId('SCMChangesContext'); - static readonly SCMIncomingChanges = new MenuId('SCMIncomingChanges'); - static readonly SCMIncomingChangesContext = new MenuId('SCMIncomingChangesContext'); - static readonly SCMIncomingChangesSetting = new MenuId('SCMIncomingChangesSetting'); - static readonly SCMOutgoingChanges = new MenuId('SCMOutgoingChanges'); - static readonly SCMOutgoingChangesContext = new MenuId('SCMOutgoingChangesContext'); - static readonly SCMOutgoingChangesSetting = new MenuId('SCMOutgoingChangesSetting'); - static readonly SCMIncomingChangesAllChangesContext = new MenuId('SCMIncomingChangesAllChangesContext'); - static readonly SCMIncomingChangesHistoryItemContext = new MenuId('SCMIncomingChangesHistoryItemContext'); - static readonly SCMOutgoingChangesAllChangesContext = new MenuId('SCMOutgoingChangesAllChangesContext'); - static readonly SCMOutgoingChangesHistoryItemContext = new MenuId('SCMOutgoingChangesHistoryItemContext'); static readonly SCMChangeContext = new MenuId('SCMChangeContext'); static readonly SCMResourceContext = new MenuId('SCMResourceContext'); static readonly SCMResourceContextShare = new MenuId('SCMResourceContextShare'); @@ -191,6 +181,7 @@ export class MenuId { static readonly NotebookCellExecuteGoTo = new MenuId('NotebookCellExecuteGoTo'); static readonly NotebookCellExecutePrimary = new MenuId('NotebookCellExecutePrimary'); static readonly NotebookDiffCellInputTitle = new MenuId('NotebookDiffCellInputTitle'); + static readonly NotebookDiffDocumentMetadata = new MenuId('NotebookDiffDocumentMetadata'); static readonly NotebookDiffCellMetadataTitle = new MenuId('NotebookDiffCellMetadataTitle'); static readonly NotebookDiffCellOutputsTitle = new MenuId('NotebookDiffCellOutputsTitle'); static readonly NotebookOutputToolbar = new MenuId('NotebookOutputToolbar'); @@ -230,9 +221,14 @@ export class MenuId { static readonly ChatCodeBlock = new MenuId('ChatCodeblock'); static readonly ChatCompareBlock = new MenuId('ChatCompareBlock'); static readonly ChatMessageTitle = new MenuId('ChatMessageTitle'); + static readonly ChatMessageFooter = new MenuId('ChatMessageFooter'); static readonly ChatExecute = new MenuId('ChatExecute'); static readonly ChatExecuteSecondary = new MenuId('ChatExecuteSecondary'); + static readonly ChatInput = new MenuId('ChatInput'); static readonly ChatInputSide = new MenuId('ChatInputSide'); + static readonly ChatInlineResourceAnchorContext = new MenuId('ChatInlineResourceAnchorContext'); + static readonly ChatInlineSymbolAnchorContext = new MenuId('ChatInlineSymbolAnchorContext'); + static readonly ChatCommandCenter = new MenuId('ChatCommandCenter'); static readonly AccessibleView = new MenuId('AccessibleView'); static readonly MultiDiffEditorFileToolbar = new MenuId('MultiDiffEditorFileToolbar'); static readonly DiffEditorHunkToolbar = new MenuId('DiffEditorHunkToolbar'); @@ -470,7 +466,7 @@ export class SubmenuItemAction extends SubmenuAction { constructor( readonly item: ISubmenuItem, readonly hideActions: IMenuItemHide | undefined, - actions: IAction[], + actions: readonly IAction[], ) { super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, actions, 'submenu'); } diff --git a/src/vs/platform/actions/common/menuResetAction.ts b/src/vs/platform/actions/common/menuResetAction.ts index 01e77dd3c..534931a71 100644 --- a/src/vs/platform/actions/common/menuResetAction.ts +++ b/src/vs/platform/actions/common/menuResetAction.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize2 } from 'vs/nls'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { Action2, IMenuService } from 'vs/platform/actions/common/actions'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; +import { localize2 } from '../../../nls.js'; +import { Categories } from '../../action/common/actionCommonCategories.js'; +import { Action2, IMenuService } from './actions.js'; +import { ServicesAccessor } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; export class MenuHiddenStatesReset extends Action2 { diff --git a/src/vs/platform/actions/common/menuService.ts b/src/vs/platform/actions/common/menuService.ts index 33abc7acc..f5b7046bb 100644 --- a/src/vs/platform/actions/common/menuService.ts +++ b/src/vs/platform/actions/common/menuService.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { DebounceEmitter, Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IMenu, IMenuActionOptions, IMenuChangeEvent, IMenuCreateOptions, IMenuItem, IMenuItemHide, IMenuService, isIMenuItem, isISubmenuItem, ISubmenuItem, MenuId, MenuItemAction, MenuRegistry, SubmenuItemAction } from 'vs/platform/actions/common/actions'; -import { ICommandAction, ILocalizedString } from 'vs/platform/action/common/action'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IAction, Separator, toAction } from 'vs/base/common/actions'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { removeFastWithoutKeepingOrder } from 'vs/base/common/arrays'; -import { localize } from 'vs/nls'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { DebounceEmitter, Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { IMenu, IMenuActionOptions, IMenuChangeEvent, IMenuCreateOptions, IMenuItem, IMenuItemHide, IMenuService, isIMenuItem, isISubmenuItem, ISubmenuItem, MenuId, MenuItemAction, MenuRegistry, SubmenuItemAction } from './actions.js'; +import { ICommandAction, ILocalizedString } from '../../action/common/action.js'; +import { ICommandService } from '../../commands/common/commands.js'; +import { ContextKeyExpression, IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IAction, Separator, toAction } from '../../../base/common/actions.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { removeFastWithoutKeepingOrder } from '../../../base/common/arrays.js'; +import { localize } from '../../../nls.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; export class MenuService implements IMenuService { diff --git a/src/vs/platform/actions/test/common/menuService.test.ts b/src/vs/platform/actions/test/common/menuService.test.ts index 8a3b2c421..b7044f46b 100644 --- a/src/vs/platform/actions/test/common/menuService.test.ts +++ b/src/vs/platform/actions/test/common/menuService.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { generateUuid } from 'vs/base/common/uuid'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { isIMenuItem, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { MenuService } from 'vs/platform/actions/common/menuService'; -import { NullCommandService } from 'vs/platform/commands/test/common/nullCommandService'; -import { MockContextKeyService, MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; -import { InMemoryStorageService } from 'vs/platform/storage/common/storage'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { isIMenuItem, MenuId, MenuRegistry } from '../../common/actions.js'; +import { MenuService } from '../../common/menuService.js'; +import { NullCommandService } from '../../../commands/test/common/nullCommandService.js'; +import { MockContextKeyService, MockKeybindingService } from '../../../keybinding/test/common/mockKeybindingService.js'; +import { InMemoryStorageService } from '../../../storage/common/storage.js'; // --- service instances diff --git a/src/vs/platform/assignment/common/assignment.ts b/src/vs/platform/assignment/common/assignment.ts index 8a2fe3bec..9910b4dd3 100644 --- a/src/vs/platform/assignment/common/assignment.ts +++ b/src/vs/platform/assignment/common/assignment.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as platform from 'vs/base/common/platform'; +import * as platform from '../../../base/common/platform.js'; import type { IExperimentationFilterProvider } from 'tas-client-umd'; export const ASSIGNMENT_STORAGE_KEY = 'VSCode.ABExp.FeatureData'; diff --git a/src/vs/platform/assignment/common/assignmentService.ts b/src/vs/platform/assignment/common/assignmentService.ts index c573b727e..413bd60f7 100644 --- a/src/vs/platform/assignment/common/assignmentService.ts +++ b/src/vs/platform/assignment/common/assignmentService.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import type { IExperimentationTelemetry, ExperimentationService as TASClient, IKeyValueStorage } from 'tas-client-umd'; -import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils'; -import { AssignmentFilterProvider, ASSIGNMENT_REFETCH_INTERVAL, ASSIGNMENT_STORAGE_KEY, IAssignmentService, TargetPopulation } from 'vs/platform/assignment/common/assignment'; -import { importAMDNodeModule } from 'vs/amdX'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { TelemetryLevel } from '../../telemetry/common/telemetry.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IProductService } from '../../product/common/productService.js'; +import { getTelemetryLevel } from '../../telemetry/common/telemetryUtils.js'; +import { AssignmentFilterProvider, ASSIGNMENT_REFETCH_INTERVAL, ASSIGNMENT_STORAGE_KEY, IAssignmentService, TargetPopulation } from './assignment.js'; +import { importAMDNodeModule } from '../../../amdX.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; export abstract class BaseAssignmentService implements IAssignmentService { _serviceBrand: undefined; diff --git a/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow.ts b/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow.ts index 5d726261e..698f5c817 100644 --- a/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow.ts +++ b/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import { BrowserWindow, BrowserWindowConstructorOptions, WebContents } from 'electron'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateService } from 'vs/platform/state/node/state'; -import { hasNativeTitlebar, TitlebarStyle } from 'vs/platform/window/common/window'; -import { IBaseWindow, WindowMode } from 'vs/platform/window/electron-main/window'; -import { BaseWindow } from 'vs/platform/windows/electron-main/windowImpl'; +import { isLinux, isWindows } from '../../../base/common/platform.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStateService } from '../../state/node/state.js'; +import { hasNativeTitlebar, TitlebarStyle } from '../../window/common/window.js'; +import { IBaseWindow, WindowMode } from '../../window/electron-main/window.js'; +import { BaseWindow } from '../../windows/electron-main/windowImpl.js'; export interface IAuxiliaryWindow extends IBaseWindow { readonly parentId: number; diff --git a/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows.ts b/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows.ts index f79ec6bcb..7384c57f4 100644 --- a/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows.ts +++ b/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { BrowserWindowConstructorOptions, HandlerDetails, WebContents } from 'electron'; -import { Event } from 'vs/base/common/event'; -import { IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { IAuxiliaryWindow } from './auxiliaryWindow.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IAuxiliaryWindowsMainService = createDecorator('auxiliaryWindowsMainService'); diff --git a/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.ts b/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.ts index a5829812e..ea7abedf6 100644 --- a/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.ts +++ b/src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import { BrowserWindow, BrowserWindowConstructorOptions, HandlerDetails, WebContents, app } from 'electron'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { FileAccess } from 'vs/base/common/network'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { AuxiliaryWindow, IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; -import { IAuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IWindowState, WindowMode, defaultAuxWindowState } from 'vs/platform/window/electron-main/window'; -import { IDefaultBrowserWindowOptionsOverrides, WindowStateValidator, defaultBrowserWindowOptions, getLastFocused } from 'vs/platform/windows/electron-main/windows'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { AuxiliaryWindow, IAuxiliaryWindow } from './auxiliaryWindow.js'; +import { IAuxiliaryWindowsMainService } from './auxiliaryWindows.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IWindowState, WindowMode, defaultAuxWindowState } from '../../window/electron-main/window.js'; +import { IDefaultBrowserWindowOptionsOverrides, WindowStateValidator, defaultBrowserWindowOptions, getLastFocused } from '../../windows/electron-main/windows.js'; export class AuxiliaryWindowsMainService extends Disposable implements IAuxiliaryWindowsMainService { diff --git a/src/vs/platform/backup/common/backup.ts b/src/vs/platform/backup/common/backup.ts index 8185dee30..bfae94c8c 100644 --- a/src/vs/platform/backup/common/backup.ts +++ b/src/vs/platform/backup/common/backup.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { URI } from '../../../base/common/uri.js'; +import { IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export interface IBaseBackupInfo { remoteAuthority?: string; diff --git a/src/vs/platform/backup/electron-main/backup.ts b/src/vs/platform/backup/electron-main/backup.ts index 81ab8756f..7da3ae1cf 100644 --- a/src/vs/platform/backup/electron-main/backup.ts +++ b/src/vs/platform/backup/electron-main/backup.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IFolderBackupInfo, IWorkspaceBackupInfo } from 'vs/platform/backup/common/backup'; +import { IEmptyWindowBackupInfo } from '../node/backup.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IFolderBackupInfo, IWorkspaceBackupInfo } from '../common/backup.js'; export const IBackupMainService = createDecorator('backupMainService'); diff --git a/src/vs/platform/backup/electron-main/backupMainService.ts b/src/vs/platform/backup/electron-main/backupMainService.ts index fd7b1ae23..36287ebc9 100644 --- a/src/vs/platform/backup/electron-main/backupMainService.ts +++ b/src/vs/platform/backup/electron-main/backupMainService.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import { createHash } from 'crypto'; -import { isEqual } from 'vs/base/common/extpath'; -import { Schemas } from 'vs/base/common/network'; -import { join } from 'vs/base/common/path'; -import { isLinux } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { Promises, RimRafMode } from 'vs/base/node/pfs'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { ISerializedBackupWorkspaces, IEmptyWindowBackupInfo, isEmptyWindowBackupInfo, deserializeWorkspaceInfos, deserializeFolderInfos, ISerializedWorkspaceBackupInfo, ISerializedFolderBackupInfo, ISerializedEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { IStateService } from 'vs/platform/state/node/state'; -import { HotExitConfiguration, IFilesConfiguration } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IFolderBackupInfo, isFolderBackupInfo, IWorkspaceBackupInfo } from 'vs/platform/backup/common/backup'; -import { isWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { createEmptyWorkspaceIdentifier } from 'vs/platform/workspaces/node/workspaces'; +import { isEqual } from '../../../base/common/extpath.js'; +import { Schemas } from '../../../base/common/network.js'; +import { join } from '../../../base/common/path.js'; +import { isLinux } from '../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase } from '../../../base/common/resources.js'; +import { Promises, RimRafMode } from '../../../base/node/pfs.js'; +import { IBackupMainService } from './backup.js'; +import { ISerializedBackupWorkspaces, IEmptyWindowBackupInfo, isEmptyWindowBackupInfo, deserializeWorkspaceInfos, deserializeFolderInfos, ISerializedWorkspaceBackupInfo, ISerializedFolderBackupInfo, ISerializedEmptyWindowBackupInfo } from '../node/backup.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { IStateService } from '../../state/node/state.js'; +import { HotExitConfiguration, IFilesConfiguration } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IFolderBackupInfo, isFolderBackupInfo, IWorkspaceBackupInfo } from '../common/backup.js'; +import { isWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { createEmptyWorkspaceIdentifier } from '../../workspaces/node/workspaces.js'; export class BackupMainService implements IBackupMainService { diff --git a/src/vs/platform/backup/node/backup.ts b/src/vs/platform/backup/node/backup.ts index fbe1952f6..d26fa4802 100644 --- a/src/vs/platform/backup/node/backup.ts +++ b/src/vs/platform/backup/node/backup.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IBaseBackupInfo, IFolderBackupInfo, IWorkspaceBackupInfo } from 'vs/platform/backup/common/backup'; +import { URI } from '../../../base/common/uri.js'; +import { IBaseBackupInfo, IFolderBackupInfo, IWorkspaceBackupInfo } from '../common/backup.js'; export interface IEmptyWindowBackupInfo extends IBaseBackupInfo { readonly backupFolder: string; diff --git a/src/vs/platform/backup/test/electron-main/backupMainService.test.ts b/src/vs/platform/backup/test/electron-main/backupMainService.test.ts index 5ff0da22a..640f2eb58 100644 --- a/src/vs/platform/backup/test/electron-main/backupMainService.test.ts +++ b/src/vs/platform/backup/test/electron-main/backupMainService.test.ts @@ -7,26 +7,26 @@ import assert from 'assert'; import { createHash } from 'crypto'; import * as fs from 'fs'; import * as os from 'os'; -import { Schemas } from 'vs/base/common/network'; -import * as path from 'vs/base/common/path'; -import * as platform from 'vs/base/common/platform'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { Promises } from 'vs/base/node/pfs'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { BackupMainService } from 'vs/platform/backup/electron-main/backupMainService'; -import { ISerializedBackupWorkspaces, ISerializedWorkspaceBackupInfo } from 'vs/platform/backup/node/backup'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { EnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { HotExitConfiguration } from 'vs/platform/files/common/files'; -import { ConsoleMainLogger } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IFolderBackupInfo, isFolderBackupInfo, IWorkspaceBackupInfo } from 'vs/platform/backup/common/backup'; -import { IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { InMemoryTestStateMainService } from 'vs/platform/test/electron-main/workbenchTestServices'; -import { LogService } from 'vs/platform/log/common/logService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Schemas } from '../../../../base/common/network.js'; +import * as path from '../../../../base/common/path.js'; +import * as platform from '../../../../base/common/platform.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Promises } from '../../../../base/node/pfs.js'; +import { flakySuite, getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { BackupMainService } from '../../electron-main/backupMainService.js'; +import { ISerializedBackupWorkspaces, ISerializedWorkspaceBackupInfo } from '../../node/backup.js'; +import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js'; +import { EnvironmentMainService } from '../../../environment/electron-main/environmentMainService.js'; +import { OPTIONS, parseArgs } from '../../../environment/node/argv.js'; +import { HotExitConfiguration } from '../../../files/common/files.js'; +import { ConsoleMainLogger } from '../../../log/common/log.js'; +import product from '../../../product/common/product.js'; +import { IFolderBackupInfo, isFolderBackupInfo, IWorkspaceBackupInfo } from '../../common/backup.js'; +import { IWorkspaceIdentifier } from '../../../workspace/common/workspace.js'; +import { InMemoryTestStateMainService } from '../../../test/electron-main/workbenchTestServices.js'; +import { LogService } from '../../../log/common/logService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; flakySuite('BackupMainService', () => { diff --git a/src/vs/platform/checksum/common/checksumService.ts b/src/vs/platform/checksum/common/checksumService.ts index 8437e9ed2..42a1f3e1f 100644 --- a/src/vs/platform/checksum/common/checksumService.ts +++ b/src/vs/platform/checksum/common/checksumService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IChecksumService = createDecorator('checksumService'); diff --git a/src/vs/platform/checksum/node/checksumService.ts b/src/vs/platform/checksum/node/checksumService.ts index 707095fde..afd388ad7 100644 --- a/src/vs/platform/checksum/node/checksumService.ts +++ b/src/vs/platform/checksum/node/checksumService.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { createHash } from 'crypto'; -import { listenStream } from 'vs/base/common/stream'; -import { URI } from 'vs/base/common/uri'; -import { IChecksumService } from 'vs/platform/checksum/common/checksumService'; -import { IFileService } from 'vs/platform/files/common/files'; +import { listenStream } from '../../../base/common/stream.js'; +import { URI } from '../../../base/common/uri.js'; +import { IChecksumService } from '../common/checksumService.js'; +import { IFileService } from '../../files/common/files.js'; export class ChecksumService implements IChecksumService { diff --git a/src/vs/platform/checksum/test/node/checksumService.test.ts b/src/vs/platform/checksum/test/node/checksumService.test.ts index 5e7e71cdd..96f54b20d 100644 --- a/src/vs/platform/checksum/test/node/checksumService.test.ts +++ b/src/vs/platform/checksum/test/node/checksumService.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ChecksumService } from 'vs/platform/checksum/node/checksumService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { FileAccess, Schemas } from '../../../../base/common/network.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ChecksumService } from '../../node/checksumService.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../../files/node/diskFileSystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; suite('Checksum Service', () => { diff --git a/src/vs/platform/clipboard/browser/clipboardService.ts b/src/vs/platform/clipboard/browser/clipboardService.ts index 0f4a19424..787d3dac4 100644 --- a/src/vs/platform/clipboard/browser/clipboardService.ts +++ b/src/vs/platform/clipboard/browser/clipboardService.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isSafari, isWebkitWebView } from 'vs/base/browser/browser'; -import { $, addDisposableListener, getActiveDocument, getActiveWindow, isHTMLElement, onDidRegisterWindow } from 'vs/base/browser/dom'; -import { mainWindow } from 'vs/base/browser/window'; -import { DeferredPromise } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { ILogService } from 'vs/platform/log/common/log'; +import { isSafari, isWebkitWebView } from '../../../base/browser/browser.js'; +import { $, addDisposableListener, getActiveDocument, getActiveWindow, isHTMLElement, onDidRegisterWindow } from '../../../base/browser/dom.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { Event } from '../../../base/common/event.js'; +import { hash } from '../../../base/common/hash.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IClipboardService } from '../common/clipboardService.js'; +import { ILayoutService } from '../../layout/browser/layoutService.js'; +import { ILogService } from '../../log/common/log.js'; /** * Custom mime type used for storing a list of uris in the clipboard. @@ -45,6 +45,29 @@ export class BrowserClipboardService extends Disposable implements IClipboardSer }, { window: mainWindow, disposables: this._store })); } + async readImage(): Promise { + try { + const clipboardItems = await navigator.clipboard.read(); + const clipboardItem = clipboardItems[0]; + + const supportedImageTypes = ['image/png', 'image/jpeg', 'image/gif', 'image/tiff', 'image/bmp']; + const mimeType = supportedImageTypes.find(type => clipboardItem.types.includes(type)); + + if (mimeType) { + const blob = await clipboardItem.getType(mimeType); + const buffer = await blob.arrayBuffer(); + return new Uint8Array(buffer); + } else { + console.error('No supported image type found in the clipboard'); + } + } catch (error) { + console.error('Error reading image from clipboard:', error); + } + + // Return an empty Uint8Array if no image is found or an error occurs + return new Uint8Array(0); + } + private webKitPendingClipboardWritePromise: DeferredPromise | undefined; // In Safari, it has the following note: @@ -82,6 +105,7 @@ export class BrowserClipboardService extends Disposable implements IClipboardSer }); }; + this._register(Event.runAndSubscribe(this.layoutService.onDidAddContainer, ({ container, disposables }) => { disposables.add(addDisposableListener(container, 'click', handler)); disposables.add(addDisposableListener(container, 'keydown', handler)); diff --git a/src/vs/platform/clipboard/common/clipboardService.ts b/src/vs/platform/clipboard/common/clipboardService.ts index 8cc5cbc39..cef3ff821 100644 --- a/src/vs/platform/clipboard/common/clipboardService.ts +++ b/src/vs/platform/clipboard/common/clipboardService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IClipboardService = createDecorator('clipboardService'); @@ -53,4 +53,10 @@ export interface IClipboardService { * Used for implementations such as web which do not always support using the real clipboard. */ clearInternalState?(): void; + + /** + * Reads resources from the system clipboard as an image. If the clipboard does not contain an + * image, an empty buffer is returned. + */ + readImage(): Promise; } diff --git a/src/vs/platform/clipboard/test/common/testClipboardService.ts b/src/vs/platform/clipboard/test/common/testClipboardService.ts index 0ab758a99..23a20010d 100644 --- a/src/vs/platform/clipboard/test/common/testClipboardService.ts +++ b/src/vs/platform/clipboard/test/common/testClipboardService.ts @@ -3,10 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { URI } from '../../../../base/common/uri.js'; +import { IClipboardService } from '../../common/clipboardService.js'; export class TestClipboardService implements IClipboardService { + readImage(): Promise { + throw new Error('Method not implemented.'); + } _serviceBrand: undefined; diff --git a/src/vs/platform/commands/common/commands.ts b/src/vs/platform/commands/common/commands.ts index 8c76735a8..53e32c484 100644 --- a/src/vs/platform/commands/common/commands.ts +++ b/src/vs/platform/commands/common/commands.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { TypeConstraint, validateConstraints } from 'vs/base/common/types'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; +import { TypeConstraint, validateConstraints } from '../../../base/common/types.js'; +import { ILocalizedString } from '../../action/common/action.js'; +import { createDecorator, ServicesAccessor } from '../../instantiation/common/instantiation.js'; export const ICommandService = createDecorator('commandService'); diff --git a/src/vs/platform/commands/test/common/commands.test.ts b/src/vs/platform/commands/test/common/commands.test.ts index f46f8e1a6..8a1ca7bd0 100644 --- a/src/vs/platform/commands/test/common/commands.test.ts +++ b/src/vs/platform/commands/test/common/commands.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { combinedDisposable } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; +import { combinedDisposable } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { CommandsRegistry } from '../../common/commands.js'; suite('Command Tests', function () { diff --git a/src/vs/platform/commands/test/common/nullCommandService.ts b/src/vs/platform/commands/test/common/nullCommandService.ts index 8c90f7736..52c8e6b9d 100644 --- a/src/vs/platform/commands/test/common/nullCommandService.ts +++ b/src/vs/platform/commands/test/common/nullCommandService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICommandService } from 'vs/platform/commands/common/commands'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICommandService } from '../../common/commands.js'; export const NullCommandService: ICommandService = { _serviceBrand: undefined, diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index 55982dda1..770ce0f64 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import * as types from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { Event } from '../../../base/common/event.js'; +import * as types from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IWorkspaceFolder } from '../../workspace/common/workspace.js'; export const IConfigurationService = createDecorator('configurationService'); diff --git a/src/vs/platform/configuration/common/configurationModels.ts b/src/vs/platform/configuration/common/configurationModels.ts index 553c312d6..5b7a51dce 100644 --- a/src/vs/platform/configuration/common/configurationModels.ts +++ b/src/vs/platform/configuration/common/configurationModels.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Emitter, Event } from 'vs/base/common/event'; -import * as json from 'vs/base/common/json'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { getOrSet, ResourceMap } from 'vs/base/common/map'; -import * as objects from 'vs/base/common/objects'; -import { IExtUri } from 'vs/base/common/resources'; -import * as types from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { addToValueTree, ConfigurationTarget, getConfigurationValue, IConfigurationChange, IConfigurationChangeEvent, IConfigurationCompareResult, IConfigurationData, IConfigurationModel, IConfigurationOverrides, IConfigurationUpdateOverrides, IConfigurationValue, IInspectValue, IOverrides, removeFromValueTree, toValuesTree } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationScope, Extensions, IConfigurationPropertySchema, IConfigurationRegistry, overrideIdentifiersFromKey, OVERRIDE_PROPERTY_REGEX } from 'vs/platform/configuration/common/configurationRegistry'; -import { FileOperation, IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { Workspace } from 'vs/platform/workspace/common/workspace'; +import * as arrays from '../../../base/common/arrays.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import * as json from '../../../base/common/json.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { getOrSet, ResourceMap } from '../../../base/common/map.js'; +import * as objects from '../../../base/common/objects.js'; +import { IExtUri } from '../../../base/common/resources.js'; +import * as types from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { addToValueTree, ConfigurationTarget, getConfigurationValue, IConfigurationChange, IConfigurationChangeEvent, IConfigurationCompareResult, IConfigurationData, IConfigurationModel, IConfigurationOverrides, IConfigurationUpdateOverrides, IConfigurationValue, IInspectValue, IOverrides, removeFromValueTree, toValuesTree } from './configuration.js'; +import { ConfigurationScope, Extensions, IConfigurationPropertySchema, IConfigurationRegistry, overrideIdentifiersFromKey, OVERRIDE_PROPERTY_REGEX } from './configurationRegistry.js'; +import { FileOperation, IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { Registry } from '../../registry/common/platform.js'; +import { Workspace } from '../../workspace/common/workspace.js'; function freeze(data: T): T { return Object.isFrozen(data) ? data : objects.deepFreeze(data); diff --git a/src/vs/platform/configuration/common/configurationRegistry.ts b/src/vs/platform/configuration/common/configurationRegistry.ts index 7876af583..db9baccf2 100644 --- a/src/vs/platform/configuration/common/configurationRegistry.ts +++ b/src/vs/platform/configuration/common/configurationRegistry.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import * as types from 'vs/base/common/types'; -import * as nls from 'vs/nls'; -import { getLanguageTagSettingPlainKey } from 'vs/platform/configuration/common/configuration'; -import { Extensions as JSONExtensions, IJSONContributionRegistry } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; -import { PolicyName } from 'vs/platform/policy/common/policy'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { distinct } from '../../../base/common/arrays.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import * as types from '../../../base/common/types.js'; +import * as nls from '../../../nls.js'; +import { getLanguageTagSettingPlainKey } from './configuration.js'; +import { Extensions as JSONExtensions, IJSONContributionRegistry } from '../../jsonschemas/common/jsonContributionRegistry.js'; +import { PolicyName } from '../../policy/common/policy.js'; +import { Registry } from '../../registry/common/platform.js'; export enum EditPresentationTypes { Multiline = 'multilineText', @@ -863,7 +863,7 @@ export function keyFromOverrideIdentifiers(overrideIdentifiers: string[]): strin return overrideIdentifiers.reduce((result, overrideIdentifier) => `${result}[${overrideIdentifier}]`, ''); } -export function getDefaultValue(type: string | string[] | undefined): any { +export function getDefaultValue(type: string | string[] | undefined) { const t = Array.isArray(type) ? (type)[0] : type; switch (t) { case 'boolean': diff --git a/src/vs/platform/configuration/common/configurationService.ts b/src/vs/platform/configuration/common/configurationService.ts index 9de7cb2d6..59ce69bed 100644 --- a/src/vs/platform/configuration/common/configurationService.ts +++ b/src/vs/platform/configuration/common/configurationService.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct, equals as arrayEquals } from 'vs/base/common/arrays'; -import { Queue, RunOnceScheduler } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter, Event } from 'vs/base/common/event'; -import { JSONPath, ParseError, parse } from 'vs/base/common/json'; -import { applyEdits, setProperty } from 'vs/base/common/jsonEdit'; -import { Edit, FormattingOptions } from 'vs/base/common/jsonFormatter'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { equals } from 'vs/base/common/objects'; -import { OS, OperatingSystem } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ConfigurationTarget, IConfigurationChange, IConfigurationChangeEvent, IConfigurationData, IConfigurationOverrides, IConfigurationService, IConfigurationUpdateOptions, IConfigurationUpdateOverrides, IConfigurationValue, isConfigurationOverrides, isConfigurationUpdateOverrides } from 'vs/platform/configuration/common/configuration'; -import { Configuration, ConfigurationChangeEvent, ConfigurationModel, UserSettings } from 'vs/platform/configuration/common/configurationModels'; -import { keyFromOverrideIdentifiers } from 'vs/platform/configuration/common/configurationRegistry'; -import { DefaultConfiguration, IPolicyConfiguration, NullPolicyConfiguration, PolicyConfiguration } from 'vs/platform/configuration/common/configurations'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IPolicyService, NullPolicyService } from 'vs/platform/policy/common/policy'; +import { distinct, equals as arrayEquals } from '../../../base/common/arrays.js'; +import { Queue, RunOnceScheduler } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { JSONPath, ParseError, parse } from '../../../base/common/json.js'; +import { applyEdits, setProperty } from '../../../base/common/jsonEdit.js'; +import { Edit, FormattingOptions } from '../../../base/common/jsonFormatter.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { equals } from '../../../base/common/objects.js'; +import { OS, OperatingSystem } from '../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { ConfigurationTarget, IConfigurationChange, IConfigurationChangeEvent, IConfigurationData, IConfigurationOverrides, IConfigurationService, IConfigurationUpdateOptions, IConfigurationUpdateOverrides, IConfigurationValue, isConfigurationOverrides, isConfigurationUpdateOverrides } from './configuration.js'; +import { Configuration, ConfigurationChangeEvent, ConfigurationModel, UserSettings } from './configurationModels.js'; +import { keyFromOverrideIdentifiers } from './configurationRegistry.js'; +import { DefaultConfiguration, IPolicyConfiguration, NullPolicyConfiguration, PolicyConfiguration } from './configurations.js'; +import { FileOperationError, FileOperationResult, IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IPolicyService, NullPolicyService } from '../../policy/common/policy.js'; export class ConfigurationService extends Disposable implements IConfigurationService, IDisposable { diff --git a/src/vs/platform/configuration/common/configurations.ts b/src/vs/platform/configuration/common/configurations.ts index 5e3c303ad..a2f08f0a4 100644 --- a/src/vs/platform/configuration/common/configurations.ts +++ b/src/vs/platform/configuration/common/configurations.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { equals } from 'vs/base/common/objects'; -import { isEmptyObject } from 'vs/base/common/types'; -import { ConfigurationModel } from 'vs/platform/configuration/common/configurationModels'; -import { Extensions, IConfigurationRegistry, IRegisteredConfigurationPropertySchema } from 'vs/platform/configuration/common/configurationRegistry'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { IPolicyService, PolicyDefinition, PolicyName, PolicyValue } from 'vs/platform/policy/common/policy'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { coalesce } from '../../../base/common/arrays.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { equals } from '../../../base/common/objects.js'; +import { isEmptyObject } from '../../../base/common/types.js'; +import { ConfigurationModel } from './configurationModels.js'; +import { Extensions, IConfigurationRegistry, IRegisteredConfigurationPropertySchema } from './configurationRegistry.js'; +import { ILogService, NullLogService } from '../../log/common/log.js'; +import { IPolicyService, PolicyDefinition, PolicyName, PolicyValue } from '../../policy/common/policy.js'; +import { Registry } from '../../registry/common/platform.js'; export class DefaultConfiguration extends Disposable { diff --git a/src/vs/platform/configuration/test/common/configuration.test.ts b/src/vs/platform/configuration/test/common/configuration.test.ts index 1f709cf2c..620e07b20 100644 --- a/src/vs/platform/configuration/test/common/configuration.test.ts +++ b/src/vs/platform/configuration/test/common/configuration.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { merge, removeFromValueTree } from 'vs/platform/configuration/common/configuration'; -import { mergeChanges } from 'vs/platform/configuration/common/configurationModels'; +import { merge, removeFromValueTree } from '../../common/configuration.js'; +import { mergeChanges } from '../../common/configurationModels.js'; suite('Configuration', () => { diff --git a/src/vs/platform/configuration/test/common/configurationModels.test.ts b/src/vs/platform/configuration/test/common/configurationModels.test.ts index ab425c4fd..9d5ff123b 100644 --- a/src/vs/platform/configuration/test/common/configurationModels.test.ts +++ b/src/vs/platform/configuration/test/common/configurationModels.test.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ResourceMap } from 'vs/base/common/map'; -import { join } from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Configuration, ConfigurationChangeEvent, ConfigurationModel, ConfigurationModelParser, mergeChanges } from 'vs/platform/configuration/common/configurationModels'; -import { IConfigurationRegistry, Extensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { Workspace } from 'vs/platform/workspace/test/common/testWorkspace'; +import { ResourceMap } from '../../../../base/common/map.js'; +import { join } from '../../../../base/common/path.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Configuration, ConfigurationChangeEvent, ConfigurationModel, ConfigurationModelParser, mergeChanges } from '../../common/configurationModels.js'; +import { IConfigurationRegistry, Extensions, ConfigurationScope } from '../../common/configurationRegistry.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { Registry } from '../../../registry/common/platform.js'; +import { WorkspaceFolder } from '../../../workspace/common/workspace.js'; +import { Workspace } from '../../../workspace/test/common/testWorkspace.js'; suite('ConfigurationModelParser', () => { diff --git a/src/vs/platform/configuration/test/common/configurationRegistry.test.ts b/src/vs/platform/configuration/test/common/configurationRegistry.test.ts index 0f3bf7e2d..4d089e71e 100644 --- a/src/vs/platform/configuration/test/common/configurationRegistry.test.ts +++ b/src/vs/platform/configuration/test/common/configurationRegistry.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from '../../common/configurationRegistry.js'; +import { Registry } from '../../../registry/common/platform.js'; suite('ConfigurationRegistry', () => { diff --git a/src/vs/platform/configuration/test/common/configurationService.test.ts b/src/vs/platform/configuration/test/common/configurationService.test.ts index 0eff504b9..4e765d63e 100644 --- a/src/vs/platform/configuration/test/common/configurationService.test.ts +++ b/src/vs/platform/configuration/test/common/configurationService.test.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Event } from 'vs/base/common/event'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ConfigurationTarget, isConfigured } from 'vs/platform/configuration/common/configuration'; -import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { FilePolicyService } from 'vs/platform/policy/common/filePolicyService'; -import { NullPolicyService } from 'vs/platform/policy/common/policy'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { Event } from '../../../../base/common/event.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { URI } from '../../../../base/common/uri.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ConfigurationTarget, isConfigured } from '../../common/configuration.js'; +import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from '../../common/configurationRegistry.js'; +import { ConfigurationService } from '../../common/configurationService.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { FilePolicyService } from '../../../policy/common/filePolicyService.js'; +import { NullPolicyService } from '../../../policy/common/policy.js'; +import { Registry } from '../../../registry/common/platform.js'; suite('ConfigurationService.test.ts', () => { diff --git a/src/vs/platform/configuration/test/common/configurations.test.ts b/src/vs/platform/configuration/test/common/configurations.test.ts index 5b237b737..ce4b25e46 100644 --- a/src/vs/platform/configuration/test/common/configurations.test.ts +++ b/src/vs/platform/configuration/test/common/configurations.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Event } from 'vs/base/common/event'; -import { equals } from 'vs/base/common/objects'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Extensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { DefaultConfiguration } from 'vs/platform/configuration/common/configurations'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { Event } from '../../../../base/common/event.js'; +import { equals } from '../../../../base/common/objects.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Extensions, IConfigurationNode, IConfigurationRegistry } from '../../common/configurationRegistry.js'; +import { DefaultConfiguration } from '../../common/configurations.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { Registry } from '../../../registry/common/platform.js'; suite('DefaultConfiguration', () => { diff --git a/src/vs/platform/configuration/test/common/policyConfiguration.test.ts b/src/vs/platform/configuration/test/common/policyConfiguration.test.ts index d3e449936..44ef961ee 100644 --- a/src/vs/platform/configuration/test/common/policyConfiguration.test.ts +++ b/src/vs/platform/configuration/test/common/policyConfiguration.test.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { DefaultConfiguration, PolicyConfiguration } from 'vs/platform/configuration/common/configurations'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Extensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { deepClone } from 'vs/base/common/objects'; -import { IPolicyService } from 'vs/platform/policy/common/policy'; -import { FilePolicyService } from 'vs/platform/policy/common/filePolicyService'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Event } from '../../../../base/common/event.js'; +import { URI } from '../../../../base/common/uri.js'; +import { DefaultConfiguration, PolicyConfiguration } from '../../common/configurations.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { Extensions, IConfigurationNode, IConfigurationRegistry } from '../../common/configurationRegistry.js'; +import { Registry } from '../../../registry/common/platform.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { deepClone } from '../../../../base/common/objects.js'; +import { IPolicyService } from '../../../policy/common/policy.js'; +import { FilePolicyService } from '../../../policy/common/filePolicyService.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('PolicyConfiguration', () => { diff --git a/src/vs/platform/configuration/test/common/testConfigurationService.ts b/src/vs/platform/configuration/test/common/testConfigurationService.ts index 5a826f174..c2e63fa4d 100644 --- a/src/vs/platform/configuration/test/common/testConfigurationService.ts +++ b/src/vs/platform/configuration/test/common/testConfigurationService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { URI } from 'vs/base/common/uri'; -import { getConfigurationValue, IConfigurationChangeEvent, IConfigurationOverrides, IConfigurationService, IConfigurationValue, isConfigurationOverrides } from 'vs/platform/configuration/common/configuration'; -import { Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { Emitter } from '../../../../base/common/event.js'; +import { TernarySearchTree } from '../../../../base/common/ternarySearchTree.js'; +import { URI } from '../../../../base/common/uri.js'; +import { getConfigurationValue, IConfigurationChangeEvent, IConfigurationOverrides, IConfigurationService, IConfigurationValue, isConfigurationOverrides } from '../../common/configuration.js'; +import { Extensions, IConfigurationRegistry } from '../../common/configurationRegistry.js'; +import { Registry } from '../../../registry/common/platform.js'; export class TestConfigurationService implements IConfigurationService { public _serviceBrand: undefined; diff --git a/src/vs/platform/contextkey/browser/contextKeyService.ts b/src/vs/platform/contextkey/browser/contextKeyService.ts index 7329c6209..f125af404 100644 --- a/src/vs/platform/contextkey/browser/contextKeyService.ts +++ b/src/vs/platform/contextkey/browser/contextKeyService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event, PauseableEmitter } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { Disposable, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { MarshalledObject } from 'vs/base/common/marshalling'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { cloneAndChange, distinct } from 'vs/base/common/objects'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpression, ContextKeyInfo, ContextKeyValue, IContext, IContextKey, IContextKeyChangeEvent, IContextKeyService, IContextKeyServiceTarget, IReadableSet, IScopedContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { Emitter, Event, PauseableEmitter } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { Disposable, IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { MarshalledObject } from '../../../base/common/marshalling.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { cloneAndChange, distinct } from '../../../base/common/objects.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { CommandsRegistry } from '../../commands/common/commands.js'; +import { ConfigurationTarget, IConfigurationService } from '../../configuration/common/configuration.js'; +import { ContextKeyExpression, ContextKeyInfo, ContextKeyValue, IContext, IContextKey, IContextKeyChangeEvent, IContextKeyService, IContextKeyServiceTarget, IReadableSet, IScopedContextKeyService, RawContextKey } from '../common/contextkey.js'; +import { ServicesAccessor } from '../../instantiation/common/instantiation.js'; const KEYBINDING_CONTEXT_ATTR = 'data-keybinding-context'; diff --git a/src/vs/platform/contextkey/common/contextkey.ts b/src/vs/platform/contextkey/common/contextkey.ts index a461dfe4f..ef011cc6b 100644 --- a/src/vs/platform/contextkey/common/contextkey.ts +++ b/src/vs/platform/contextkey/common/contextkey.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { Event } from 'vs/base/common/event'; -import { isChrome, isEdge, isFirefox, isLinux, isMacintosh, isSafari, isWeb, isWindows } from 'vs/base/common/platform'; -import { isFalsyOrWhitespace } from 'vs/base/common/strings'; -import { Scanner, LexingError, Token, TokenType } from 'vs/platform/contextkey/common/scanner'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { localize } from 'vs/nls'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { illegalArgument } from 'vs/base/common/errors'; +import { CharCode } from '../../../base/common/charCode.js'; +import { Event } from '../../../base/common/event.js'; +import { isChrome, isEdge, isFirefox, isLinux, isMacintosh, isSafari, isWeb, isWindows } from '../../../base/common/platform.js'; +import { isFalsyOrWhitespace } from '../../../base/common/strings.js'; +import { Scanner, LexingError, Token, TokenType } from './scanner.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { localize } from '../../../nls.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { illegalArgument } from '../../../base/common/errors.js'; const CONSTANT_VALUES = new Map(); CONSTANT_VALUES.set('false', false); diff --git a/src/vs/platform/contextkey/common/contextkeys.ts b/src/vs/platform/contextkey/common/contextkeys.ts index 296245b46..c256dba0a 100644 --- a/src/vs/platform/contextkey/common/contextkeys.ts +++ b/src/vs/platform/contextkey/common/contextkeys.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isIOS, isLinux, isMacintosh, isMobile, isWeb, isWindows } from 'vs/base/common/platform'; -import { localize } from 'vs/nls'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { isIOS, isLinux, isMacintosh, isMobile, isWeb, isWindows } from '../../../base/common/platform.js'; +import { localize } from '../../../nls.js'; +import { RawContextKey } from './contextkey.js'; export const IsMacContext = new RawContextKey('isMac', isMacintosh, localize('isMac', "Whether the operating system is macOS")); export const IsLinuxContext = new RawContextKey('isLinux', isLinux, localize('isLinux', "Whether the operating system is Linux")); diff --git a/src/vs/platform/contextkey/common/scanner.ts b/src/vs/platform/contextkey/common/scanner.ts index 95168127c..64dff3d76 100644 --- a/src/vs/platform/contextkey/common/scanner.ts +++ b/src/vs/platform/contextkey/common/scanner.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { illegalState } from 'vs/base/common/errors'; -import { localize } from 'vs/nls'; +import { CharCode } from '../../../base/common/charCode.js'; +import { illegalState } from '../../../base/common/errors.js'; +import { localize } from '../../../nls.js'; export const enum TokenType { LParen, diff --git a/src/vs/platform/contextkey/test/browser/contextkey.test.ts b/src/vs/platform/contextkey/test/browser/contextkey.test.ts index d2301c191..53c3fc23a 100644 --- a/src/vs/platform/contextkey/test/browser/contextkey.test.ts +++ b/src/vs/platform/contextkey/test/browser/contextkey.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DeferredPromise } from 'vs/base/common/async'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { ContextKeyService, setContext } from 'vs/platform/contextkey/browser/contextKeyService'; -import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { DeferredPromise } from '../../../../base/common/async.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IConfigurationService } from '../../../configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js'; +import { ContextKeyService, setContext } from '../../browser/contextKeyService.js'; +import { ContextKeyExpr, IContextKeyService } from '../../common/contextkey.js'; +import { ServiceCollection } from '../../../instantiation/common/serviceCollection.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { ITelemetryService } from '../../../telemetry/common/telemetry.js'; suite('ContextKeyService', () => { const testDisposables = ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/platform/contextkey/test/common/contextkey.test.ts b/src/vs/platform/contextkey/test/common/contextkey.test.ts index 2555701c1..514aa6d35 100644 --- a/src/vs/platform/contextkey/test/common/contextkey.test.ts +++ b/src/vs/platform/contextkey/test/common/contextkey.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ContextKeyExpr, ContextKeyExpression, implies } from 'vs/platform/contextkey/common/contextkey'; +import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ContextKeyExpr, ContextKeyExpression, implies } from '../../common/contextkey.js'; function createContext(ctx: any) { return { diff --git a/src/vs/platform/contextkey/test/common/parser.test.ts b/src/vs/platform/contextkey/test/common/parser.test.ts index 17bfa468e..ad06b1f45 100644 --- a/src/vs/platform/contextkey/test/common/parser.test.ts +++ b/src/vs/platform/contextkey/test/common/parser.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Parser } from 'vs/platform/contextkey/common/contextkey'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Parser } from '../../common/contextkey.js'; function parseToStr(input: string): string { const parser = new Parser(); diff --git a/src/vs/platform/contextkey/test/common/scanner.test.ts b/src/vs/platform/contextkey/test/common/scanner.test.ts index dacbfbebb..ba2a42fb6 100644 --- a/src/vs/platform/contextkey/test/common/scanner.test.ts +++ b/src/vs/platform/contextkey/test/common/scanner.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Scanner, Token, TokenType } from 'vs/platform/contextkey/common/scanner'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Scanner, Token, TokenType } from '../../common/scanner.js'; suite('Context Key Scanner', () => { diff --git a/src/vs/platform/contextview/browser/contextMenuHandler.ts b/src/vs/platform/contextview/browser/contextMenuHandler.ts index abc08f922..162360af9 100644 --- a/src/vs/platform/contextview/browser/contextMenuHandler.ts +++ b/src/vs/platform/contextview/browser/contextMenuHandler.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IContextMenuDelegate } from 'vs/base/browser/contextmenu'; -import { $, addDisposableListener, EventType, getActiveElement, getWindow, isAncestor, isHTMLElement } from 'vs/base/browser/dom'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { Menu } from 'vs/base/browser/ui/menu/menu'; -import { ActionRunner, IRunEvent, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; -import { isCancellationError } from 'vs/base/common/errors'; -import { combinedDisposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { defaultMenuStyles } from 'vs/platform/theme/browser/defaultStyles'; +import { IContextMenuDelegate } from '../../../base/browser/contextmenu.js'; +import { $, addDisposableListener, EventType, getActiveElement, getWindow, isAncestor, isHTMLElement } from '../../../base/browser/dom.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { Menu } from '../../../base/browser/ui/menu/menu.js'; +import { ActionRunner, IRunEvent, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { combinedDisposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { IContextViewService } from './contextView.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { INotificationService } from '../../notification/common/notification.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { defaultMenuStyles } from '../../theme/browser/defaultStyles.js'; export interface IContextMenuHandlerOptions { diff --git a/src/vs/platform/contextview/browser/contextMenuService.ts b/src/vs/platform/contextview/browser/contextMenuService.ts index f70e34994..b6b7bea2b 100644 --- a/src/vs/platform/contextview/browser/contextMenuService.ts +++ b/src/vs/platform/contextview/browser/contextMenuService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IContextMenuDelegate } from 'vs/base/browser/contextmenu'; -import { ModifierKeyEmitter } from 'vs/base/browser/dom'; -import { IAction, Separator } from 'vs/base/common/actions'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ContextMenuHandler, IContextMenuHandlerOptions } from './contextMenuHandler'; -import { IContextMenuMenuDelegate, IContextMenuService, IContextViewService } from './contextView'; +import { IContextMenuDelegate } from '../../../base/browser/contextmenu.js'; +import { ModifierKeyEmitter } from '../../../base/browser/dom.js'; +import { IAction, Separator } from '../../../base/common/actions.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { createAndFillInContextMenuActions } from '../../actions/browser/menuEntryActionViewItem.js'; +import { IMenuService, MenuId } from '../../actions/common/actions.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { INotificationService } from '../../notification/common/notification.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { ContextMenuHandler, IContextMenuHandlerOptions } from './contextMenuHandler.js'; +import { IContextMenuMenuDelegate, IContextMenuService, IContextViewService } from './contextView.js'; export class ContextMenuService extends Disposable implements IContextMenuService { diff --git a/src/vs/platform/contextview/browser/contextView.ts b/src/vs/platform/contextview/browser/contextView.ts index 7bd31c598..1b3e8b2a8 100644 --- a/src/vs/platform/contextview/browser/contextView.ts +++ b/src/vs/platform/contextview/browser/contextView.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IContextMenuDelegate } from 'vs/base/browser/contextmenu'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { AnchorAlignment, AnchorAxisAlignment, IAnchor, IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; -import { IAction } from 'vs/base/common/actions'; -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IMenuActionOptions, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IContextMenuDelegate } from '../../../base/browser/contextmenu.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { AnchorAlignment, AnchorAxisAlignment, IAnchor, IContextViewProvider } from '../../../base/browser/ui/contextview/contextview.js'; +import { IAction } from '../../../base/common/actions.js'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { IMenuActionOptions, MenuId } from '../../actions/common/actions.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IContextViewService = createDecorator('contextViewService'); diff --git a/src/vs/platform/contextview/browser/contextViewService.ts b/src/vs/platform/contextview/browser/contextViewService.ts index dee214425..4ee1349dc 100644 --- a/src/vs/platform/contextview/browser/contextViewService.ts +++ b/src/vs/platform/contextview/browser/contextViewService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ContextView, ContextViewDOMPosition, IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { IContextViewDelegate, IContextViewService, IOpenContextView } from './contextView'; -import { getWindow } from 'vs/base/browser/dom'; +import { ContextView, ContextViewDOMPosition, IContextViewProvider } from '../../../base/browser/ui/contextview/contextview.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ILayoutService } from '../../layout/browser/layoutService.js'; +import { IContextViewDelegate, IContextViewService, IOpenContextView } from './contextView.js'; +import { getWindow } from '../../../base/browser/dom.js'; export class ContextViewHandler extends Disposable implements IContextViewProvider { diff --git a/src/vs/platform/cssDev/node/cssDevService.ts b/src/vs/platform/cssDev/node/cssDevService.ts index 98e738832..6c24e8e06 100644 --- a/src/vs/platform/cssDev/node/cssDevService.ts +++ b/src/vs/platform/cssDev/node/cssDevService.ts @@ -5,12 +5,12 @@ import { spawn } from 'child_process'; import { relative } from 'path'; -import { isESM } from 'vs/base/common/amd'; -import { FileAccess } from 'vs/base/common/network'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; +import { isESM } from '../../../base/common/amd.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; export const ICSSDevelopmentService = createDecorator('ICSSDevelopmentService'); diff --git a/src/vs/platform/debug/common/extensionHostDebug.ts b/src/vs/platform/debug/common/extensionHostDebug.ts index a519f90d2..066da9be0 100644 --- a/src/vs/platform/debug/common/extensionHostDebug.ts +++ b/src/vs/platform/debug/common/extensionHostDebug.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IExtensionHostDebugService = createDecorator('extensionHostDebugService'); diff --git a/src/vs/platform/debug/common/extensionHostDebugIpc.ts b/src/vs/platform/debug/common/extensionHostDebugIpc.ts index a2191bc2f..67b742e76 100644 --- a/src/vs/platform/debug/common/extensionHostDebugIpc.ts +++ b/src/vs/platform/debug/common/extensionHostDebugIpc.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IAttachSessionEvent, ICloseSessionEvent, IExtensionHostDebugService, IOpenExtensionWindowResult, IReloadSessionEvent, ITerminateSessionEvent } from 'vs/platform/debug/common/extensionHostDebug'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IAttachSessionEvent, ICloseSessionEvent, IExtensionHostDebugService, IOpenExtensionWindowResult, IReloadSessionEvent, ITerminateSessionEvent } from './extensionHostDebug.js'; export class ExtensionHostDebugBroadcastChannel implements IServerChannel { diff --git a/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts b/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts index 7efb571a4..97b95032a 100644 --- a/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts +++ b/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { AddressInfo, createServer } from 'net'; -import { IOpenExtensionWindowResult } from 'vs/platform/debug/common/extensionHostDebug'; -import { ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { IWindowsMainService, OpenContext } from 'vs/platform/windows/electron-main/windows'; +import { IOpenExtensionWindowResult } from '../common/extensionHostDebug.js'; +import { ExtensionHostDebugBroadcastChannel } from '../common/extensionHostDebugIpc.js'; +import { OPTIONS, parseArgs } from '../../environment/node/argv.js'; +import { IWindowsMainService, OpenContext } from '../../windows/electron-main/windows.js'; export class ElectronExtensionHostDebugBroadcastChannel extends ExtensionHostDebugBroadcastChannel { diff --git a/src/vs/platform/diagnostics/common/diagnostics.ts b/src/vs/platform/diagnostics/common/diagnostics.ts index fb30b762c..cc8a4cb37 100644 --- a/src/vs/platform/diagnostics/common/diagnostics.ts +++ b/src/vs/platform/diagnostics/common/diagnostics.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import { ProcessItem } from 'vs/base/common/processes'; -import { UriComponents } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IWorkspace } from 'vs/platform/workspace/common/workspace'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { ProcessItem } from '../../../base/common/processes.js'; +import { UriComponents } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IWorkspace } from '../../workspace/common/workspace.js'; export const ID = 'diagnosticsService'; export const IDiagnosticsService = createDecorator(ID); diff --git a/src/vs/platform/diagnostics/electron-main/diagnosticsMainService.ts b/src/vs/platform/diagnostics/electron-main/diagnosticsMainService.ts index 69506763b..39ef93b45 100644 --- a/src/vs/platform/diagnostics/electron-main/diagnosticsMainService.ts +++ b/src/vs/platform/diagnostics/electron-main/diagnosticsMainService.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import { app, BrowserWindow, Event as IpcEvent } from 'electron'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { IDiagnosticInfo, IDiagnosticInfoOptions, IMainProcessDiagnostics, IProcessDiagnostics, IRemoteDiagnosticError, IRemoteDiagnosticInfo, IWindowDiagnostics } from 'vs/platform/diagnostics/common/diagnostics'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ICodeWindow } from 'vs/platform/window/electron-main/window'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; -import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { assertIsDefined } from 'vs/base/common/types'; -import { ILogService } from 'vs/platform/log/common/log'; -import { UtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { URI } from '../../../base/common/uri.js'; +import { IDiagnosticInfo, IDiagnosticInfoOptions, IMainProcessDiagnostics, IProcessDiagnostics, IRemoteDiagnosticError, IRemoteDiagnosticInfo, IWindowDiagnostics } from '../common/diagnostics.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ICodeWindow } from '../../window/electron-main/window.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; +import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IWorkspacesManagementMainService } from '../../workspaces/electron-main/workspacesManagementMainService.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { ILogService } from '../../log/common/log.js'; +import { UtilityProcess } from '../../utilityProcess/electron-main/utilityProcess.js'; export const ID = 'diagnosticsMainService'; export const IDiagnosticsMainService = createDecorator(ID); diff --git a/src/vs/platform/diagnostics/electron-sandbox/diagnosticsService.ts b/src/vs/platform/diagnostics/electron-sandbox/diagnosticsService.ts index 4106c0a10..f984d59c5 100644 --- a/src/vs/platform/diagnostics/electron-sandbox/diagnosticsService.ts +++ b/src/vs/platform/diagnostics/electron-sandbox/diagnosticsService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDiagnosticsService } from 'vs/platform/diagnostics/common/diagnostics'; -import { registerSharedProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; +import { IDiagnosticsService } from '../common/diagnostics.js'; +import { registerSharedProcessRemoteService } from '../../ipc/electron-sandbox/services.js'; registerSharedProcessRemoteService(IDiagnosticsService, 'diagnostics'); diff --git a/src/vs/platform/diagnostics/node/diagnosticsService.ts b/src/vs/platform/diagnostics/node/diagnosticsService.ts index dca3e1ed4..5f6efd51d 100644 --- a/src/vs/platform/diagnostics/node/diagnosticsService.ts +++ b/src/vs/platform/diagnostics/node/diagnosticsService.ts @@ -5,22 +5,22 @@ import * as fs from 'fs'; import * as osLib from 'os'; -import { Promises } from 'vs/base/common/async'; -import { getNodeType, parse, ParseError } from 'vs/base/common/json'; -import { Schemas } from 'vs/base/common/network'; -import { basename, join } from 'vs/base/common/path'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { ProcessItem } from 'vs/base/common/processes'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { URI } from 'vs/base/common/uri'; -import { virtualMachineHint } from 'vs/base/node/id'; -import { IDirent, Promises as pfs } from 'vs/base/node/pfs'; -import { listProcesses } from 'vs/base/node/ps'; -import { IDiagnosticsService, IMachineInfo, IMainProcessDiagnostics, IRemoteDiagnosticError, IRemoteDiagnosticInfo, isRemoteDiagnosticError, IWorkspaceInformation, PerformanceInfo, SystemInfo, WorkspaceStatItem, WorkspaceStats } from 'vs/platform/diagnostics/common/diagnostics'; -import { ByteSize } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IWorkspace } from 'vs/platform/workspace/common/workspace'; +import { Promises } from '../../../base/common/async.js'; +import { getNodeType, parse, ParseError } from '../../../base/common/json.js'; +import { Schemas } from '../../../base/common/network.js'; +import { basename, join } from '../../../base/common/path.js'; +import { isLinux, isWindows } from '../../../base/common/platform.js'; +import { ProcessItem } from '../../../base/common/processes.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { URI } from '../../../base/common/uri.js'; +import { virtualMachineHint } from '../../../base/node/id.js'; +import { IDirent, Promises as pfs } from '../../../base/node/pfs.js'; +import { listProcesses } from '../../../base/node/ps.js'; +import { IDiagnosticsService, IMachineInfo, IMainProcessDiagnostics, IRemoteDiagnosticError, IRemoteDiagnosticInfo, isRemoteDiagnosticError, IWorkspaceInformation, PerformanceInfo, SystemInfo, WorkspaceStatItem, WorkspaceStats } from '../common/diagnostics.js'; +import { ByteSize } from '../../files/common/files.js'; +import { IProductService } from '../../product/common/productService.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IWorkspace } from '../../workspace/common/workspace.js'; interface ConfigFilePatterns { tag: string; diff --git a/src/vs/platform/dialogs/common/dialogs.ts b/src/vs/platform/dialogs/common/dialogs.ts index cc7da7137..dc1c78535 100644 --- a/src/vs/platform/dialogs/common/dialogs.ts +++ b/src/vs/platform/dialogs/common/dialogs.ts @@ -3,20 +3,20 @@ * 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 { IMarkdownString } from 'vs/base/common/htmlContent'; -import { basename } from 'vs/base/common/resources'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; -import { MessageBoxOptions } from 'vs/base/parts/sandbox/common/electronTypes'; -import { mnemonicButtonLabel } from 'vs/base/common/labels'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { deepClone } from 'vs/base/common/objects'; +import { Event } from '../../../base/common/event.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { basename } from '../../../base/common/resources.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ITelemetryData } from '../../telemetry/common/telemetry.js'; +import { MessageBoxOptions } from '../../../base/parts/sandbox/common/electronTypes.js'; +import { mnemonicButtonLabel } from '../../../base/common/labels.js'; +import { isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { IProductService } from '../../product/common/productService.js'; +import { deepClone } from '../../../base/common/objects.js'; export interface IDialogArgs { readonly confirmArgs?: IConfirmDialogArgs; diff --git a/src/vs/platform/dialogs/electron-main/dialogMainService.ts b/src/vs/platform/dialogs/electron-main/dialogMainService.ts index 2fffe78c5..102075083 100644 --- a/src/vs/platform/dialogs/electron-main/dialogMainService.ts +++ b/src/vs/platform/dialogs/electron-main/dialogMainService.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import electron from 'electron'; -import { Queue } from 'vs/base/common/async'; -import { hash } from 'vs/base/common/hash'; -import { mnemonicButtonLabel } from 'vs/base/common/labels'; -import { Disposable, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { normalizeNFC } from 'vs/base/common/normalization'; -import { isMacintosh } from 'vs/base/common/platform'; -import { Promises } from 'vs/base/node/pfs'; -import { localize } from 'vs/nls'; -import { INativeOpenDialogOptions, massageMessageBoxOptions } from 'vs/platform/dialogs/common/dialogs'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { WORKSPACE_FILTER } from 'vs/platform/workspace/common/workspace'; +import { Queue } from '../../../base/common/async.js'; +import { hash } from '../../../base/common/hash.js'; +import { mnemonicButtonLabel } from '../../../base/common/labels.js'; +import { Disposable, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { normalizeNFC } from '../../../base/common/normalization.js'; +import { isMacintosh } from '../../../base/common/platform.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { localize } from '../../../nls.js'; +import { INativeOpenDialogOptions, massageMessageBoxOptions } from '../common/dialogs.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { WORKSPACE_FILTER } from '../../workspace/common/workspace.js'; export const IDialogMainService = createDecorator('dialogMainService'); diff --git a/src/vs/platform/dialogs/test/common/dialog.test.ts b/src/vs/platform/dialogs/test/common/dialog.test.ts index 1c5db7e80..aadd0cc9a 100644 --- a/src/vs/platform/dialogs/test/common/dialog.test.ts +++ b/src/vs/platform/dialogs/test/common/dialog.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { deepEqual } from 'assert'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IMassagedMessageBoxOptions, massageMessageBoxOptions } from 'vs/platform/dialogs/common/dialogs'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; +import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IMassagedMessageBoxOptions, massageMessageBoxOptions } from '../../common/dialogs.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; suite('Dialog', () => { diff --git a/src/vs/platform/dialogs/test/common/testDialogService.ts b/src/vs/platform/dialogs/test/common/testDialogService.ts index f63897d47..e491fe9c6 100644 --- a/src/vs/platform/dialogs/test/common/testDialogService.ts +++ b/src/vs/platform/dialogs/test/common/testDialogService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import Severity from 'vs/base/common/severity'; -import { IConfirmation, IConfirmationResult, IDialogService, IInputResult, IPrompt, IPromptBaseButton, IPromptResult, IPromptResultWithCancel, IPromptWithCustomCancel, IPromptWithDefaultCancel } from 'vs/platform/dialogs/common/dialogs'; +import { Event } from '../../../../base/common/event.js'; +import Severity from '../../../../base/common/severity.js'; +import { IConfirmation, IConfirmationResult, IDialogService, IInputResult, IPrompt, IPromptBaseButton, IPromptResult, IPromptResultWithCancel, IPromptWithCustomCancel, IPromptWithDefaultCancel } from '../../common/dialogs.js'; export class TestDialogService implements IDialogService { diff --git a/src/vs/platform/dnd/browser/dnd.ts b/src/vs/platform/dnd/browser/dnd.ts index b742b3ae4..6db161514 100644 --- a/src/vs/platform/dnd/browser/dnd.ts +++ b/src/vs/platform/dnd/browser/dnd.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DataTransfers } from 'vs/base/browser/dnd'; -import { mainWindow } from 'vs/base/browser/window'; -import { DragMouseEvent } from 'vs/base/browser/mouseEvent'; -import { coalesce } from 'vs/base/common/arrays'; -import { DeferredPromise } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { ResourceMap } from 'vs/base/common/map'; -import { parse } from 'vs/base/common/marshalling'; -import { Schemas } from 'vs/base/common/network'; -import { isWeb } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IBaseTextResourceEditorInput } from 'vs/platform/editor/common/editor'; -import { HTMLFileSystemProvider } from 'vs/platform/files/browser/htmlFileSystemProvider'; -import { WebFileSystemAccess } from 'vs/platform/files/browser/webFileSystemAccess'; -import { ByteSize, IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { extractSelection } from 'vs/platform/opener/common/opener'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { DataTransfers } from '../../../base/browser/dnd.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { DragMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { coalesce } from '../../../base/common/arrays.js'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { parse } from '../../../base/common/marshalling.js'; +import { Schemas } from '../../../base/common/network.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IDialogService } from '../../dialogs/common/dialogs.js'; +import { IBaseTextResourceEditorInput } from '../../editor/common/editor.js'; +import { HTMLFileSystemProvider } from '../../files/browser/htmlFileSystemProvider.js'; +import { WebFileSystemAccess } from '../../files/browser/webFileSystemAccess.js'; +import { ByteSize, IFileService } from '../../files/common/files.js'; +import { IInstantiationService, ServicesAccessor } from '../../instantiation/common/instantiation.js'; +import { extractSelection } from '../../opener/common/opener.js'; +import { Registry } from '../../registry/common/platform.js'; export interface FileAdditionalNativeProperties { /** diff --git a/src/vs/platform/download/common/download.ts b/src/vs/platform/download/common/download.ts index cea2b9882..d608e078e 100644 --- a/src/vs/platform/download/common/download.ts +++ b/src/vs/platform/download/common/download.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IDownloadService = createDecorator('downloadService'); diff --git a/src/vs/platform/download/common/downloadIpc.ts b/src/vs/platform/download/common/downloadIpc.ts index 3e88e8f66..c3ba6d6c2 100644 --- a/src/vs/platform/download/common/downloadIpc.ts +++ b/src/vs/platform/download/common/downloadIpc.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IDownloadService } from 'vs/platform/download/common/download'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IDownloadService } from './download.js'; export class DownloadServiceChannel implements IServerChannel { diff --git a/src/vs/platform/download/common/downloadService.ts b/src/vs/platform/download/common/downloadService.ts index 7c8309713..79cedcb16 100644 --- a/src/vs/platform/download/common/downloadService.ts +++ b/src/vs/platform/download/common/downloadService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { IFileService } from 'vs/platform/files/common/files'; -import { asTextOrError, IRequestService } from 'vs/platform/request/common/request'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IDownloadService } from './download.js'; +import { IFileService } from '../../files/common/files.js'; +import { asTextOrError, IRequestService } from '../../request/common/request.js'; export class DownloadService implements IDownloadService { diff --git a/src/vs/platform/editor/common/editor.ts b/src/vs/platform/editor/common/editor.ts index 159bea6fc..ae3d50b25 100644 --- a/src/vs/platform/editor/common/editor.ts +++ b/src/vs/platform/editor/common/editor.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; export interface IResolvableEditorModel extends IDisposable { diff --git a/src/vs/platform/encryption/common/encryptionService.ts b/src/vs/platform/encryption/common/encryptionService.ts index b36ef5724..94e2bfa53 100644 --- a/src/vs/platform/encryption/common/encryptionService.ts +++ b/src/vs/platform/encryption/common/encryptionService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IEncryptionService = createDecorator('encryptionService'); export interface IEncryptionService extends ICommonEncryptionService { diff --git a/src/vs/platform/encryption/electron-main/encryptionMainService.ts b/src/vs/platform/encryption/electron-main/encryptionMainService.ts index 423f0a2b3..1b4b1e05f 100644 --- a/src/vs/platform/encryption/electron-main/encryptionMainService.ts +++ b/src/vs/platform/encryption/electron-main/encryptionMainService.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { safeStorage as safeStorageElectron, app } from 'electron'; -import { isMacintosh, isWindows } from 'vs/base/common/platform'; -import { KnownStorageProvider, IEncryptionMainService, PasswordStoreCLIOption } from 'vs/platform/encryption/common/encryptionService'; -import { ILogService } from 'vs/platform/log/common/log'; +import { isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { KnownStorageProvider, IEncryptionMainService, PasswordStoreCLIOption } from '../common/encryptionService.js'; +import { ILogService } from '../../log/common/log.js'; // These APIs are currently only supported in our custom build of electron so // we need to guard against them not being available. diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts index 6c2e2b551..109b74c06 100644 --- a/src/vs/platform/environment/common/environment.ts +++ b/src/vs/platform/environment/common/environment.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { createDecorator, refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { URI } from '../../../base/common/uri.js'; +import { NativeParsedArgs } from './argv.js'; +import { createDecorator, refineServiceDecorator } from '../../instantiation/common/instantiation.js'; export const IEnvironmentService = createDecorator('environmentService'); export const INativeEnvironmentService = refineServiceDecorator(IEnvironmentService); diff --git a/src/vs/platform/environment/common/environmentService.ts b/src/vs/platform/environment/common/environmentService.ts index cd55aa9b2..1984abb76 100644 --- a/src/vs/platform/environment/common/environmentService.ts +++ b/src/vs/platform/environment/common/environmentService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { toLocalISOString } from 'vs/base/common/date'; -import { memoize } from 'vs/base/common/decorators'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { dirname, join, normalize, resolve } from 'vs/base/common/path'; -import { env } from 'vs/base/common/process'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { ExtensionKind, IExtensionHostDebugParams, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IProductService } from 'vs/platform/product/common/productService'; +import { toLocalISOString } from '../../../base/common/date.js'; +import { memoize } from '../../../base/common/decorators.js'; +import { FileAccess, Schemas } from '../../../base/common/network.js'; +import { dirname, join, normalize, resolve } from '../../../base/common/path.js'; +import { env } from '../../../base/common/process.js'; +import { joinPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { NativeParsedArgs } from './argv.js'; +import { ExtensionKind, IExtensionHostDebugParams, INativeEnvironmentService } from './environment.js'; +import { IProductService } from '../../product/common/productService.js'; export const EXTENSION_IDENTIFIER_WITH_LOG_REGEX = /^([^.]+\..+)[:=](.+)$/; diff --git a/src/vs/platform/environment/electron-main/environmentMainService.ts b/src/vs/platform/environment/electron-main/environmentMainService.ts index dec04406a..6fe1e58d1 100644 --- a/src/vs/platform/environment/electron-main/environmentMainService.ts +++ b/src/vs/platform/environment/electron-main/environmentMainService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { memoize } from 'vs/base/common/decorators'; -import { join } from 'vs/base/common/path'; -import { isLinux } from 'vs/base/common/platform'; -import { createStaticIPCHandle } from 'vs/base/parts/ipc/node/ipc.net'; -import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { memoize } from '../../../base/common/decorators.js'; +import { join } from '../../../base/common/path.js'; +import { isLinux } from '../../../base/common/platform.js'; +import { createStaticIPCHandle } from '../../../base/parts/ipc/node/ipc.net.js'; +import { IEnvironmentService, INativeEnvironmentService } from '../common/environment.js'; +import { NativeEnvironmentService } from '../node/environmentService.js'; +import { refineServiceDecorator } from '../../instantiation/common/instantiation.js'; export const IEnvironmentMainService = refineServiceDecorator(IEnvironmentService); diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index 16a942afe..f0cec3398 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import minimist from 'minimist'; -import { isWindows } from 'vs/base/common/platform'; -import { localize } from 'vs/nls'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; +import { isWindows } from '../../../base/common/platform.js'; +import { localize } from '../../../nls.js'; +import { NativeParsedArgs } from '../common/argv.js'; /** * This code is also used by standalone cli's. Avoid adding any other dependencies. diff --git a/src/vs/platform/environment/node/argvHelper.ts b/src/vs/platform/environment/node/argvHelper.ts index a94fca911..eb645fc90 100644 --- a/src/vs/platform/environment/node/argvHelper.ts +++ b/src/vs/platform/environment/node/argvHelper.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IProcessEnvironment } from 'vs/base/common/platform'; -import { localize } from 'vs/nls'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { ErrorReporter, NATIVE_CLI_COMMANDS, OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; +import { IProcessEnvironment } from '../../../base/common/platform.js'; +import { localize } from '../../../nls.js'; +import { NativeParsedArgs } from '../common/argv.js'; +import { ErrorReporter, NATIVE_CLI_COMMANDS, OPTIONS, parseArgs } from './argv.js'; function parseAndValidate(cmdLineArgs: string[], reportWarnings: boolean): NativeParsedArgs { const onMultipleValues = (id: string, val: string) => { diff --git a/src/vs/platform/environment/node/environmentService.ts b/src/vs/platform/environment/node/environmentService.ts index c3812e86b..ae9e7e1d4 100644 --- a/src/vs/platform/environment/node/environmentService.ts +++ b/src/vs/platform/environment/node/environmentService.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { homedir, tmpdir } from 'os'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { IDebugParams } from 'vs/platform/environment/common/environment'; -import { AbstractNativeEnvironmentService, parseDebugParams } from 'vs/platform/environment/common/environmentService'; -import { getUserDataPath } from 'vs/platform/environment/node/userDataPath'; -import { IProductService } from 'vs/platform/product/common/productService'; +import { NativeParsedArgs } from '../common/argv.js'; +import { IDebugParams } from '../common/environment.js'; +import { AbstractNativeEnvironmentService, parseDebugParams } from '../common/environmentService.js'; +import { getUserDataPath } from './userDataPath.js'; +import { IProductService } from '../../product/common/productService.js'; export class NativeEnvironmentService extends AbstractNativeEnvironmentService { diff --git a/src/vs/platform/environment/node/stdin.ts b/src/vs/platform/environment/node/stdin.ts index b3e71e044..b0e0cd60c 100644 --- a/src/vs/platform/environment/node/stdin.ts +++ b/src/vs/platform/environment/node/stdin.ts @@ -5,9 +5,9 @@ import * as fs from 'fs'; import { tmpdir } from 'os'; -import { Queue } from 'vs/base/common/async'; -import { randomPath } from 'vs/base/common/extpath'; -import { resolveTerminalEncoding } from 'vs/base/node/terminalEncoding'; +import { Queue } from '../../../base/common/async.js'; +import { randomPath } from '../../../base/common/extpath.js'; +import { resolveTerminalEncoding } from '../../../base/node/terminalEncoding.js'; export function hasStdinWithoutTty() { try { diff --git a/src/vs/platform/environment/node/userDataPath.js b/src/vs/platform/environment/node/userDataPath.js index 2248dce2e..fb023fff3 100644 --- a/src/vs/platform/environment/node/userDataPath.js +++ b/src/vs/platform/environment/node/userDataPath.js @@ -9,14 +9,20 @@ 'use strict'; // ESM-uncomment-begin -// import * as os from 'os'; -// import * as path from 'path'; -// -// /** @type any */ -// const module = { exports: {} }; +import * as os from 'os'; +import * as path from 'path'; + +/** @type any */ +const module = { exports: {} }; // ESM-uncomment-end (function () { + // ESM-comment-begin + // const isESM = false; + // ESM-comment-end + // ESM-uncomment-begin + const isESM = true; + // ESM-uncomment-end /** * @import { NativeParsedArgs } from '../../environment/common/argv' @@ -117,7 +123,7 @@ }; } - if (typeof define === 'function') { + if (!isESM && typeof define === 'function') { define(['path', 'os', 'vs/base/common/process'], function ( /** @type {typeof import('path')} */ path, /** @type {typeof import('os')} */ os, @@ -127,8 +133,8 @@ }); } else if (typeof module === 'object' && typeof module.exports === 'object') { // ESM-comment-begin - const path = require('path'); - const os = require('os'); + // const path = require('path'); + // const os = require('os'); // ESM-comment-end module.exports = factory(path, os, process.env['VSCODE_CWD'] || process.cwd()); // commonjs @@ -138,5 +144,5 @@ }()); // ESM-uncomment-begin -// export const getUserDataPath = module.exports.getUserDataPath; +export const getUserDataPath = module.exports.getUserDataPath; // ESM-uncomment-end diff --git a/src/vs/platform/environment/node/wait.ts b/src/vs/platform/environment/node/wait.ts index 793d8e046..e00acbb9a 100644 --- a/src/vs/platform/environment/node/wait.ts +++ b/src/vs/platform/environment/node/wait.ts @@ -5,7 +5,7 @@ import { writeFileSync } from 'fs'; import { tmpdir } from 'os'; -import { randomPath } from 'vs/base/common/extpath'; +import { randomPath } from '../../../base/common/extpath.js'; export function createWaitMarkerFileSync(verbose?: boolean): string | undefined { const randomWaitMarkerPath = randomPath(tmpdir()); diff --git a/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts b/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts index 268f5ce52..55d0cf798 100644 --- a/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts +++ b/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { EnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import product from 'vs/platform/product/common/product'; -import { isLinux } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { EnvironmentMainService } from '../../electron-main/environmentMainService.js'; +import product from '../../../product/common/product.js'; +import { isLinux } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('EnvironmentMainService', () => { diff --git a/src/vs/platform/environment/test/node/argv.test.ts b/src/vs/platform/environment/test/node/argv.test.ts index a82be9607..f5fd600d2 100644 --- a/src/vs/platform/environment/test/node/argv.test.ts +++ b/src/vs/platform/environment/test/node/argv.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { formatOptions, Option, OptionDescriptions, Subcommand, parseArgs, ErrorReporter } from 'vs/platform/environment/node/argv'; -import { addArg } from 'vs/platform/environment/node/argvHelper'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { formatOptions, Option, OptionDescriptions, Subcommand, parseArgs, ErrorReporter } from '../../node/argv.js'; +import { addArg } from '../../node/argvHelper.js'; function o(description: string, type: 'boolean' | 'string' | 'string[]' = 'string'): Option { return { diff --git a/src/vs/platform/environment/test/node/environmentService.test.ts b/src/vs/platform/environment/test/node/environmentService.test.ts index 6f2566210..b27a76073 100644 --- a/src/vs/platform/environment/test/node/environmentService.test.ts +++ b/src/vs/platform/environment/test/node/environmentService.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { parseExtensionHostDebugPort } from 'vs/platform/environment/common/environmentService'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import product from 'vs/platform/product/common/product'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { parseExtensionHostDebugPort } from '../../common/environmentService.js'; +import { OPTIONS, parseArgs } from '../../node/argv.js'; +import { NativeEnvironmentService } from '../../node/environmentService.js'; +import product from '../../../product/common/product.js'; suite('EnvironmentService', () => { diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts index e9b5ba5c0..95aa93b86 100644 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { isMacintosh, isWindows } from 'vs/base/common/platform'; -import { flakySuite } from 'vs/base/test/common/testUtils'; +import { isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { flakySuite } from '../../../../base/test/common/testUtils.js'; function testErrorMessage(module: string): string { return `Unable to load "${module}" dependency. It was probably not compiled for the right operating system architecture or had missing build tools.`; @@ -108,30 +108,30 @@ flakySuite('Native Modules (all platforms)', () => { test('@vscode/sqlite3', async () => { // ESM-comment-begin - const sqlite3 = await import('@vscode/sqlite3'); + // const sqlite3 = await import('@vscode/sqlite3'); // ESM-comment-end // ESM-uncomment-begin - // const { default: sqlite3 } = await import('@vscode/sqlite3'); + const { default: sqlite3 } = await import('@vscode/sqlite3'); // ESM-uncomment-end assert.ok(typeof sqlite3.Database === 'function', testErrorMessage('@vscode/sqlite3')); }); test('http-proxy-agent', async () => { // ESM-comment-begin - const mod = await import('http-proxy-agent'); + // const mod = await import('http-proxy-agent'); // ESM-comment-end // ESM-uncomment-begin - // const { default: mod } = await import('http-proxy-agent'); + const { default: mod } = await import('http-proxy-agent'); // ESM-uncomment-end assert.ok(typeof mod.HttpProxyAgent === 'function', testErrorMessage('http-proxy-agent')); }); test('https-proxy-agent', async () => { // ESM-comment-begin - const mod = await import('https-proxy-agent'); + // const mod = await import('https-proxy-agent'); // ESM-comment-end // ESM-uncomment-begin - // const { default: mod } = await import('https-proxy-agent'); + const { default: mod } = await import('https-proxy-agent'); // ESM-uncomment-end assert.ok(typeof mod.HttpsProxyAgent === 'function', testErrorMessage('https-proxy-agent')); }); diff --git a/src/vs/platform/environment/test/node/userDataPath.test.ts b/src/vs/platform/environment/test/node/userDataPath.test.ts index 72278e46a..6430ac8f1 100644 --- a/src/vs/platform/environment/test/node/userDataPath.test.ts +++ b/src/vs/platform/environment/test/node/userDataPath.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { getUserDataPath } from 'vs/platform/environment/node/userDataPath'; -import product from 'vs/platform/product/common/product'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { OPTIONS, parseArgs } from '../../node/argv.js'; +import { getUserDataPath } from '../../node/userDataPath.js'; +import product from '../../../product/common/product.js'; suite('User data path', () => { diff --git a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts index 42f230be7..85e554a36 100644 --- a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts +++ b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts @@ -3,17 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct, isNonEmptyArray } from 'vs/base/common/arrays'; -import { Barrier, CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CancellationError, getErrorMessage, isCancellationError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { isWeb } from 'vs/base/common/platform'; -import { isDefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import * as nls from 'vs/nls'; +import { distinct, isNonEmptyArray } from '../../../base/common/arrays.js'; +import { Barrier, CancelablePromise, createCancelablePromise } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { CancellationError, getErrorMessage, isCancellationError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import * as nls from '../../../nls.js'; import { ExtensionManagementError, IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementParticipant, IGalleryExtension, ILocalExtension, InstallOperation, IExtensionsControlManifest, StatisticType, isTargetPlatformCompatible, TargetPlatformToString, ExtensionManagementErrorCode, @@ -21,18 +20,18 @@ import { IProductVersion, ExtensionGalleryErrorCode, EXTENSION_INSTALL_SOURCE_CONTEXT, DidUpdateExtensionMetadata, - UninstallExtensionInfo -} from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions, ExtensionKey, getGalleryExtensionId, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionType, IExtensionManifest, isApplicationScopedExtension, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { areApiProposalsCompatible } from 'vs/platform/extensions/common/extensionValidator'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; - -export type ExtensionVerificationStatus = boolean | string; + UninstallExtensionInfo, + ExtensionSignatureVerificationCode +} from './extensionManagement.js'; +import { areSameExtensions, ExtensionKey, getGalleryExtensionId, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData } from './extensionManagementUtil.js'; +import { ExtensionType, IExtensionManifest, isApplicationScopedExtension, TargetPlatform } from '../../extensions/common/extensions.js'; +import { areApiProposalsCompatible } from '../../extensions/common/extensionValidator.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; + export type InstallableExtension = { readonly manifest: IExtensionManifest; extension: IGalleryExtension | URI; options: InstallOptions }; export type InstallExtensionTaskOptions = InstallOptions & { readonly profileLocation: URI; readonly productVersion: IProductVersion }; @@ -42,7 +41,7 @@ export interface IInstallExtensionTask { readonly source: IGalleryExtension | URI; readonly operation: InstallOperation; readonly options: InstallExtensionTaskOptions; - readonly verificationStatus?: ExtensionVerificationStatus; + readonly verificationStatus?: ExtensionSignatureVerificationCode; run(): Promise; waitUntilTaskIsFinished(): Promise; cancel(): void; @@ -224,6 +223,32 @@ export abstract class AbstractExtensionManagementService extends Disposable impl const getInstallExtensionTaskKey = (extension: IGalleryExtension, profileLocation: URI) => `${ExtensionKey.create(extension).toString()}-${profileLocation.toString()}`; const createInstallExtensionTask = (manifest: IExtensionManifest, extension: IGalleryExtension | URI, options: InstallExtensionTaskOptions, root: IInstallExtensionTask | undefined): void => { + if (!URI.isUri(extension)) { + if (installingExtensionsMap.has(`${extension.identifier.id.toLowerCase()}-${options.profileLocation.toString()}`)) { + return; + } + const existingInstallingExtension = this.installingExtensions.get(getInstallExtensionTaskKey(extension, options.profileLocation)); + if (existingInstallingExtension) { + if (root && this.canWaitForTask(root, existingInstallingExtension.task)) { + const identifier = existingInstallingExtension.task.identifier; + this.logService.info('Waiting for already requested installing extension', identifier.id, root.identifier.id, options.profileLocation.toString()); + existingInstallingExtension.waitingTasks.push(root); + // add promise that waits until the extension is completely installed, ie., onDidInstallExtensions event is triggered for this extension + alreadyRequestedInstallations.push( + Event.toPromise( + Event.filter(this.onDidInstallExtensions, results => results.some(result => areSameExtensions(result.identifier, identifier))) + ).then(results => { + this.logService.info('Finished waiting for already requested installing extension', identifier.id, root.identifier.id, options.profileLocation.toString()); + const result = results.find(result => areSameExtensions(result.identifier, identifier)); + if (!result?.local) { + // Extension failed to install + throw new Error(`Extension ${identifier.id} is not installed`); + } + })); + } + return; + } + } const installExtensionTask = this.createInstallExtensionTask(manifest, extension, options); const key = `${getGalleryExtensionId(manifest.publisher, manifest.name)}-${options.profileLocation.toString()}`; installingExtensionsMap.set(key, { task: installExtensionTask, root }); @@ -266,31 +291,10 @@ export abstract class AbstractExtensionManagementService extends Disposable impl const installed = await this.getInstalled(undefined, task.options.profileLocation, task.options.productVersion); const options: InstallExtensionTaskOptions = { ...task.options, context: { ...task.options.context, [EXTENSION_INSTALL_DEP_PACK_CONTEXT]: true } }; for (const { gallery, manifest } of distinct(allDepsAndPackExtensionsToInstall, ({ gallery }) => gallery.identifier.id)) { - if (installingExtensionsMap.has(`${gallery.identifier.id.toLowerCase()}-${options.profileLocation.toString()}`)) { + if (installed.some(({ identifier }) => areSameExtensions(identifier, gallery.identifier))) { continue; } - const existingInstallingExtension = this.installingExtensions.get(getInstallExtensionTaskKey(gallery, options.profileLocation)); - if (existingInstallingExtension) { - if (this.canWaitForTask(task, existingInstallingExtension.task)) { - const identifier = existingInstallingExtension.task.identifier; - this.logService.info('Waiting for already requested installing extension', identifier.id, task.identifier.id, options.profileLocation.toString()); - existingInstallingExtension.waitingTasks.push(task); - // add promise that waits until the extension is completely installed, ie., onDidInstallExtensions event is triggered for this extension - alreadyRequestedInstallations.push( - Event.toPromise( - Event.filter(this.onDidInstallExtensions, results => results.some(result => areSameExtensions(result.identifier, identifier))) - ).then(results => { - this.logService.info('Finished waiting for already requested installing extension', identifier.id, task.identifier.id, options.profileLocation.toString()); - const result = results.find(result => areSameExtensions(result.identifier, identifier)); - if (!result?.local) { - // Extension failed to install - throw new Error(`Extension ${identifier.id} is not installed`); - } - })); - } - } else if (!installed.some(({ identifier }) => areSameExtensions(identifier, gallery.identifier))) { - createInstallExtensionTask(manifest, gallery, options, task); - } + createInstallExtensionTask(manifest, gallery, options, task); } } catch (error) { // Installing through VSIX @@ -310,6 +314,11 @@ export abstract class AbstractExtensionManagementService extends Disposable impl } })); + const otherProfilesToUpdate = await this.getOtherProfilesToUpdateExtension([...installingExtensionsMap.values()].map(({ task }) => task)); + for (const [profileLocation, task] of otherProfilesToUpdate) { + createInstallExtensionTask(task.manifest, task.source, { ...task.options, profileLocation }, undefined); + } + // Install extensions in parallel and wait until all extensions are installed / failed await this.joinAllSettled([...installingExtensionsMap.entries()].map(async ([key, { task }]) => { const startTime = new Date().getTime(); @@ -436,6 +445,36 @@ export abstract class AbstractExtensionManagementService extends Disposable impl } } + private async getOtherProfilesToUpdateExtension(tasks: IInstallExtensionTask[]): Promise<[URI, IInstallExtensionTask][]> { + const otherProfilesToUpdate: [URI, IInstallExtensionTask][] = []; + const profileExtensionsCache = new ResourceMap(); + for (const task of tasks) { + if (task.operation !== InstallOperation.Update + || task.options.isApplicationScoped + || task.options.pinned + || task.options.installGivenVersion + || URI.isUri(task.source) + ) { + continue; + } + for (const profile of this.userDataProfilesService.profiles) { + if (this.uriIdentityService.extUri.isEqual(profile.extensionsResource, task.options.profileLocation)) { + continue; + } + let installedExtensions = profileExtensionsCache.get(profile.extensionsResource); + if (!installedExtensions) { + installedExtensions = await this.getInstalled(ExtensionType.User, profile.extensionsResource); + profileExtensionsCache.set(profile.extensionsResource, installedExtensions); + } + const installedExtension = installedExtensions.find(e => areSameExtensions(e.identifier, task.identifier)); + if (installedExtension && !installedExtension.pinned) { + otherProfilesToUpdate.push([profile.extensionsResource, task]); + } + } + } + return otherProfilesToUpdate; + } + private canWaitForTask(taskToWait: IInstallExtensionTask, taskToWaitFor: IInstallExtensionTask): boolean { for (const [, { task, waitingTasks }] of this.installingExtensions.entries()) { if (task === taskToWait) { @@ -849,34 +888,12 @@ function reportTelemetry(telemetryService: ITelemetryService, eventName: string, durationSinceUpdate }: { extensionData: any; - verificationStatus?: - ExtensionVerificationStatus; + verificationStatus?: ExtensionSignatureVerificationCode; duration?: number; durationSinceUpdate?: number; source?: string; error?: ExtensionManagementError | ExtensionGalleryError; }): void { - let errorcode: string | undefined; - let errorcodeDetail: string | undefined; - - if (isDefined(verificationStatus)) { - if (verificationStatus === true) { - verificationStatus = 'Verified'; - } else if (verificationStatus === false) { - verificationStatus = 'Unverified'; - } else { - errorcode = ExtensionManagementErrorCode.Signature; - errorcodeDetail = verificationStatus; - verificationStatus = 'Unverified'; - } - } - - if (error) { - errorcode = error.code; - if (error.code === ExtensionManagementErrorCode.Signature) { - errorcodeDetail = error.message; - } - } /* __GDPR__ "extensionGallery:install" : { @@ -885,7 +902,6 @@ function reportTelemetry(telemetryService: ITelemetryService, eventName: string, "duration" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "durationSinceUpdate" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "errorcode": { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" }, - "errorcodeDetail": { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" }, "recommendationReason": { "retiredFromVersion": "1.23.0", "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "verificationStatus" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, "source": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, @@ -911,7 +927,6 @@ function reportTelemetry(telemetryService: ITelemetryService, eventName: string, "success": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "duration" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "errorcode": { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" }, - "errorcodeDetail": { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" }, "verificationStatus" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, "source": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, "${include}": [ @@ -919,7 +934,15 @@ function reportTelemetry(telemetryService: ITelemetryService, eventName: string, ] } */ - telemetryService.publicLog(eventName, { ...extensionData, verificationStatus, success: !error, duration, errorcode, errorcodeDetail, durationSinceUpdate, source }); + telemetryService.publicLog(eventName, { + ...extensionData, + source, + duration, + durationSinceUpdate, + success: !error, + errorcode: error?.code, + verificationStatus: verificationStatus === ExtensionSignatureVerificationCode.Success ? 'Verified' : (verificationStatus ?? 'Unverified') + }); } export abstract class AbstractExtensionTask { diff --git a/src/vs/platform/extensionManagement/common/configRemotes.ts b/src/vs/platform/extensionManagement/common/configRemotes.ts index 4db44fa4a..3f23738be 100644 --- a/src/vs/platform/extensionManagement/common/configRemotes.ts +++ b/src/vs/platform/extensionManagement/common/configRemotes.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; +import { URI } from '../../../base/common/uri.js'; const SshProtocolMatcher = /^([^@:]+@)?([^:]+):/; const SshUrlMatcher = /^([^@:]+@)?([^:]+):(.+)$/; diff --git a/src/vs/platform/extensionManagement/common/extensionEnablementService.ts b/src/vs/platform/extensionManagement/common/extensionEnablementService.ts index 61c8816e3..0a4e53378 100644 --- a/src/vs/platform/extensionManagement/common/extensionEnablementService.ts +++ b/src/vs/platform/extensionManagement/common/extensionEnablementService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isUndefinedOrNull } from 'vs/base/common/types'; -import { DISABLED_EXTENSIONS_STORAGE_PATH, IExtensionIdentifier, IExtensionManagementService, IGlobalExtensionEnablementService, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IProfileStorageValueChangeEvent, IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { isUndefinedOrNull } from '../../../base/common/types.js'; +import { DISABLED_EXTENSIONS_STORAGE_PATH, IExtensionIdentifier, IExtensionManagementService, IGlobalExtensionEnablementService, InstallOperation } from './extensionManagement.js'; +import { areSameExtensions } from './extensionManagementUtil.js'; +import { IProfileStorageValueChangeEvent, IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; export class GlobalExtensionEnablementService extends Disposable implements IGlobalExtensionEnablementService { @@ -16,15 +16,15 @@ export class GlobalExtensionEnablementService extends Disposable implements IGlo private _onDidChangeEnablement = new Emitter<{ readonly extensions: IExtensionIdentifier[]; readonly source?: string }>(); readonly onDidChangeEnablement: Event<{ readonly extensions: IExtensionIdentifier[]; readonly source?: string }> = this._onDidChangeEnablement.event; - private readonly storageManger: StorageManager; + private readonly storageManager: StorageManager; constructor( @IStorageService storageService: IStorageService, @IExtensionManagementService extensionManagementService: IExtensionManagementService, ) { super(); - this.storageManger = this._register(new StorageManager(storageService)); - this._register(this.storageManger.onDidChange(extensions => this._onDidChangeEnablement.fire({ extensions, source: 'storage' }))); + this.storageManager = this._register(new StorageManager(storageService)); + this._register(this.storageManager.onDidChange(extensions => this._onDidChangeEnablement.fire({ extensions, source: 'storage' }))); this._register(extensionManagementService.onDidInstallExtensions(e => e.forEach(({ local, operation }) => { if (local && operation === InstallOperation.Migrate) { this._removeFromDisabledExtensions(local.identifier); /* Reset migrated extensions */ @@ -84,11 +84,11 @@ export class GlobalExtensionEnablementService extends Disposable implements IGlo } private _getExtensions(storageId: string): IExtensionIdentifier[] { - return this.storageManger.get(storageId, StorageScope.PROFILE); + return this.storageManager.get(storageId, StorageScope.PROFILE); } private _setExtensions(storageId: string, extensions: IExtensionIdentifier[]): void { - this.storageManger.set(storageId, extensions, StorageScope.PROFILE); + this.storageManager.set(storageId, extensions, StorageScope.PROFILE); } } diff --git a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts index 36565d2e6..1f6ef7a53 100644 --- a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { CancellationError, getErrorMessage, isCancellationError } from 'vs/base/common/errors'; -import { IPager } from 'vs/base/common/paging'; -import { isWeb, platform } from 'vs/base/common/platform'; -import { arch } from 'vs/base/common/process'; -import { isBoolean } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IHeaders, IRequestContext, IRequestOptions, isOfflineError } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { getTargetPlatform, IExtensionGalleryService, IExtensionIdentifier, IExtensionInfo, IGalleryExtension, IGalleryExtensionAsset, IGalleryExtensionAssets, IGalleryExtensionVersion, InstallOperation, IQueryOptions, IExtensionsControlManifest, isNotWebExtensionInWebTargetPlatform, isTargetPlatformCompatible, ITranslation, SortBy, SortOrder, StatisticType, toTargetPlatform, WEB_EXTENSION_TAG, IExtensionQueryOptions, IDeprecationInfo, ISearchPrefferedResults, ExtensionGalleryError, ExtensionGalleryErrorCode, IProductVersion } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { adoptToGalleryExtensionId, areSameExtensions, getGalleryExtensionId, getGalleryExtensionTelemetryData } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { areApiProposalsCompatible, isEngineValid } from 'vs/platform/extensions/common/extensionValidator'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { asJson, asTextOrError, IRequestService, isSuccess } from 'vs/platform/request/common/request'; -import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { StopWatch } from 'vs/base/common/stopwatch'; +import { distinct } from '../../../base/common/arrays.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { CancellationError, getErrorMessage, isCancellationError } from '../../../base/common/errors.js'; +import { IPager } from '../../../base/common/paging.js'; +import { isWeb, platform } from '../../../base/common/platform.js'; +import { arch } from '../../../base/common/process.js'; +import { isBoolean } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { IHeaders, IRequestContext, IRequestOptions, isOfflineError } from '../../../base/parts/request/common/request.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { getTargetPlatform, IExtensionGalleryService, IExtensionIdentifier, IExtensionInfo, IGalleryExtension, IGalleryExtensionAsset, IGalleryExtensionAssets, IGalleryExtensionVersion, InstallOperation, IQueryOptions, IExtensionsControlManifest, isNotWebExtensionInWebTargetPlatform, isTargetPlatformCompatible, ITranslation, SortBy, SortOrder, StatisticType, toTargetPlatform, WEB_EXTENSION_TAG, IExtensionQueryOptions, IDeprecationInfo, ISearchPrefferedResults, ExtensionGalleryError, ExtensionGalleryErrorCode, IProductVersion } from './extensionManagement.js'; +import { adoptToGalleryExtensionId, areSameExtensions, getGalleryExtensionId, getGalleryExtensionTelemetryData } from './extensionManagementUtil.js'; +import { IExtensionManifest, TargetPlatform } from '../../extensions/common/extensions.js'; +import { areApiProposalsCompatible, isEngineValid } from '../../extensions/common/extensionValidator.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { asJson, asTextOrError, IRequestService, isSuccess } from '../../request/common/request.js'; +import { resolveMarketplaceHeaders } from '../../externalServices/common/marketplace.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; const CURRENT_TARGET_PLATFORM = isWeb ? TargetPlatform.WEB : getTargetPlatform(platform, arch); const ACTIVITY_HEADER_NAME = 'X-Market-Search-Activity-Id'; @@ -348,7 +348,7 @@ class Query { return new Query({ ...this.state, source }); } - get raw(): any { + get raw() { const { criteria, pageNumber, pageSize, sortBy, sortOrder, flags, assetTypes } = this.state; const filters = [{ criteria, pageNumber, pageSize, sortBy, sortOrder }]; return { filters, assetTypes, flags }; diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts index 83ed0c519..ea7b30d94 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Event } from 'vs/base/common/event'; -import { IPager } from 'vs/base/common/paging'; -import { Platform } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { localize2 } from 'vs/nls'; -import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Event } from '../../../base/common/event.js'; +import { IPager } from '../../../base/common/paging.js'; +import { Platform } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize2 } from '../../../nls.js'; +import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from '../../extensions/common/extensions.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const EXTENSION_IDENTIFIER_PATTERN = '^([a-z0-9A-Z][a-z0-9-A-Z]*)\\.([a-z0-9A-Z][a-z0-9-A-Z]*)$'; export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN); @@ -462,7 +462,9 @@ export const enum ExtensionManagementErrorCode { PostInstall = 'PostInstall', CorruptZip = 'CorruptZip', IncompleteZip = 'IncompleteZip', - Signature = 'Signature', + PackageNotSigned = 'PackageNotSigned', + SignatureVerificationInternal = 'SignatureVerificationInternal', + SignatureVerificationFailed = 'SignatureVerificationFailed', NotAllowed = 'NotAllowed', Gallery = 'Gallery', Cancelled = 'Cancelled', @@ -470,6 +472,35 @@ export const enum ExtensionManagementErrorCode { Internal = 'Internal', } +export enum ExtensionSignatureVerificationCode { + 'Success' = 'Success', + 'RequiredArgumentMissing' = 'RequiredArgumentMissing', // A required argument is missing. + 'InvalidArgument' = 'InvalidArgument', // An argument is invalid. + 'PackageIsUnreadable' = 'PackageIsUnreadable', // The extension package is unreadable. + 'UnhandledException' = 'UnhandledException', // An unhandled exception occurred. + 'SignatureManifestIsMissing' = 'SignatureManifestIsMissing', // The extension is missing a signature manifest file (.signature.manifest). + 'SignatureManifestIsUnreadable' = 'SignatureManifestIsUnreadable', // The signature manifest is unreadable. + 'SignatureIsMissing' = 'SignatureIsMissing', // The extension is missing a signature file (.signature.p7s). + 'SignatureIsUnreadable' = 'SignatureIsUnreadable', // The signature is unreadable. + 'CertificateIsUnreadable' = 'CertificateIsUnreadable', // The certificate is unreadable. + 'SignatureArchiveIsUnreadable' = 'SignatureArchiveIsUnreadable', + 'FileAlreadyExists' = 'FileAlreadyExists', // The output file already exists. + 'SignatureArchiveIsInvalidZip' = 'SignatureArchiveIsInvalidZip', + 'SignatureArchiveHasSameSignatureFile' = 'SignatureArchiveHasSameSignatureFile', // The signature archive has the same signature file. + 'PackageIntegrityCheckFailed' = 'PackageIntegrityCheckFailed', // The package integrity check failed. + 'SignatureIsInvalid' = 'SignatureIsInvalid', // The extension has an invalid signature file (.signature.p7s). + 'SignatureManifestIsInvalid' = 'SignatureManifestIsInvalid', // The extension has an invalid signature manifest file (.signature.manifest). + 'SignatureIntegrityCheckFailed' = 'SignatureIntegrityCheckFailed', // The extension's signature integrity check failed. Extension integrity is suspect. + 'EntryIsMissing' = 'EntryIsMissing', // An entry referenced in the signature manifest was not found in the extension. + 'EntryIsTampered' = 'EntryIsTampered', // The integrity check for an entry referenced in the signature manifest failed. + 'Untrusted' = 'Untrusted', // An X.509 certificate in the extension signature is untrusted. + 'CertificateRevoked' = 'CertificateRevoked', // An X.509 certificate in the extension signature has been revoked. + 'SignatureIsNotValid' = 'SignatureIsNotValid', // The extension signature is invalid. + 'UnknownError' = 'UnknownError', // An unknown error occurred. + 'PackageIsInvalidZip' = 'PackageIsInvalidZip', // The extension package is not valid ZIP format. + 'SignatureArchiveHasTooManyEntries' = 'SignatureArchiveHasTooManyEntries', // The signature archive has too many entries. +} + export class ExtensionManagementError extends Error { constructor(message: string, readonly code: ExtensionManagementErrorCode) { super(message); diff --git a/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts b/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts index 064420130..69ba77c8c 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { getErrorMessage, isCancellationError } from 'vs/base/common/errors'; -import { Schemas } from 'vs/base/common/network'; -import { basename } from 'vs/base/common/resources'; -import { gt } from 'vs/base/common/semver/semver'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { EXTENSION_IDENTIFIER_REGEX, IExtensionGalleryService, IExtensionInfo, IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOptions, InstallExtensionInfo, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions, getExtensionId, getGalleryExtensionId, getIdAndVersion } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionType, EXTENSION_CATEGORIES, IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { ILogger } from 'vs/platform/log/common/log'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { getErrorMessage, isCancellationError } from '../../../base/common/errors.js'; +import { Schemas } from '../../../base/common/network.js'; +import { basename } from '../../../base/common/resources.js'; +import { gt } from '../../../base/common/semver/semver.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { EXTENSION_IDENTIFIER_REGEX, IExtensionGalleryService, IExtensionInfo, IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOptions, InstallExtensionInfo, InstallOperation } from './extensionManagement.js'; +import { areSameExtensions, getExtensionId, getGalleryExtensionId, getIdAndVersion } from './extensionManagementUtil.js'; +import { ExtensionType, EXTENSION_CATEGORIES, IExtensionManifest } from '../../extensions/common/extensions.js'; +import { ILogger } from '../../log/common/log.js'; const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id); diff --git a/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts b/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts index 2785a41f7..33d368d73 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { cloneAndChange } from 'vs/base/common/objects'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { DefaultURITransformer, IURITransformer, transformAndReviveIncomingURIs } from 'vs/base/common/uriIpc'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IExtensionIdentifier, IExtensionTipsService, IGalleryExtension, ILocalExtension, IExtensionsControlManifest, isTargetPlatformCompatible, InstallOptions, UninstallOptions, Metadata, IExtensionManagementService, DidUninstallExtensionEvent, InstallExtensionEvent, InstallExtensionResult, UninstallExtensionEvent, InstallOperation, InstallExtensionInfo, IProductVersion, DidUpdateExtensionMetadata, UninstallExtensionInfo } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionType, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { cloneAndChange } from '../../../base/common/objects.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { DefaultURITransformer, IURITransformer, transformAndReviveIncomingURIs } from '../../../base/common/uriIpc.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IExtensionIdentifier, IExtensionTipsService, IGalleryExtension, ILocalExtension, IExtensionsControlManifest, isTargetPlatformCompatible, InstallOptions, UninstallOptions, Metadata, IExtensionManagementService, DidUninstallExtensionEvent, InstallExtensionEvent, InstallExtensionResult, UninstallExtensionEvent, InstallOperation, InstallExtensionInfo, IProductVersion, DidUpdateExtensionMetadata, UninstallExtensionInfo } from './extensionManagement.js'; +import { ExtensionType, IExtensionManifest, TargetPlatform } from '../../extensions/common/extensions.js'; function transformIncomingURI(uri: UriComponents, transformer: IURITransformer | null): URI; function transformIncomingURI(uri: UriComponents | undefined, transformer: IURITransformer | null): URI | undefined; @@ -187,34 +187,48 @@ export class ExtensionManagementChannelClient extends Disposable implements IExt declare readonly _serviceBrand: undefined; - private readonly _onInstallExtension = this._register(new Emitter()); + protected readonly _onInstallExtension = this._register(new Emitter()); get onInstallExtension() { return this._onInstallExtension.event; } - private readonly _onDidInstallExtensions = this._register(new Emitter()); + protected readonly _onDidInstallExtensions = this._register(new Emitter()); get onDidInstallExtensions() { return this._onDidInstallExtensions.event; } - private readonly _onUninstallExtension = this._register(new Emitter()); + protected readonly _onUninstallExtension = this._register(new Emitter()); get onUninstallExtension() { return this._onUninstallExtension.event; } - private readonly _onDidUninstallExtension = this._register(new Emitter()); + protected readonly _onDidUninstallExtension = this._register(new Emitter()); get onDidUninstallExtension() { return this._onDidUninstallExtension.event; } - private readonly _onDidUpdateExtensionMetadata = this._register(new Emitter()); + protected readonly _onDidUpdateExtensionMetadata = this._register(new Emitter()); get onDidUpdateExtensionMetadata() { return this._onDidUpdateExtensionMetadata.event; } constructor(private readonly channel: IChannel) { super(); - this._register(this.channel.listen('onInstallExtension')(e => this.fireEvent(this._onInstallExtension, { ...e, source: this.isUriComponents(e.source) ? URI.revive(e.source) : e.source, profileLocation: URI.revive(e.profileLocation) }))); - this._register(this.channel.listen('onDidInstallExtensions')(results => this.fireEvent(this._onDidInstallExtensions, results.map(e => ({ ...e, local: e.local ? transformIncomingExtension(e.local, null) : e.local, source: this.isUriComponents(e.source) ? URI.revive(e.source) : e.source, profileLocation: URI.revive(e.profileLocation) }))))); - this._register(this.channel.listen('onUninstallExtension')(e => this.fireEvent(this._onUninstallExtension, { ...e, profileLocation: URI.revive(e.profileLocation) }))); - this._register(this.channel.listen('onDidUninstallExtension')(e => this.fireEvent(this._onDidUninstallExtension, { ...e, profileLocation: URI.revive(e.profileLocation) }))); - this._register(this.channel.listen('onDidUpdateExtensionMetadata')(e => this.fireEvent(this._onDidUpdateExtensionMetadata, { profileLocation: URI.revive(e.profileLocation), local: transformIncomingExtension(e.local, null) }))); + this._register(this.channel.listen('onInstallExtension')(e => this.onInstallExtensionEvent({ ...e, source: this.isUriComponents(e.source) ? URI.revive(e.source) : e.source, profileLocation: URI.revive(e.profileLocation) }))); + this._register(this.channel.listen('onDidInstallExtensions')(results => this.onDidInstallExtensionsEvent(results.map(e => ({ ...e, local: e.local ? transformIncomingExtension(e.local, null) : e.local, source: this.isUriComponents(e.source) ? URI.revive(e.source) : e.source, profileLocation: URI.revive(e.profileLocation) }))))); + this._register(this.channel.listen('onUninstallExtension')(e => this.onUninstallExtensionEvent({ ...e, profileLocation: URI.revive(e.profileLocation) }))); + this._register(this.channel.listen('onDidUninstallExtension')(e => this.onDidUninstallExtensionEvent({ ...e, profileLocation: URI.revive(e.profileLocation) }))); + this._register(this.channel.listen('onDidUpdateExtensionMetadata')(e => this.onDidUpdateExtensionMetadataEvent({ profileLocation: URI.revive(e.profileLocation), local: transformIncomingExtension(e.local, null) }))); } - protected fireEvent(event: Emitter, data: E): void; - protected fireEvent(event: Emitter, data: E[]): void; - protected fireEvent(event: Emitter, data: E | E[]): void { - event.fire(data); + protected onInstallExtensionEvent(event: InstallExtensionEvent): void { + this._onInstallExtension.fire(event); + } + + protected onDidInstallExtensionsEvent(results: readonly InstallExtensionResult[]): void { + this._onDidInstallExtensions.fire(results); + } + + protected onUninstallExtensionEvent(event: UninstallExtensionEvent): void { + this._onUninstallExtension.fire(event); + } + + protected onDidUninstallExtensionEvent(event: DidUninstallExtensionEvent): void { + this._onDidUninstallExtension.fire(event); + } + + protected onDidUpdateExtensionMetadataEvent(event: DidUpdateExtensionMetadata): void { + this._onDidUpdateExtensionMetadata.fire(event); } private isUriComponents(thing: unknown): thing is UriComponents { diff --git a/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts b/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts index 301c7b18e..9b0ef7b6f 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { compareIgnoreCase } from 'vs/base/common/strings'; -import { IExtensionIdentifier, IGalleryExtension, ILocalExtension, getTargetPlatform } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionIdentifier, IExtension, TargetPlatform, UNDEFINED_PUBLISHER } from 'vs/platform/extensions/common/extensions'; -import { IFileService } from 'vs/platform/files/common/files'; -import { isLinux, platform } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { ILogService } from 'vs/platform/log/common/log'; -import { arch } from 'vs/base/common/process'; -import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUtils'; +import { compareIgnoreCase } from '../../../base/common/strings.js'; +import { IExtensionIdentifier, IGalleryExtension, ILocalExtension, getTargetPlatform } from './extensionManagement.js'; +import { ExtensionIdentifier, IExtension, TargetPlatform, UNDEFINED_PUBLISHER } from '../../extensions/common/extensions.js'; +import { IFileService } from '../../files/common/files.js'; +import { isLinux, platform } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { ILogService } from '../../log/common/log.js'; +import { arch } from '../../../base/common/process.js'; +import { TelemetryTrustedValue } from '../../telemetry/common/telemetryUtils.js'; export function areSameExtensions(a: IExtensionIdentifier, b: IExtensionIdentifier): boolean { if (a.uuid && b.uuid) { @@ -103,7 +103,7 @@ export function groupByExtension(extensions: T[], getExtensionIdentifier: (t: return byExtension; } -export function getLocalExtensionTelemetryData(extension: ILocalExtension): any { +export function getLocalExtensionTelemetryData(extension: ILocalExtension) { return { id: extension.identifier.id, name: extension.manifest.name, @@ -133,7 +133,7 @@ export function getLocalExtensionTelemetryData(extension: ILocalExtension): any ] } */ -export function getGalleryExtensionTelemetryData(extension: IGalleryExtension): any { +export function getGalleryExtensionTelemetryData(extension: IGalleryExtension) { return { id: new TelemetryTrustedValue(extension.identifier.id), name: new TelemetryTrustedValue(extension.name), diff --git a/src/vs/platform/extensionManagement/common/extensionNls.ts b/src/vs/platform/extensionManagement/common/extensionNls.ts index 2f196970f..f35e86605 100644 --- a/src/vs/platform/extensionManagement/common/extensionNls.ts +++ b/src/vs/platform/extensionManagement/common/extensionNls.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isObject, isString } from 'vs/base/common/types'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { localize } from 'vs/nls'; -import { ILogger } from 'vs/platform/log/common/log'; +import { isObject, isString } from '../../../base/common/types.js'; +import { ILocalizedString } from '../../action/common/action.js'; +import { IExtensionManifest } from '../../extensions/common/extensions.js'; +import { localize } from '../../../nls.js'; +import { ILogger } from '../../log/common/log.js'; export interface ITranslations { [key: string]: string | { message: string; comment: string[] } | undefined; diff --git a/src/vs/platform/extensionManagement/common/extensionStorage.ts b/src/vs/platform/extensionManagement/common/extensionStorage.ts index 0af530f2a..1d50102ed 100644 --- a/src/vs/platform/extensionManagement/common/extensionStorage.ts +++ b/src/vs/platform/extensionManagement/common/extensionStorage.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IProfileStorageValueChangeEvent, IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { adoptToGalleryExtensionId, areSameExtensions, getExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { distinct } from 'vs/base/common/arrays'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtension } from 'vs/platform/extensions/common/extensions'; -import { isString } from 'vs/base/common/types'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { IExtensionManagementService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { IProfileStorageValueChangeEvent, IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { adoptToGalleryExtensionId, areSameExtensions, getExtensionId } from './extensionManagementUtil.js'; +import { IProductService } from '../../product/common/productService.js'; +import { distinct } from '../../../base/common/arrays.js'; +import { ILogService } from '../../log/common/log.js'; +import { IExtension } from '../../extensions/common/extensions.js'; +import { isString } from '../../../base/common/types.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { IExtensionManagementService, IGalleryExtension } from './extensionManagement.js'; export interface IExtensionIdWithVersion { id: string; diff --git a/src/vs/platform/extensionManagement/common/extensionTipsService.ts b/src/vs/platform/extensionManagement/common/extensionTipsService.ts index 813064a24..f63a4b7b2 100644 --- a/src/vs/platform/extensionManagement/common/extensionTipsService.ts +++ b/src/vs/platform/extensionManagement/common/extensionTipsService.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IConfigBasedExtensionTip as IRawConfigBasedExtensionTip } from 'vs/base/common/product'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IConfigBasedExtensionTip, IExecutableBasedExtensionTip, IExtensionManagementService, IExtensionTipsService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { disposableTimeout } from 'vs/base/common/async'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Event } from 'vs/base/common/event'; -import { join } from 'vs/base/common/path'; -import { isWindows } from 'vs/base/common/platform'; -import { env } from 'vs/base/common/process'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IExtensionRecommendationNotificationService, RecommendationsNotificationResult, RecommendationSource } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; -import { ExtensionType } from 'vs/platform/extensions/common/extensions'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { isNonEmptyArray } from '../../../base/common/arrays.js'; +import { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { IConfigBasedExtensionTip as IRawConfigBasedExtensionTip } from '../../../base/common/product.js'; +import { joinPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigBasedExtensionTip, IExecutableBasedExtensionTip, IExtensionManagementService, IExtensionTipsService, ILocalExtension } from './extensionManagement.js'; +import { IFileService } from '../../files/common/files.js'; +import { IProductService } from '../../product/common/productService.js'; +import { disposableTimeout } from '../../../base/common/async.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Event } from '../../../base/common/event.js'; +import { join } from '../../../base/common/path.js'; +import { isWindows } from '../../../base/common/platform.js'; +import { env } from '../../../base/common/process.js'; +import { areSameExtensions } from './extensionManagementUtil.js'; +import { IExtensionRecommendationNotificationService, RecommendationsNotificationResult, RecommendationSource } from '../../extensionRecommendations/common/extensionRecommendations.js'; +import { ExtensionType } from '../../extensions/common/extensions.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; //#region Base Extension Tips Service diff --git a/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts b/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts index d3d1816b4..ced131827 100644 --- a/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts +++ b/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Queue } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Emitter, Event } from 'vs/base/common/event'; -import { ResourceMap } from 'vs/base/common/map'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Metadata, isIExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IExtension, IExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { Mutable, isObject, isString, isUndefined } from 'vs/base/common/types'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Queue } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Metadata, isIExtensionIdentifier } from './extensionManagement.js'; +import { areSameExtensions } from './extensionManagementUtil.js'; +import { IExtension, IExtensionIdentifier } from '../../extensions/common/extensions.js'; +import { FileOperationResult, IFileService, toFileOperationResult } from '../../files/common/files.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { Mutable, isObject, isString, isUndefined } from '../../../base/common/types.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; interface IStoredProfileExtension { identifier: IExtensionIdentifier; diff --git a/src/vs/platform/extensionManagement/common/extensionsScannerService.ts b/src/vs/platform/extensionManagement/common/extensionsScannerService.ts index 7d4c51d21..8f238a840 100644 --- a/src/vs/platform/extensionManagement/common/extensionsScannerService.ts +++ b/src/vs/platform/extensionManagement/common/extensionsScannerService.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { ThrottledDelayer } from 'vs/base/common/async'; -import * as objects from 'vs/base/common/objects'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { getNodeType, parse, ParseError } from 'vs/base/common/json'; -import { getParseErrorMessage } from 'vs/base/common/jsonErrorMessages'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import * as path from 'vs/base/common/path'; -import * as platform from 'vs/base/common/platform'; -import { basename, isEqual, joinPath } from 'vs/base/common/resources'; -import * as semver from 'vs/base/common/semver/semver'; -import Severity from 'vs/base/common/severity'; -import { isEmptyObject } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IProductVersion, Metadata } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions, computeTargetPlatform, ExtensionKey, getExtensionId, getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionType, ExtensionIdentifier, IExtensionManifest, TargetPlatform, IExtensionIdentifier, IRelaxedExtensionManifest, UNDEFINED_PUBLISHER, IExtensionDescription, BUILTIN_MANIFEST_CACHE_FILE, USER_MANIFEST_CACHE_FILE, ExtensionIdentifierMap, parseEnabledApiProposalNames } from 'vs/platform/extensions/common/extensions'; -import { validateExtensionManifest } from 'vs/platform/extensions/common/extensionValidator'; -import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; -import { createDecorator, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { Emitter, Event } from 'vs/base/common/event'; -import { revive } from 'vs/base/common/marshalling'; -import { ExtensionsProfileScanningError, ExtensionsProfileScanningErrorCode, IExtensionsProfileScannerService, IProfileExtensionsScanOptions, IScannedProfileExtension } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { localizeManifest } from 'vs/platform/extensionManagement/common/extensionNls'; +import { coalesce } from '../../../base/common/arrays.js'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import * as objects from '../../../base/common/objects.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { getNodeType, parse, ParseError } from '../../../base/common/json.js'; +import { getParseErrorMessage } from '../../../base/common/jsonErrorMessages.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { FileAccess, Schemas } from '../../../base/common/network.js'; +import * as path from '../../../base/common/path.js'; +import * as platform from '../../../base/common/platform.js'; +import { basename, isEqual, joinPath } from '../../../base/common/resources.js'; +import * as semver from '../../../base/common/semver/semver.js'; +import Severity from '../../../base/common/severity.js'; +import { isEmptyObject } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IProductVersion, Metadata } from './extensionManagement.js'; +import { areSameExtensions, computeTargetPlatform, ExtensionKey, getExtensionId, getGalleryExtensionId } from './extensionManagementUtil.js'; +import { ExtensionType, ExtensionIdentifier, IExtensionManifest, TargetPlatform, IExtensionIdentifier, IRelaxedExtensionManifest, UNDEFINED_PUBLISHER, IExtensionDescription, BUILTIN_MANIFEST_CACHE_FILE, USER_MANIFEST_CACHE_FILE, ExtensionIdentifierMap, parseEnabledApiProposalNames } from '../../extensions/common/extensions.js'; +import { validateExtensionManifest } from '../../extensions/common/extensionValidator.js'; +import { FileOperationResult, IFileService, toFileOperationResult } from '../../files/common/files.js'; +import { createDecorator, IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { ExtensionsProfileScanningError, ExtensionsProfileScanningErrorCode, IExtensionsProfileScannerService, IProfileExtensionsScanOptions, IScannedProfileExtension } from './extensionsProfileScannerService.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { localizeManifest } from './extensionNls.js'; export type IScannedExtensionManifest = IRelaxedExtensionManifest & { __metadata?: Metadata }; diff --git a/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts b/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts index ecd1c43fb..b8a52b5e9 100644 --- a/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts +++ b/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../extensions/common/extensions.js'; export interface IActivationEventsGenerator { (contributions: T[], result: { push(item: string): void }): void; diff --git a/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.ts b/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.ts index 57aadd8fc..1fea9a2ab 100644 --- a/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.ts +++ b/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions, getExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { ExtensionType } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, InstallOperation } from './extensionManagement.js'; +import { areSameExtensions, getExtensionId } from './extensionManagementUtil.js'; +import { IExtensionStorageService } from './extensionStorage.js'; +import { ExtensionType } from '../../extensions/common/extensions.js'; +import { ILogService } from '../../log/common/log.js'; /** * Migrates the installed unsupported nightly extension to a supported pre-release extension. It includes following: diff --git a/src/vs/platform/extensionManagement/electron-sandbox/extensionsProfileScannerService.ts b/src/vs/platform/extensionManagement/electron-sandbox/extensionsProfileScannerService.ts index 98f5a2194..2299ce880 100644 --- a/src/vs/platform/extensionManagement/electron-sandbox/extensionsProfileScannerService.ts +++ b/src/vs/platform/extensionManagement/electron-sandbox/extensionsProfileScannerService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { AbstractExtensionsProfileScannerService, IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { URI } from 'vs/base/common/uri'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { AbstractExtensionsProfileScannerService, IExtensionsProfileScannerService } from '../common/extensionsProfileScannerService.js'; +import { IFileService } from '../../files/common/files.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { URI } from '../../../base/common/uri.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; export class ExtensionsProfileScannerService extends AbstractExtensionsProfileScannerService { constructor( diff --git a/src/vs/platform/extensionManagement/node/extensionDownloader.ts b/src/vs/platform/extensionManagement/node/extensionDownloader.ts index 0ddae28ed..850dba711 100644 --- a/src/vs/platform/extensionManagement/node/extensionDownloader.ts +++ b/src/vs/platform/extensionManagement/node/extensionDownloader.ts @@ -3,28 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises } from 'vs/base/common/async'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { joinPath } from 'vs/base/common/resources'; -import * as semver from 'vs/base/common/semver/semver'; -import { isBoolean } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { Promises as FSPromises } from 'vs/base/node/pfs'; -import { buffer, CorruptZipMessage } from 'vs/base/node/zip'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ExtensionVerificationStatus, toExtensionManagementError } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; -import { ExtensionManagementError, ExtensionManagementErrorCode, IExtensionGalleryService, IGalleryExtension, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionKey, groupByExtension } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { fromExtractError } from 'vs/platform/extensionManagement/node/extensionManagementUtil'; -import { ExtensionSignatureVerificationError, ExtensionSignatureVerificationCode, IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; -import { TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { IFileService, IFileStatWithMetadata } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Promises } from '../../../base/common/async.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { joinPath } from '../../../base/common/resources.js'; +import * as semver from '../../../base/common/semver/semver.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { Promises as FSPromises } from '../../../base/node/pfs.js'; +import { buffer, CorruptZipMessage } from '../../../base/node/zip.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { toExtensionManagementError } from '../common/abstractExtensionManagementService.js'; +import { ExtensionManagementError, ExtensionManagementErrorCode, ExtensionSignatureVerificationCode, IExtensionGalleryService, IGalleryExtension, InstallOperation } from '../common/extensionManagement.js'; +import { ExtensionKey, groupByExtension } from '../common/extensionManagementUtil.js'; +import { fromExtractError } from './extensionManagementUtil.js'; +import { IExtensionSignatureVerificationService } from './extensionSignatureVerificationService.js'; +import { TargetPlatform } from '../../extensions/common/extensions.js'; +import { IFileService, IFileStatWithMetadata } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; type RetryDownloadClassification = { owner: 'sandy081'; @@ -49,7 +47,6 @@ export class ExtensionsDownloader extends Disposable { @INativeEnvironmentService environmentService: INativeEnvironmentService, @IFileService private readonly fileService: IFileService, @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService, - @IConfigurationService private readonly configurationService: IConfigurationService, @IExtensionSignatureVerificationService private readonly extensionSignatureVerificationService: IExtensionSignatureVerificationService, @ITelemetryService private readonly telemetryService: ITelemetryService, @ILogService private readonly logService: ILogService, @@ -60,42 +57,39 @@ export class ExtensionsDownloader extends Disposable { this.cleanUpPromise = this.cleanUp(); } - async download(extension: IGalleryExtension, operation: InstallOperation, verifySignature: boolean, clientTargetPlatform?: TargetPlatform): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionVerificationStatus }> { + async download(extension: IGalleryExtension, operation: InstallOperation, verifySignature: boolean, clientTargetPlatform?: TargetPlatform): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionSignatureVerificationCode | undefined }> { await this.cleanUpPromise; const location = await this.downloadVSIX(extension, operation); - let verificationStatus: ExtensionVerificationStatus = false; - - if (verifySignature && this.shouldVerifySignature(extension)) { + if (!verifySignature || !extension.isSigned) { + return { location, verificationStatus: undefined }; + } - let signatureArchiveLocation; - try { - signatureArchiveLocation = await this.downloadSignatureArchive(extension); - } catch (error) { + let signatureArchiveLocation; + try { + signatureArchiveLocation = await this.downloadSignatureArchive(extension); + const verificationStatus = (await this.extensionSignatureVerificationService.verify(extension.identifier.id, extension.version, location.fsPath, signatureArchiveLocation.fsPath, clientTargetPlatform))?.code; + if (verificationStatus === ExtensionSignatureVerificationCode.PackageIsInvalidZip || verificationStatus === ExtensionSignatureVerificationCode.SignatureArchiveIsInvalidZip) { try { - // Delete the downloaded VSIX if signature archive download fails + // Delete the downloaded vsix if VSIX or signature archive is invalid await this.delete(location); } catch (error) { this.logService.error(error); } - throw error; + throw new ExtensionManagementError(CorruptZipMessage, ExtensionManagementErrorCode.CorruptZip); } - + return { location, verificationStatus }; + } catch (error) { try { - verificationStatus = await this.extensionSignatureVerificationService.verify(extension, location.fsPath, signatureArchiveLocation.fsPath, clientTargetPlatform); + // Delete the downloaded VSIX if signature archive download fails + await this.delete(location); } catch (error) { - verificationStatus = (error as ExtensionSignatureVerificationError).code; - if (verificationStatus === ExtensionSignatureVerificationCode.PackageIsInvalidZip || verificationStatus === ExtensionSignatureVerificationCode.SignatureArchiveIsInvalidZip) { - try { - // Delete the downloaded vsix if VSIX or signature archive is invalid - await this.delete(location); - } catch (error) { - this.logService.error(error); - } - throw new ExtensionManagementError(CorruptZipMessage, ExtensionManagementErrorCode.CorruptZip); - } - } finally { + this.logService.error(error); + } + throw error; + } finally { + if (signatureArchiveLocation) { try { // Delete signature archive always await this.delete(signatureArchiveLocation); @@ -104,18 +98,6 @@ export class ExtensionsDownloader extends Disposable { } } } - - return { location, verificationStatus }; - } - - private shouldVerifySignature(extension: IGalleryExtension): boolean { - if (!extension.isSigned) { - this.logService.info(`Extension is not signed: ${extension.identifier.id}`); - return false; - } - - const value = this.configurationService.getValue('extensions.verifySignature'); - return isBoolean(value) ? value : true; } private async downloadVSIX(extension: IGalleryExtension, operation: InstallOperation): Promise { diff --git a/src/vs/platform/extensionManagement/node/extensionLifecycle.ts b/src/vs/platform/extensionManagement/node/extensionLifecycle.ts index 8de8416e7..cdc0a4767 100644 --- a/src/vs/platform/extensionManagement/node/extensionLifecycle.ts +++ b/src/vs/platform/extensionManagement/node/extensionLifecycle.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import { ChildProcess, fork } from 'child_process'; -import { Limiter } from 'vs/base/common/async'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; -import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { Limiter } from '../../../base/common/async.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { join } from '../../../base/common/path.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { ILocalExtension } from '../common/extensionManagement.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; export class ExtensionsLifecycle extends Disposable { diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index 75ab2baae..680e0dd15 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -4,52 +4,55 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; -import { Promises, Queue } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { CancellationError, getErrorMessage } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ResourceMap, ResourceSet } from 'vs/base/common/map'; -import { Schemas } from 'vs/base/common/network'; -import * as path from 'vs/base/common/path'; -import { joinPath } from 'vs/base/common/resources'; -import * as semver from 'vs/base/common/semver/semver'; -import { isBoolean } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import * as pfs from 'vs/base/node/pfs'; -import { extract, IFile, zip } from 'vs/base/node/zip'; -import * as nls from 'vs/nls'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { AbstractExtensionManagementService, AbstractExtensionTask, ExtensionVerificationStatus, IInstallExtensionTask, InstallExtensionTaskOptions, IUninstallExtensionTask, toExtensionManagementError, UninstallExtensionTaskOptions } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; +import { Promises, Queue } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { CancellationError, getErrorMessage } from '../../../base/common/errors.js'; +import { Emitter } from '../../../base/common/event.js'; +import { hash } from '../../../base/common/hash.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap, ResourceSet } from '../../../base/common/map.js'; +import { Schemas } from '../../../base/common/network.js'; +import * as path from '../../../base/common/path.js'; +import { joinPath } from '../../../base/common/resources.js'; +import * as semver from '../../../base/common/semver/semver.js'; +import { isBoolean } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import * as pfs from '../../../base/node/pfs.js'; +import { extract, IFile, zip } from '../../../base/node/zip.js'; +import * as nls from '../../../nls.js'; +import { IDownloadService } from '../../download/common/download.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { AbstractExtensionManagementService, AbstractExtensionTask, IInstallExtensionTask, InstallExtensionTaskOptions, IUninstallExtensionTask, toExtensionManagementError, UninstallExtensionTaskOptions } from '../common/abstractExtensionManagementService.js'; import { ExtensionManagementError, ExtensionManagementErrorCode, IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOperation, Metadata, InstallOptions, IProductVersion, EXTENSION_INSTALL_CLIENT_TARGET_PLATFORM_CONTEXT, -} from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions, computeTargetPlatform, ExtensionKey, getGalleryExtensionId, groupByExtension } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IExtensionsProfileScannerService, IScannedProfileExtension } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IExtensionsScannerService, IScannedExtension, ScanOptions } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionsDownloader } from 'vs/platform/extensionManagement/node/extensionDownloader'; -import { ExtensionsLifecycle } from 'vs/platform/extensionManagement/node/extensionLifecycle'; -import { fromExtractError, getManifest } from 'vs/platform/extensionManagement/node/extensionManagementUtil'; -import { ExtensionsManifestCache } from 'vs/platform/extensionManagement/node/extensionsManifestCache'; -import { DidChangeProfileExtensionsEvent, ExtensionsWatcher } from 'vs/platform/extensionManagement/node/extensionsWatcher'; -import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { isEngineValid } from 'vs/platform/extensions/common/extensionValidator'; -import { FileChangesEvent, FileChangeType, FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; -import { IInstantiationService, refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; + ExtensionSignatureVerificationCode, +} from '../common/extensionManagement.js'; +import { areSameExtensions, computeTargetPlatform, ExtensionKey, getGalleryExtensionId, groupByExtension } from '../common/extensionManagementUtil.js'; +import { IExtensionsProfileScannerService, IScannedProfileExtension } from '../common/extensionsProfileScannerService.js'; +import { IExtensionsScannerService, IScannedExtension, ScanOptions } from '../common/extensionsScannerService.js'; +import { ExtensionsDownloader } from './extensionDownloader.js'; +import { ExtensionsLifecycle } from './extensionLifecycle.js'; +import { fromExtractError, getManifest } from './extensionManagementUtil.js'; +import { ExtensionsManifestCache } from './extensionsManifestCache.js'; +import { DidChangeProfileExtensionsEvent, ExtensionsWatcher } from './extensionsWatcher.js'; +import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from '../../extensions/common/extensions.js'; +import { isEngineValid } from '../../extensions/common/extensionValidator.js'; +import { FileChangesEvent, FileChangeType, FileOperationResult, IFileService, toFileOperationResult } from '../../files/common/files.js'; +import { IInstantiationService, refineServiceDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { isLinux } from '../../../base/common/platform.js'; export const INativeServerExtensionManagementService = refineServiceDecorator(IExtensionManagementService); export interface INativeServerExtensionManagementService extends IExtensionManagementService { @@ -59,7 +62,7 @@ export interface INativeServerExtensionManagementService extends IExtensionManag markAsUninstalled(...extensions: IExtension[]): Promise; } -type ExtractExtensionResult = { readonly local: ILocalExtension; readonly verificationStatus?: ExtensionVerificationStatus }; +type ExtractExtensionResult = { readonly local: ILocalExtension; readonly verificationStatus?: ExtensionSignatureVerificationCode }; const DELETED_FOLDER_POSTFIX = '.vsctmp'; @@ -75,12 +78,13 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi @IExtensionGalleryService galleryService: IExtensionGalleryService, @ITelemetryService telemetryService: ITelemetryService, @ILogService logService: ILogService, - @INativeEnvironmentService environmentService: INativeEnvironmentService, + @INativeEnvironmentService private readonly environmentService: INativeEnvironmentService, @IExtensionsScannerService private readonly extensionsScannerService: IExtensionsScannerService, @IExtensionsProfileScannerService private readonly extensionsProfileScannerService: IExtensionsProfileScannerService, @IDownloadService private downloadService: IDownloadService, @IInstantiationService private readonly instantiationService: IInstantiationService, @IFileService private readonly fileService: IFileService, + @IConfigurationService private readonly configurationService: IConfigurationService, @IProductService productService: IProductService, @IUriIdentityService uriIdentityService: IUriIdentityService, @IUserDataProfilesService userDataProfilesService: IUserDataProfilesService @@ -246,7 +250,7 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi } async download(extension: IGalleryExtension, operation: InstallOperation, donotVerifySignature: boolean): Promise { - const { location } = await this.extensionsDownloader.download(extension, operation, !donotVerifySignature); + const { location } = await this.downloadExtension(extension, operation, !donotVerifySignature); return location; } @@ -292,7 +296,7 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi } private async downloadAndExtractGalleryExtension(extensionKey: ExtensionKey, gallery: IGalleryExtension, operation: InstallOperation, options: InstallExtensionTaskOptions, token: CancellationToken): Promise { - const { verificationStatus, location } = await this.extensionsDownloader.download(gallery, operation, !options.donotVerifySignature, options.context?.[EXTENSION_INSTALL_CLIENT_TARGET_PLATFORM_CONTEXT]); + const { verificationStatus, location } = await this.downloadExtension(gallery, operation, !options.donotVerifySignature, options.context?.[EXTENSION_INSTALL_CLIENT_TARGET_PLATFORM_CONTEXT]); try { if (token.isCancellationRequested) { @@ -339,6 +343,42 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi } } + private async downloadExtension(extension: IGalleryExtension, operation: InstallOperation, verifySignature: boolean, clientTargetPlatform?: TargetPlatform): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionSignatureVerificationCode | undefined }> { + if (verifySignature) { + const value = this.configurationService.getValue('extensions.verifySignature'); + verifySignature = isBoolean(value) ? value : true; + } + const { location, verificationStatus } = await this.extensionsDownloader.download(extension, operation, verifySignature, clientTargetPlatform); + + if (verificationStatus !== ExtensionSignatureVerificationCode.Success && verifySignature && this.environmentService.isBuilt && !isLinux) { + if (!extension.isSigned) { + throw new ExtensionManagementError(nls.localize('not signed', "Extension is not signed."), ExtensionManagementErrorCode.PackageNotSigned); + } + + if (!verificationStatus) { + throw new ExtensionManagementError(nls.localize('signature verification not executed', "Signature verification was not executed."), ExtensionManagementErrorCode.SignatureVerificationInternal); + } + + switch (verificationStatus) { + case ExtensionSignatureVerificationCode.PackageIntegrityCheckFailed: + case ExtensionSignatureVerificationCode.SignatureIsInvalid: + case ExtensionSignatureVerificationCode.SignatureManifestIsInvalid: + case ExtensionSignatureVerificationCode.SignatureIntegrityCheckFailed: + case ExtensionSignatureVerificationCode.EntryIsMissing: + case ExtensionSignatureVerificationCode.EntryIsTampered: + case ExtensionSignatureVerificationCode.Untrusted: + case ExtensionSignatureVerificationCode.CertificateRevoked: + case ExtensionSignatureVerificationCode.SignatureIsNotValid: + case ExtensionSignatureVerificationCode.SignatureArchiveHasTooManyEntries: + throw new ExtensionManagementError(nls.localize('signature verification failed', "Signature verification failed with '{0}' error.", verificationStatus), ExtensionManagementErrorCode.SignatureVerificationFailed); + } + + throw new ExtensionManagementError(nls.localize('signature verification failed', "Signature verification failed with '{0}' error.", verificationStatus), ExtensionManagementErrorCode.SignatureVerificationInternal); + } + + return { location, verificationStatus }; + } + private async extractVSIX(extensionKey: ExtensionKey, location: URI, options: InstallExtensionTaskOptions, token: CancellationToken): Promise { const local = await this.extensionsScanner.extractUserExtension( extensionKey, @@ -915,7 +955,7 @@ class InstallExtensionInProfileTask extends AbstractExtensionTask('IExtensionSignatureVerificationService'); +export interface IExtensionSignatureVerificationResult { + readonly code: ExtensionSignatureVerificationCode; +} + /** * A service for verifying signed extensions. */ @@ -22,50 +26,18 @@ export interface IExtensionSignatureVerificationService { /** * Verifies an extension file (.vsix) against a signature archive file. * @param { string } extensionId The extension identifier. + * @param { string } version The extension version. * @param { string } vsixFilePath The extension file path. * @param { string } signatureArchiveFilePath The signature archive file path. - * @returns { Promise } A promise with `true` if the extension is validly signed and trusted; - * otherwise, `false` because verification is not enabled (e.g.: in the OSS version of VS Code). - * @throws { ExtensionSignatureVerificationError } An error with a code indicating the validity, integrity, or trust issue - * found during verification or a more fundamental issue (e.g.: a required dependency was not found). + * @returns { Promise } returns the verification result or undefined if the verification was not executed. */ - verify(extension: IGalleryExtension, vsixFilePath: string, signatureArchiveFilePath: string, clientTargetPlatform?: TargetPlatform): Promise; + verify(extensionId: string, version: string, vsixFilePath: string, signatureArchiveFilePath: string, clientTargetPlatform?: TargetPlatform): Promise; } declare module vsceSign { export function verify(vsixFilePath: string, signatureArchiveFilePath: string, verbose: boolean): Promise; } -export enum ExtensionSignatureVerificationCode { - 'Success' = 'Success', - 'RequiredArgumentMissing' = 'RequiredArgumentMissing', - 'InvalidArgument' = 'InvalidArgument', - 'PackageIsUnreadable' = 'PackageIsUnreadable', - 'UnhandledException' = 'UnhandledException', - 'SignatureManifestIsMissing' = 'SignatureManifestIsMissing', - 'SignatureManifestIsUnreadable' = 'SignatureManifestIsUnreadable', - 'SignatureIsMissing' = 'SignatureIsMissing', - 'SignatureIsUnreadable' = 'SignatureIsUnreadable', - 'CertificateIsUnreadable' = 'CertificateIsUnreadable', - 'SignatureArchiveIsUnreadable' = 'SignatureArchiveIsUnreadable', - 'FileAlreadyExists' = 'FileAlreadyExists', - 'SignatureArchiveIsInvalidZip' = 'SignatureArchiveIsInvalidZip', - 'SignatureArchiveHasSameSignatureFile' = 'SignatureArchiveHasSameSignatureFile', - - 'PackageIntegrityCheckFailed' = 'PackageIntegrityCheckFailed', - 'SignatureIsInvalid' = 'SignatureIsInvalid', - 'SignatureManifestIsInvalid' = 'SignatureManifestIsInvalid', - 'SignatureIntegrityCheckFailed' = 'SignatureIntegrityCheckFailed', - 'EntryIsMissing' = 'EntryIsMissing', - 'EntryIsTampered' = 'EntryIsTampered', - 'Untrusted' = 'Untrusted', - 'CertificateRevoked' = 'CertificateRevoked', - 'SignatureIsNotValid' = 'SignatureIsNotValid', - 'UnknownError' = 'UnknownError', - 'PackageIsInvalidZip' = 'PackageIsInvalidZip', - 'SignatureArchiveHasTooManyEntries' = 'SignatureArchiveHasTooManyEntries', -} - /** * Extension signature verification result */ @@ -76,14 +48,6 @@ export interface ExtensionSignatureVerificationResult { readonly output?: string; } -export class ExtensionSignatureVerificationError extends Error { - constructor( - public readonly code: ExtensionSignatureVerificationCode, - ) { - super(code); - } -} - export class ExtensionSignatureVerificationService implements IExtensionSignatureVerificationService { declare readonly _serviceBrand: undefined; @@ -104,26 +68,25 @@ export class ExtensionSignatureVerificationService implements IExtensionSignatur private async resolveVsceSign(): Promise { // ESM-uncomment-begin - // if (typeof importAMDNodeModule === 'function') { /* fixes unused import, remove me */} - // const mod = '@vscode/vsce-sign'; - // return import(mod); + if (typeof importAMDNodeModule === 'function') { /* fixes unused import, remove me */ } + const mod = '@vscode/vsce-sign'; + return import(mod); // ESM-uncomment-end // ESM-comment-begin - return importAMDNodeModule('@vscode/vsce-sign', 'src/main.js'); + // return importAMDNodeModule('@vscode/vsce-sign', 'src/main.js'); // ESM-comment-end } - public async verify(extension: IGalleryExtension, vsixFilePath: string, signatureArchiveFilePath: string, clientTargetPlatform?: TargetPlatform): Promise { + public async verify(extensionId: string, version: string, vsixFilePath: string, signatureArchiveFilePath: string, clientTargetPlatform?: TargetPlatform): Promise { let module: typeof vsceSign; - const extensionId = extension.identifier.id; try { module = await this.vsceSign(); } catch (error) { this.logService.error('Could not load vsce-sign module', getErrorMessage(error)); this.logService.info(`Extension signature verification is not done: ${extensionId}`); - return false; + return undefined; } const startTime = new Date().getTime(); @@ -167,7 +130,7 @@ export class ExtensionSignatureVerificationService implements IExtensionSignatur }; this.telemetryService.publicLog2('extensionsignature:verification', { extensionId, - extensionVersion: extension.version, + extensionVersion: version, code: result.code, internalCode: result.internalCode, duration, @@ -175,10 +138,6 @@ export class ExtensionSignatureVerificationService implements IExtensionSignatur clientTargetPlatform, }); - if (result.code === ExtensionSignatureVerificationCode.Success) { - return true; - } - - throw new ExtensionSignatureVerificationError(result.code); + return { code: result.code }; } } diff --git a/src/vs/platform/extensionManagement/node/extensionTipsService.ts b/src/vs/platform/extensionManagement/node/extensionTipsService.ts index fbdf31534..40d86085a 100644 --- a/src/vs/platform/extensionManagement/node/extensionTipsService.ts +++ b/src/vs/platform/extensionManagement/node/extensionTipsService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionRecommendationNotificationService } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; -import { INativeHostService } from 'vs/platform/native/common/native'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { AbstractNativeExtensionTipsService } from 'vs/platform/extensionManagement/common/extensionTipsService'; +import { IExtensionManagementService } from '../common/extensionManagement.js'; +import { IFileService } from '../../files/common/files.js'; +import { IProductService } from '../../product/common/productService.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { IExtensionRecommendationNotificationService } from '../../extensionRecommendations/common/extensionRecommendations.js'; +import { INativeHostService } from '../../native/common/native.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { AbstractNativeExtensionTipsService } from '../common/extensionTipsService.js'; export class ExtensionTipsService extends AbstractNativeExtensionTipsService { diff --git a/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts b/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts index cc5d48ee4..2825bbe0f 100644 --- a/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts +++ b/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { DidUninstallExtensionEvent, IExtensionManagementService, InstallExtensionResult } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { USER_MANIFEST_CACHE_FILE } from 'vs/platform/extensions/common/extensions'; -import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { DidUninstallExtensionEvent, IExtensionManagementService, InstallExtensionResult } from '../common/extensionManagement.js'; +import { USER_MANIFEST_CACHE_FILE } from '../../extensions/common/extensions.js'; +import { FileOperationResult, IFileService, toFileOperationResult } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; export class ExtensionsManifestCache extends Disposable { diff --git a/src/vs/platform/extensionManagement/node/extensionsProfileScannerService.ts b/src/vs/platform/extensionManagement/node/extensionsProfileScannerService.ts index 7864019ad..3f1e91916 100644 --- a/src/vs/platform/extensionManagement/node/extensionsProfileScannerService.ts +++ b/src/vs/platform/extensionManagement/node/extensionsProfileScannerService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { AbstractExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { URI } from 'vs/base/common/uri'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { AbstractExtensionsProfileScannerService } from '../common/extensionsProfileScannerService.js'; +import { IFileService } from '../../files/common/files.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { URI } from '../../../base/common/uri.js'; export class ExtensionsProfileScannerService extends AbstractExtensionsProfileScannerService { constructor( diff --git a/src/vs/platform/extensionManagement/node/extensionsScannerService.ts b/src/vs/platform/extensionManagement/node/extensionsScannerService.ts index 4f95fb924..349dcef36 100644 --- a/src/vs/platform/extensionManagement/node/extensionsScannerService.ts +++ b/src/vs/platform/extensionManagement/node/extensionsScannerService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IExtensionsScannerService, NativeExtensionsScannerService, } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { URI } from '../../../base/common/uri.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { IExtensionsProfileScannerService } from '../common/extensionsProfileScannerService.js'; +import { IExtensionsScannerService, NativeExtensionsScannerService, } from '../common/extensionsScannerService.js'; +import { IFileService } from '../../files/common/files.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; export class ExtensionsScannerService extends NativeExtensionsScannerService implements IExtensionsScannerService { diff --git a/src/vs/platform/extensionManagement/node/extensionsWatcher.ts b/src/vs/platform/extensionManagement/node/extensionsWatcher.ts index a56087b0b..d2b65eaea 100644 --- a/src/vs/platform/extensionManagement/node/extensionsWatcher.ts +++ b/src/vs/platform/extensionManagement/node/extensionsWatcher.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getErrorMessage } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { combinedDisposable, Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { ResourceSet } from 'vs/base/common/map'; -import { URI } from 'vs/base/common/uri'; -import { getIdAndVersion } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { DidAddProfileExtensionsEvent, DidRemoveProfileExtensionsEvent, IExtensionsProfileScannerService, ProfileExtensionsEvent } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { INativeServerExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; -import { ExtensionIdentifier, IExtension, IExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { FileChangesEvent, FileChangeType, IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { Emitter } from '../../../base/common/event.js'; +import { combinedDisposable, Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { ResourceSet } from '../../../base/common/map.js'; +import { URI } from '../../../base/common/uri.js'; +import { getIdAndVersion } from '../common/extensionManagementUtil.js'; +import { DidAddProfileExtensionsEvent, DidRemoveProfileExtensionsEvent, IExtensionsProfileScannerService, ProfileExtensionsEvent } from '../common/extensionsProfileScannerService.js'; +import { IExtensionsScannerService } from '../common/extensionsScannerService.js'; +import { INativeServerExtensionManagementService } from './extensionManagementService.js'; +import { ExtensionIdentifier, IExtension, IExtensionIdentifier } from '../../extensions/common/extensions.js'; +import { FileChangesEvent, FileChangeType, IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; export interface DidChangeProfileExtensionsEvent { readonly added?: { readonly extensions: readonly IExtensionIdentifier[]; readonly profileLocation: URI }; diff --git a/src/vs/platform/extensionManagement/test/common/configRemotes.test.ts b/src/vs/platform/extensionManagement/test/common/configRemotes.test.ts index 178293d88..57348d9b9 100644 --- a/src/vs/platform/extensionManagement/test/common/configRemotes.test.ts +++ b/src/vs/platform/extensionManagement/test/common/configRemotes.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { getDomainsOfRemotes, getRemotes } from 'vs/platform/extensionManagement/common/configRemotes'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { getDomainsOfRemotes, getRemotes } from '../../common/configRemotes.js'; suite('Config Remotes', () => { diff --git a/src/vs/platform/extensionManagement/test/common/extensionGalleryService.test.ts b/src/vs/platform/extensionManagement/test/common/extensionGalleryService.test.ts index e4f187c32..3fa0d8a0f 100644 --- a/src/vs/platform/extensionManagement/test/common/extensionGalleryService.test.ts +++ b/src/vs/platform/extensionManagement/test/common/extensionGalleryService.test.ts @@ -4,26 +4,26 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { isUUID } from 'vs/base/common/uuid'; -import { mock } from 'vs/base/test/common/mock'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IRawGalleryExtensionVersion, sortExtensionVersions } from 'vs/platform/extensionManagement/common/extensionGalleryService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { NullLogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; -import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage'; -import { TelemetryConfiguration, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry'; -import { TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { isUUID } from '../../../../base/common/uuid.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IConfigurationService } from '../../../configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { IRawGalleryExtensionVersion, sortExtensionVersions } from '../../common/extensionGalleryService.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { resolveMarketplaceHeaders } from '../../../externalServices/common/marketplace.js'; +import { InMemoryStorageService, IStorageService } from '../../../storage/common/storage.js'; +import { TelemetryConfiguration, TELEMETRY_SETTING_ID } from '../../../telemetry/common/telemetry.js'; +import { TargetPlatform } from '../../../extensions/common/extensions.js'; +import { NullTelemetryService } from '../../../telemetry/common/telemetryUtils.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; class EnvironmentServiceMock extends mock() { override readonly serviceMachineIdResource: URI; diff --git a/src/vs/platform/extensionManagement/test/common/extensionManagement.test.ts b/src/vs/platform/extensionManagement/test/common/extensionManagement.test.ts index 1c3d62f7f..4c26d81b8 100644 --- a/src/vs/platform/extensionManagement/test/common/extensionManagement.test.ts +++ b/src/vs/platform/extensionManagement/test/common/extensionManagement.test.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { EXTENSION_IDENTIFIER_PATTERN } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionKey } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { TargetPlatform } from 'vs/platform/extensions/common/extensions'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { EXTENSION_IDENTIFIER_PATTERN } from '../../common/extensionManagement.js'; +import { ExtensionKey } from '../../common/extensionManagementUtil.js'; +import { TargetPlatform } from '../../../extensions/common/extensions.js'; suite('Extension Identifier Pattern', () => { diff --git a/src/vs/platform/extensionManagement/test/common/extensionNls.test.ts b/src/vs/platform/extensionManagement/test/common/extensionNls.test.ts index 64aad4fbd..7eb71602c 100644 --- a/src/vs/platform/extensionManagement/test/common/extensionNls.test.ts +++ b/src/vs/platform/extensionManagement/test/common/extensionNls.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { deepClone } from 'vs/base/common/objects'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry'; -import { localizeManifest } from 'vs/platform/extensionManagement/common/extensionNls'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { NullLogger } from 'vs/platform/log/common/log'; +import { deepClone } from '../../../../base/common/objects.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ILocalizedString } from '../../../action/common/action.js'; +import { IConfigurationNode } from '../../../configuration/common/configurationRegistry.js'; +import { localizeManifest } from '../../common/extensionNls.js'; +import { IExtensionManifest } from '../../../extensions/common/extensions.js'; +import { NullLogger } from '../../../log/common/log.js'; const manifest: IExtensionManifest = { name: 'test', diff --git a/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts b/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts index d94305a83..6c02f4be3 100644 --- a/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts +++ b/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts @@ -5,23 +5,23 @@ import assert from 'assert'; import * as sinon from 'sinon'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { AbstractExtensionsProfileScannerService, ProfileExtensionsEvent } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { AbstractExtensionsProfileScannerService, ProfileExtensionsEvent } from '../../common/extensionsProfileScannerService.js'; +import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from '../../../extensions/common/extensions.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { IFileService } from '../../../files/common/files.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { ILogService, NullLogService } from '../../../log/common/log.js'; +import { ITelemetryService } from '../../../telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../telemetry/common/telemetryUtils.js'; +import { IUriIdentityService } from '../../../uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { IUserDataProfilesService, UserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; class TestObject extends AbstractExtensionsProfileScannerService { } diff --git a/src/vs/platform/extensionManagement/test/node/extensionDownloader.test.ts b/src/vs/platform/extensionManagement/test/node/extensionDownloader.test.ts index bae93bde8..aa437e000 100644 --- a/src/vs/platform/extensionManagement/test/node/extensionDownloader.test.ts +++ b/src/vs/platform/extensionManagement/test/node/extensionDownloader.test.ts @@ -4,27 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { platform } from 'vs/base/common/platform'; -import { arch } from 'vs/base/common/process'; -import { joinPath } from 'vs/base/common/resources'; -import { isBoolean } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { getTargetPlatform, IExtensionGalleryService, IGalleryExtension, IGalleryExtensionAssets, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionsDownloader } from 'vs/platform/extensionManagement/node/extensionDownloader'; -import { IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { platform } from '../../../../base/common/platform.js'; +import { arch } from '../../../../base/common/process.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { INativeEnvironmentService } from '../../../environment/common/environment.js'; +import { ExtensionSignatureVerificationCode, getTargetPlatform, IExtensionGalleryService, IGalleryExtension, IGalleryExtensionAssets, InstallOperation } from '../../common/extensionManagement.js'; +import { getGalleryExtensionId } from '../../common/extensionManagementUtil.js'; +import { ExtensionsDownloader } from '../../node/extensionDownloader.js'; +import { IExtensionSignatureVerificationResult, IExtensionSignatureVerificationService } from '../../node/extensionSignatureVerificationService.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { ILogService, NullLogService } from '../../../log/common/log.js'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); @@ -35,13 +32,18 @@ class TestExtensionSignatureVerificationService extends mock { - if (isBoolean(this.verificationResult)) { - return this.verificationResult; + override async verify(): Promise { + if (this.verificationResult === true) { + return { + code: ExtensionSignatureVerificationCode.Success + }; } - const error = Error(this.verificationResult); - (error as any).code = this.verificationResult; - throw error; + if (this.verificationResult === false) { + return undefined; + } + return { + code: this.verificationResult as ExtensionSignatureVerificationCode, + }; } } @@ -76,33 +78,25 @@ suite('ExtensionDownloader Tests', () => { }); }); - test('download completes successfully if verification is disabled by setting set to false', async () => { - const testObject = aTestObject({ isSignatureVerificationEnabled: false, verificationResult: 'error' }); - - const actual = await testObject.download(aGalleryExtension('a', { isSigned: true }), InstallOperation.Install, true); - - assert.strictEqual(actual.verificationStatus, false); - }); - test('download completes successfully if verification is disabled by options', async () => { - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: 'error' }); + const testObject = aTestObject({ verificationResult: 'error' }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: true }), InstallOperation.Install, false); - assert.strictEqual(actual.verificationStatus, false); + assert.strictEqual(actual.verificationStatus, undefined); }); test('download completes successfully if verification is disabled because the module is not loaded', async () => { - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: false }); + const testObject = aTestObject({ verificationResult: false }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: true }), InstallOperation.Install, true); - assert.strictEqual(actual.verificationStatus, false); + assert.strictEqual(actual.verificationStatus, undefined); }); test('download completes successfully if verification fails to execute', async () => { const errorCode = 'ENOENT'; - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: errorCode }); + const testObject = aTestObject({ verificationResult: errorCode }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: true }), InstallOperation.Install, true); @@ -111,7 +105,7 @@ suite('ExtensionDownloader Tests', () => { test('download completes successfully if verification fails ', async () => { const errorCode = 'IntegrityCheckFailed'; - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: errorCode }); + const testObject = aTestObject({ verificationResult: errorCode }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: true }), InstallOperation.Install, true); @@ -119,31 +113,30 @@ suite('ExtensionDownloader Tests', () => { }); test('download completes successfully if verification succeeds', async () => { - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: true }); + const testObject = aTestObject({ verificationResult: true }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: true }), InstallOperation.Install, true); - assert.strictEqual(actual.verificationStatus, true); + assert.strictEqual(actual.verificationStatus, ExtensionSignatureVerificationCode.Success); }); test('download completes successfully for unsigned extension', async () => { - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: true }); + const testObject = aTestObject({ verificationResult: true }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: false }), InstallOperation.Install, true); - assert.strictEqual(actual.verificationStatus, false); + assert.strictEqual(actual.verificationStatus, undefined); }); test('download completes successfully for an unsigned extension even when signature verification throws error', async () => { - const testObject = aTestObject({ isSignatureVerificationEnabled: true, verificationResult: 'error' }); + const testObject = aTestObject({ verificationResult: 'error' }); const actual = await testObject.download(aGalleryExtension('a', { isSigned: false }), InstallOperation.Install, true); - assert.strictEqual(actual.verificationStatus, false); + assert.strictEqual(actual.verificationStatus, undefined); }); - function aTestObject(options: { isSignatureVerificationEnabled: boolean; verificationResult: boolean | string }): ExtensionsDownloader { - instantiationService.stub(IConfigurationService, new TestConfigurationService(isBoolean(options.isSignatureVerificationEnabled) ? { extensions: { verifySignature: options.isSignatureVerificationEnabled } } : undefined)); + function aTestObject(options: { verificationResult: boolean | string }): ExtensionsDownloader { instantiationService.stub(IExtensionSignatureVerificationService, new TestExtensionSignatureVerificationService(options.verificationResult)); return disposables.add(instantiationService.createInstance(TestExtensionDownloader)); } diff --git a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts index 8c0569fe6..74d3ffcd7 100644 --- a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts +++ b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { dirname, joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionsProfileScannerService, IProfileExtensionsScanOptions } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { AbstractExtensionsScannerService, ExtensionScannerInput, IExtensionsScannerService, IScannedExtensionManifest, Translations } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { ExtensionType, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { dirname, joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { INativeEnvironmentService } from '../../../environment/common/environment.js'; +import { IExtensionsProfileScannerService, IProfileExtensionsScanOptions } from '../../common/extensionsProfileScannerService.js'; +import { AbstractExtensionsScannerService, ExtensionScannerInput, IExtensionsScannerService, IScannedExtensionManifest, Translations } from '../../common/extensionsScannerService.js'; +import { ExtensionsProfileScannerService } from '../../node/extensionsProfileScannerService.js'; +import { ExtensionType, IExtensionManifest, TargetPlatform } from '../../../extensions/common/extensions.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { IInstantiationService } from '../../../instantiation/common/instantiation.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { ILogService, NullLogService } from '../../../log/common/log.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { NullTelemetryService } from '../../../telemetry/common/telemetryUtils.js'; +import { IUriIdentityService } from '../../../uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { IUserDataProfilesService, UserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; let translations: Translations = Object.create(null); const ROOT = URI.file('/ROOT'); diff --git a/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts b/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts index 07639a7e7..fe258ed58 100644 --- a/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts +++ b/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const enum RecommendationSource { FILE = 1, diff --git a/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts b/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts index 2298e4c20..9cda9e8ec 100644 --- a/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts +++ b/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IExtensionRecommendationNotificationService, IExtensionRecommendations, RecommendationsNotificationResult } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; +import { Event } from '../../../base/common/event.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IExtensionRecommendationNotificationService, IExtensionRecommendations, RecommendationsNotificationResult } from './extensionRecommendations.js'; export class ExtensionRecommendationNotificationServiceChannelClient implements IExtensionRecommendationNotificationService { diff --git a/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts b/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts index fdefc170d..974a30613 100644 --- a/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts +++ b/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { AbstractExtensionResourceLoaderService, IExtensionResourceLoaderService } from 'vs/platform/extensionResourceLoader/common/extensionResourceLoader'; +import { URI } from '../../../base/common/uri.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { IFileService } from '../../files/common/files.js'; +import { FileAccess, Schemas } from '../../../base/common/network.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { ILogService } from '../../log/common/log.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { AbstractExtensionResourceLoaderService, IExtensionResourceLoaderService } from '../common/extensionResourceLoader.js'; class ExtensionResourceLoaderService extends AbstractExtensionResourceLoaderService { diff --git a/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts b/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts index 120b99640..e73ec41ab 100644 --- a/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts +++ b/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isWeb } from 'vs/base/common/platform'; -import { format2 } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { getTelemetryLevel, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; -import { RemoteAuthorities } from 'vs/base/common/network'; -import { TargetPlatform } from 'vs/platform/extensions/common/extensions'; +import { isWeb } from '../../../base/common/platform.js'; +import { format2 } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IProductService } from '../../product/common/productService.js'; +import { getServiceMachineId } from '../../externalServices/common/serviceMachineId.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { TelemetryLevel } from '../../telemetry/common/telemetry.js'; +import { getTelemetryLevel, supportsTelemetry } from '../../telemetry/common/telemetryUtils.js'; +import { RemoteAuthorities } from '../../../base/common/network.js'; +import { TargetPlatform } from '../../extensions/common/extensions.js'; const WEB_EXTENSION_RESOURCE_END_POINT_SEGMENT = '/web-extension-resource/'; diff --git a/src/vs/platform/extensionResourceLoader/common/extensionResourceLoaderService.ts b/src/vs/platform/extensionResourceLoader/common/extensionResourceLoaderService.ts index c6e63dc3a..72fccbcc5 100644 --- a/src/vs/platform/extensionResourceLoader/common/extensionResourceLoaderService.ts +++ b/src/vs/platform/extensionResourceLoader/common/extensionResourceLoaderService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { asTextOrError, IRequestService } from 'vs/platform/request/common/request'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { AbstractExtensionResourceLoaderService, IExtensionResourceLoaderService } from 'vs/platform/extensionResourceLoader/common/extensionResourceLoader'; +import { URI } from '../../../base/common/uri.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { IFileService } from '../../files/common/files.js'; +import { IProductService } from '../../product/common/productService.js'; +import { asTextOrError, IRequestService } from '../../request/common/request.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { AbstractExtensionResourceLoaderService, IExtensionResourceLoaderService } from './extensionResourceLoader.js'; export class ExtensionResourceLoaderService extends AbstractExtensionResourceLoaderService { diff --git a/src/vs/platform/extensions/common/extensionHostStarter.ts b/src/vs/platform/extensions/common/extensionHostStarter.ts index 8a1056239..1d0d3fe58 100644 --- a/src/vs/platform/extensions/common/extensionHostStarter.ts +++ b/src/vs/platform/extensions/common/extensionHostStarter.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IExtensionHostStarter = createDecorator('extensionHostStarter'); diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts index 5fae8b4b1..4a9d32956 100644 --- a/src/vs/platform/extensions/common/extensionValidator.ts +++ b/src/vs/platform/extensions/common/extensionValidator.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isEqualOrParent, joinPath } from 'vs/base/common/resources'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import * as nls from 'vs/nls'; -import * as semver from 'vs/base/common/semver/semver'; -import { IExtensionManifest, parseApiProposals } from 'vs/platform/extensions/common/extensions'; -import { allApiProposals } from 'vs/platform/extensions/common/extensionsApiProposals'; +import { isEqualOrParent, joinPath } from '../../../base/common/resources.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import * as nls from '../../../nls.js'; +import * as semver from '../../../base/common/semver/semver.js'; +import { IExtensionManifest, parseApiProposals } from './extensions.js'; +import { allApiProposals } from './extensionsApiProposals.js'; export interface IParsedVersion { hasCaret: boolean; @@ -369,7 +369,7 @@ export function areApiProposalsCompatible(apiProposals: string[], arg1?: any): b continue; } if (existingProposal.version !== version) { - incompatibleNotices.push(nls.localize('apiProposalMismatch', "Extension is using an API proposal '{0}' that is not compatible with the current version of VS Code.", proposalName)); + incompatibleNotices.push(nls.localize('apiProposalMismatch', "This extension is using the API proposal '{0}' that is not compatible with the current version of VS Code.", proposalName)); } } notices?.push(...incompatibleNotices); diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts index 822260bdc..5973d4dcf 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import Severity from 'vs/base/common/severity'; -import * as strings from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { ExtensionKind } from 'vs/platform/environment/common/environment'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { getRemoteName } from 'vs/platform/remote/common/remoteHosts'; +import Severity from '../../../base/common/severity.js'; +import * as strings from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILocalizedString } from '../../action/common/action.js'; +import { ExtensionKind } from '../../environment/common/environment.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { getRemoteName } from '../../remote/common/remoteHosts.js'; export const USER_MANIFEST_CACHE_FILE = 'extensions.user.cache'; export const BUILTIN_MANIFEST_CACHE_FILE = 'extensions.builtin.cache'; diff --git a/src/vs/platform/extensions/common/extensionsApiProposals.ts b/src/vs/platform/extensions/common/extensionsApiProposals.ts index d2d4c1fff..96a820f5e 100644 --- a/src/vs/platform/extensions/common/extensionsApiProposals.ts +++ b/src/vs/platform/extensions/common/extensionsApiProposals.ts @@ -73,6 +73,9 @@ const _allApiProposals = { contribAccessibilityHelpContent: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribAccessibilityHelpContent.d.ts', }, + contribChatParticipantDetection: { + proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribChatParticipantDetection.d.ts', + }, contribCommentEditorActionsMenu: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribCommentEditorActionsMenu.d.ts', }, @@ -121,12 +124,6 @@ const _allApiProposals = { contribShareMenu: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribShareMenu.d.ts', }, - contribSourceControlHistoryItemChangesMenu: { - proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemChangesMenu.d.ts', - }, - contribSourceControlHistoryItemGroupMenu: { - proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemGroupMenu.d.ts', - }, contribSourceControlHistoryItemMenu: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.contribSourceControlHistoryItemMenu.d.ts', }, @@ -162,6 +159,7 @@ const _allApiProposals = { }, defaultChatParticipant: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.defaultChatParticipant.d.ts', + version: 2 }, diffCommand: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.diffCommand.d.ts', @@ -246,7 +244,7 @@ const _allApiProposals = { }, lmTools: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.lmTools.d.ts', - version: 6 + version: 7 }, mappedEditsProvider: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.mappedEditsProvider.d.ts', diff --git a/src/vs/platform/extensions/electron-main/extensionHostStarter.ts b/src/vs/platform/extensions/electron-main/extensionHostStarter.ts index 4dae8d5c8..fa606b291 100644 --- a/src/vs/platform/extensions/electron-main/extensionHostStarter.ts +++ b/src/vs/platform/extensions/electron-main/extensionHostStarter.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises } from 'vs/base/common/async'; -import { canceled } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { IExtensionHostProcessOptions, IExtensionHostStarter } from 'vs/platform/extensions/common/extensionHostStarter'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { WindowUtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; +import { Promises } from '../../../base/common/async.js'; +import { canceled } from '../../../base/common/errors.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { IExtensionHostProcessOptions, IExtensionHostStarter } from '../common/extensionHostStarter.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { WindowUtilityProcess } from '../../utilityProcess/electron-main/utilityProcess.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; export class ExtensionHostStarter extends Disposable implements IDisposable, IExtensionHostStarter { @@ -112,7 +112,6 @@ export class ExtensionHostStarter extends Disposable implements IDisposable, IEx args: ['--skipWorkspaceStorageLock'], execArgv: opts.execArgv, allowLoadingUnsignedLibraries: true, - forceAllocationsToV8Sandbox: true, respondToAuthRequestsFromMainProcess: true, correlationId: id }); diff --git a/src/vs/platform/extensions/test/common/extensionValidator.test.ts b/src/vs/platform/extensions/test/common/extensionValidator.test.ts index 6ac5821e0..82c3cf0bf 100644 --- a/src/vs/platform/extensions/test/common/extensionValidator.test.ts +++ b/src/vs/platform/extensions/test/common/extensionValidator.test.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { areApiProposalsCompatible, INormalizedVersion, IParsedVersion, isValidExtensionVersion, isValidVersion, isValidVersionStr, normalizeVersion, parseVersion } from 'vs/platform/extensions/common/extensionValidator'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IExtensionManifest } from '../../common/extensions.js'; +import { areApiProposalsCompatible, INormalizedVersion, IParsedVersion, isValidExtensionVersion, isValidVersion, isValidVersionStr, normalizeVersion, parseVersion } from '../../common/extensionValidator.js'; suite('Extension Version Validator', () => { diff --git a/src/vs/platform/extensions/test/common/extensions.test.ts b/src/vs/platform/extensions/test/common/extensions.test.ts index 7b81268b3..7dff0ffb7 100644 --- a/src/vs/platform/extensions/test/common/extensions.test.ts +++ b/src/vs/platform/extensions/test/common/extensions.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { parseEnabledApiProposalNames } from 'vs/platform/extensions/common/extensions'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { parseEnabledApiProposalNames } from '../../common/extensions.js'; suite('Parsing Enabled Api Proposals', () => { diff --git a/src/vs/platform/externalServices/common/marketplace.ts b/src/vs/platform/externalServices/common/marketplace.ts index abb5e3798..3ffab849d 100644 --- a/src/vs/platform/externalServices/common/marketplace.ts +++ b/src/vs/platform/externalServices/common/marketplace.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IHeaders } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { getTelemetryLevel, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; +import { IHeaders } from '../../../base/parts/request/common/request.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { getServiceMachineId } from './serviceMachineId.js'; +import { IFileService } from '../../files/common/files.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService, TelemetryLevel } from '../../telemetry/common/telemetry.js'; +import { getTelemetryLevel, supportsTelemetry } from '../../telemetry/common/telemetryUtils.js'; export async function resolveMarketplaceHeaders(version: string, productService: IProductService, diff --git a/src/vs/platform/externalServices/common/serviceMachineId.ts b/src/vs/platform/externalServices/common/serviceMachineId.ts index 6767e7d72..8d564d63f 100644 --- a/src/vs/platform/externalServices/common/serviceMachineId.ts +++ b/src/vs/platform/externalServices/common/serviceMachineId.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { generateUuid, isUUID } from 'vs/base/common/uuid'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { generateUuid, isUUID } from '../../../base/common/uuid.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; export async function getServiceMachineId(environmentService: IEnvironmentService, fileService: IFileService, storageService: IStorageService | undefined): Promise { let uuid: string | null = storageService ? storageService.get('storage.serviceMachineId', StorageScope.APPLICATION) || null : null; diff --git a/src/vs/platform/externalTerminal/common/externalTerminal.ts b/src/vs/platform/externalTerminal/common/externalTerminal.ts index 6d8da3364..3c0e24182 100644 --- a/src/vs/platform/externalTerminal/common/externalTerminal.ts +++ b/src/vs/platform/externalTerminal/common/externalTerminal.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ITerminalEnvironment } from 'vs/platform/terminal/common/terminal'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ITerminalEnvironment } from '../../terminal/common/terminal.js'; export const IExternalTerminalService = createDecorator('externalTerminal'); diff --git a/src/vs/platform/externalTerminal/electron-main/externalTerminal.ts b/src/vs/platform/externalTerminal/electron-main/externalTerminal.ts index af6925563..f31e4e616 100644 --- a/src/vs/platform/externalTerminal/electron-main/externalTerminal.ts +++ b/src/vs/platform/externalTerminal/electron-main/externalTerminal.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExternalTerminalService } from 'vs/platform/externalTerminal/common/externalTerminal'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IExternalTerminalService } from '../common/externalTerminal.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IExternalTerminalMainService = createDecorator('externalTerminal'); diff --git a/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts b/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts index 209c24d07..ef1fe8b73 100644 --- a/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts +++ b/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts @@ -3,9 +3,9 @@ * 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'; +import { IExternalTerminalService as ICommonExternalTerminalService } from '../common/externalTerminal.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { registerMainProcessRemoteService } from '../../ipc/electron-sandbox/services.js'; export const IExternalTerminalService = createDecorator('externalTerminal'); diff --git a/src/vs/platform/externalTerminal/node/externalTerminalService.ts b/src/vs/platform/externalTerminal/node/externalTerminalService.ts index 9f85b1459..47c12711f 100644 --- a/src/vs/platform/externalTerminal/node/externalTerminalService.ts +++ b/src/vs/platform/externalTerminal/node/externalTerminalService.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import * as cp from 'child_process'; -import { memoize } from 'vs/base/common/decorators'; -import { FileAccess } from 'vs/base/common/network'; -import * as path from 'vs/base/common/path'; -import * as env from 'vs/base/common/platform'; -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 { ITerminalEnvironment } from 'vs/platform/terminal/common/terminal'; +import { memoize } from '../../../base/common/decorators.js'; +import { FileAccess } from '../../../base/common/network.js'; +import * as path from '../../../base/common/path.js'; +import * as env from '../../../base/common/platform.js'; +import { sanitizeProcessEnvironment } from '../../../base/common/processes.js'; +import * as pfs from '../../../base/node/pfs.js'; +import * as processes from '../../../base/node/processes.js'; +import * as nls from '../../../nls.js'; +import { DEFAULT_TERMINAL_OSX, IExternalTerminalService, IExternalTerminalSettings, ITerminalForPlatform } from '../common/externalTerminal.js'; +import { ITerminalEnvironment } from '../../terminal/common/terminal.js'; const TERMINAL_TITLE = nls.localize('console.title', "VS Code Console"); diff --git a/src/vs/platform/externalTerminal/test/electron-main/externalTerminalService.test.ts b/src/vs/platform/externalTerminal/test/electron-main/externalTerminalService.test.ts index 3a71b5ba6..601434fd8 100644 --- a/src/vs/platform/externalTerminal/test/electron-main/externalTerminalService.test.ts +++ b/src/vs/platform/externalTerminal/test/electron-main/externalTerminalService.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { deepStrictEqual, strictEqual } from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { DEFAULT_TERMINAL_OSX, IExternalTerminalConfiguration } from 'vs/platform/externalTerminal/common/externalTerminal'; -import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from 'vs/platform/externalTerminal/node/externalTerminalService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { DEFAULT_TERMINAL_OSX, IExternalTerminalConfiguration } from '../../common/externalTerminal.js'; +import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from '../../node/externalTerminalService.js'; const mockConfig = Object.freeze({ terminal: { diff --git a/src/vs/platform/files/browser/htmlFileSystemProvider.ts b/src/vs/platform/files/browser/htmlFileSystemProvider.ts index 382bb7a7e..9b519a194 100644 --- a/src/vs/platform/files/browser/htmlFileSystemProvider.ts +++ b/src/vs/platform/files/browser/htmlFileSystemProvider.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { basename, extname, normalize } from 'vs/base/common/path'; -import { isLinux } from 'vs/base/common/platform'; -import { extUri, extUriIgnorePathCase } from 'vs/base/common/resources'; -import { newWriteableStream, ReadableStreamEvents } from 'vs/base/common/stream'; -import { createFileSystemProviderError, IFileDeleteOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions } from 'vs/platform/files/common/files'; -import { WebFileSystemAccess } from 'vs/platform/files/browser/webFileSystemAccess'; -import { IndexedDB } from 'vs/base/browser/indexedDB'; -import { ILogService } from 'vs/platform/log/common/log'; +import { localize } from '../../../nls.js'; +import { URI } from '../../../base/common/uri.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { basename, extname, normalize } from '../../../base/common/path.js'; +import { isLinux } from '../../../base/common/platform.js'; +import { extUri, extUriIgnorePathCase } from '../../../base/common/resources.js'; +import { newWriteableStream, ReadableStreamEvents } from '../../../base/common/stream.js'; +import { createFileSystemProviderError, IFileDeleteOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions } from '../common/files.js'; +import { WebFileSystemAccess } from './webFileSystemAccess.js'; +import { IndexedDB } from '../../../base/browser/indexedDB.js'; +import { ILogService } from '../../log/common/log.js'; export class HTMLFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileReadStreamCapability { diff --git a/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts b/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts index a83c046c7..d2b0da2e8 100644 --- a/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts +++ b/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Throttler } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ExtUri } from 'vs/base/common/resources'; -import { isString } from 'vs/base/common/types'; -import { URI, UriDto } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { createFileSystemProviderError, FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions } from 'vs/platform/files/common/files'; -import { DBClosedError, IndexedDB } from 'vs/base/browser/indexedDB'; -import { BroadcastDataChannel } from 'vs/base/browser/broadcast'; +import { Throttler } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { ExtUri } from '../../../base/common/resources.js'; +import { isString } from '../../../base/common/types.js'; +import { URI, UriDto } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { createFileSystemProviderError, FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions } from '../common/files.js'; +import { DBClosedError, IndexedDB } from '../../../base/browser/indexedDB.js'; +import { BroadcastDataChannel } from '../../../base/browser/broadcast.js'; export type IndexedDBFileSystemProviderErrorDataClassification = { owner: 'sandy081'; diff --git a/src/vs/platform/files/common/diskFileSystemProvider.ts b/src/vs/platform/files/common/diskFileSystemProvider.ts index 8e5d9e45e..ab382fef4 100644 --- a/src/vs/platform/files/common/diskFileSystemProvider.ts +++ b/src/vs/platform/files/common/diskFileSystemProvider.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { insert } from 'vs/base/common/arrays'; -import { ThrottledDelayer } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { removeTrailingPathSeparator } from 'vs/base/common/extpath'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { normalize } from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { IFileChange, IFileSystemProvider, IWatchOptions } from 'vs/platform/files/common/files'; -import { AbstractNonRecursiveWatcherClient, AbstractUniversalWatcherClient, ILogMessage, INonRecursiveWatchRequest, IRecursiveWatcherOptions, isRecursiveWatchRequest, IUniversalWatchRequest, reviveFileChanges } from 'vs/platform/files/common/watcher'; -import { ILogService, LogLevel } from 'vs/platform/log/common/log'; +import { insert } from '../../../base/common/arrays.js'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { Emitter } from '../../../base/common/event.js'; +import { removeTrailingPathSeparator } from '../../../base/common/extpath.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { normalize } from '../../../base/common/path.js'; +import { URI } from '../../../base/common/uri.js'; +import { IFileChange, IFileSystemProvider, IWatchOptions } from './files.js'; +import { AbstractNonRecursiveWatcherClient, AbstractUniversalWatcherClient, ILogMessage, INonRecursiveWatchRequest, IRecursiveWatcherOptions, isRecursiveWatchRequest, IUniversalWatchRequest, reviveFileChanges } from './watcher.js'; +import { ILogService, LogLevel } from '../../log/common/log.js'; export interface IDiskFileSystemProviderOptions { watcher?: { @@ -71,16 +71,7 @@ export abstract class AbstractDiskFileSystemProvider extends Disposable implemen private readonly universalWatchRequestDelayer = this._register(new ThrottledDelayer(0)); private watchUniversal(resource: URI, opts: IWatchOptions): IDisposable { - - // Add to list of paths to watch universally - const request: IUniversalWatchRequest = { - path: this.toWatchPath(resource), - excludes: opts.excludes, - includes: opts.includes, - recursive: opts.recursive, - filter: opts.filter, - correlationId: opts.correlationId - }; + const request = this.toWatchRequest(resource, opts); const remove = insert(this.universalWatchRequests, request); // Trigger update @@ -96,6 +87,32 @@ export abstract class AbstractDiskFileSystemProvider extends Disposable implemen }); } + private toWatchRequest(resource: URI, opts: IWatchOptions): IUniversalWatchRequest { + const request: IUniversalWatchRequest = { + path: this.toWatchPath(resource), + excludes: opts.excludes, + includes: opts.includes, + recursive: opts.recursive, + filter: opts.filter, + correlationId: opts.correlationId + }; + + if (isRecursiveWatchRequest(request)) { + + // Adjust for polling + const usePolling = this.options?.watcher?.recursive?.usePolling; + if (usePolling === true) { + request.pollingInterval = this.options?.watcher?.recursive?.pollingInterval ?? 5000; + } else if (Array.isArray(usePolling)) { + if (usePolling.includes(request.path)) { + request.pollingInterval = this.options?.watcher?.recursive?.pollingInterval ?? 5000; + } + } + } + + return request; + } + private refreshUniversalWatchers(): void { // Buffer requests for universal watching to decide on right watcher @@ -121,24 +138,6 @@ export abstract class AbstractDiskFileSystemProvider extends Disposable implemen })); } - // Adjust for polling - const usePolling = this.options?.watcher?.recursive?.usePolling; - if (usePolling === true) { - for (const request of this.universalWatchRequests) { - if (isRecursiveWatchRequest(request)) { - request.pollingInterval = this.options?.watcher?.recursive?.pollingInterval ?? 5000; - } - } - } else if (Array.isArray(usePolling)) { - for (const request of this.universalWatchRequests) { - if (isRecursiveWatchRequest(request)) { - if (usePolling.includes(request.path)) { - request.pollingInterval = this.options?.watcher?.recursive?.pollingInterval ?? 5000; - } - } - } - } - // Ask to watch the provided paths return this.universalWatcher.watch(this.universalWatchRequests); } diff --git a/src/vs/platform/files/common/diskFileSystemProviderClient.ts b/src/vs/platform/files/common/diskFileSystemProviderClient.ts index d7f385174..9bd3dcb35 100644 --- a/src/vs/platform/files/common/diskFileSystemProviderClient.ts +++ b/src/vs/platform/files/common/diskFileSystemProviderClient.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { canceled } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { newWriteableStream, ReadableStreamEventPayload, ReadableStreamEvents } from 'vs/base/common/stream'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IChannel } from 'vs/base/parts/ipc/common/ipc'; -import { createFileSystemProviderError, IFileAtomicReadOptions, IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileCloneCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IStat, IWatchOptions, IFileSystemProviderError } from 'vs/platform/files/common/files'; -import { reviveFileChanges } from 'vs/platform/files/common/watcher'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { canceled } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { newWriteableStream, ReadableStreamEventPayload, ReadableStreamEvents } from '../../../base/common/stream.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { createFileSystemProviderError, IFileAtomicReadOptions, IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileCloneCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IStat, IWatchOptions, IFileSystemProviderError } from './files.js'; +import { reviveFileChanges } from './watcher.js'; export const LOCAL_FILE_SYSTEM_CHANNEL_NAME = 'localFilesystem'; diff --git a/src/vs/platform/files/common/fileService.ts b/src/vs/platform/files/common/fileService.ts index b35396854..2c0bfe136 100644 --- a/src/vs/platform/files/common/fileService.ts +++ b/src/vs/platform/files/common/fileService.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { Promises, ResourceQueue } from 'vs/base/common/async'; -import { bufferedStreamToBuffer, bufferToReadable, newWriteableBufferStream, readableToBuffer, streamToBuffer, VSBuffer, VSBufferReadable, VSBufferReadableBufferedStream, VSBufferReadableStream } from 'vs/base/common/buffer'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { Iterable } from 'vs/base/common/iterator'; -import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { Schemas } from 'vs/base/common/network'; -import { mark } from 'vs/base/common/performance'; -import { extUri, extUriIgnorePathCase, IExtUri, isAbsolutePath } from 'vs/base/common/resources'; -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, IWatchOptionsWithCorrelation, IFileSystemWatcher, IWatchOptionsWithoutCorrelation } 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'; +import { coalesce } from '../../../base/common/arrays.js'; +import { Promises, ResourceQueue } from '../../../base/common/async.js'; +import { bufferedStreamToBuffer, bufferToReadable, newWriteableBufferStream, readableToBuffer, streamToBuffer, VSBuffer, VSBufferReadable, VSBufferReadableBufferedStream, VSBufferReadableStream } from '../../../base/common/buffer.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { hash } from '../../../base/common/hash.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { Schemas } from '../../../base/common/network.js'; +import { mark } from '../../../base/common/performance.js'; +import { extUri, extUriIgnorePathCase, IExtUri, isAbsolutePath } from '../../../base/common/resources.js'; +import { consumeStream, isReadableBufferedStream, isReadableStream, listenStream, newWriteableStream, peekReadable, peekStream, transform } from '../../../base/common/stream.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +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, IWatchOptionsWithCorrelation, IFileSystemWatcher, IWatchOptionsWithoutCorrelation } from './files.js'; +import { readFileIntoStream } from './io.js'; +import { ILogService } from '../../log/common/log.js'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; export class FileService extends Disposable implements IFileService { diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index 82d4f9ba0..b1bc8113a 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { IExpression, IRelativePattern } from 'vs/base/common/glob'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { sep } from 'vs/base/common/path'; -import { ReadableStreamEvents } from 'vs/base/common/stream'; -import { startsWithIgnoreCase } from 'vs/base/common/strings'; -import { isNumber } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { isWeb } from 'vs/base/common/platform'; -import { Schemas } from 'vs/base/common/network'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { Lazy } from 'vs/base/common/lazy'; +import { VSBuffer, VSBufferReadable, VSBufferReadableStream } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { IExpression, IRelativePattern } from '../../../base/common/glob.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { sep } from '../../../base/common/path.js'; +import { ReadableStreamEvents } from '../../../base/common/stream.js'; +import { startsWithIgnoreCase } from '../../../base/common/strings.js'; +import { isNumber } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { Lazy } from '../../../base/common/lazy.js'; //#region file service & providers diff --git a/src/vs/platform/files/common/inMemoryFilesystemProvider.ts b/src/vs/platform/files/common/inMemoryFilesystemProvider.ts index f875c3be6..ecdebd131 100644 --- a/src/vs/platform/files/common/inMemoryFilesystemProvider.ts +++ b/src/vs/platform/files/common/inMemoryFilesystemProvider.ts @@ -3,13 +3,13 @@ * 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 { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import * as resources from '../../../base/common/resources.js'; +import { ReadableStreamEvents, newWriteableStream } from '../../../base/common/stream.js'; +import { URI } from '../../../base/common/uri.js'; +import { FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions, createFileSystemProviderError, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileReadStreamCapability } from './files.js'; class File implements IStat { diff --git a/src/vs/platform/files/common/io.ts b/src/vs/platform/files/common/io.ts index b37b7a91f..cb3f3a54b 100644 --- a/src/vs/platform/files/common/io.ts +++ b/src/vs/platform/files/common/io.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { canceled } from 'vs/base/common/errors'; -import { IDataTransformer, IErrorTransformer, WriteableStream } from 'vs/base/common/stream'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { createFileSystemProviderError, ensureFileSystemProviderError, IFileReadStreamOptions, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability } from 'vs/platform/files/common/files'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { canceled } from '../../../base/common/errors.js'; +import { IDataTransformer, IErrorTransformer, WriteableStream } from '../../../base/common/stream.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { createFileSystemProviderError, ensureFileSystemProviderError, IFileReadStreamOptions, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability } from './files.js'; export interface ICreateReadStreamOptions extends IFileReadStreamOptions { diff --git a/src/vs/platform/files/common/watcher.ts b/src/vs/platform/files/common/watcher.ts index eef16ccfc..ff0fd505d 100644 --- a/src/vs/platform/files/common/watcher.ts +++ b/src/vs/platform/files/common/watcher.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { GLOBSTAR, IRelativePattern, parse, ParsedPattern } from 'vs/base/common/glob'; -import { Disposable, DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { isAbsolute } from 'vs/base/common/path'; -import { isLinux } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { FileChangeFilter, FileChangeType, IFileChange, isParent } from 'vs/platform/files/common/files'; +import { Event } from '../../../base/common/event.js'; +import { GLOBSTAR, IRelativePattern, parse, ParsedPattern } from '../../../base/common/glob.js'; +import { Disposable, DisposableStore, IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { isAbsolute } from '../../../base/common/path.js'; +import { isLinux } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { FileChangeFilter, FileChangeType, IFileChange, isParent } from './files.js'; interface IWatchRequest { diff --git a/src/vs/platform/files/electron-main/diskFileSystemProviderServer.ts b/src/vs/platform/files/electron-main/diskFileSystemProviderServer.ts index 64cbede2f..649a620f7 100644 --- a/src/vs/platform/files/electron-main/diskFileSystemProviderServer.ts +++ b/src/vs/platform/files/electron-main/diskFileSystemProviderServer.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import { shell } from 'electron'; -import { localize } from 'vs/nls'; -import { isWindows } from 'vs/base/common/platform'; -import { Emitter } from 'vs/base/common/event'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IFileDeleteOptions, IFileChange, IWatchOptions, createFileSystemProviderError, FileSystemProviderErrorCode } from 'vs/platform/files/common/files'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { basename, normalize } from 'vs/base/common/path'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AbstractDiskFileSystemProviderChannel, AbstractSessionFileWatcher, ISessionFileWatcher } from 'vs/platform/files/node/diskFileSystemProviderServer'; -import { DefaultURITransformer, IURITransformer } from 'vs/base/common/uriIpc'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; +import { localize } from '../../../nls.js'; +import { isWindows } from '../../../base/common/platform.js'; +import { Emitter } from '../../../base/common/event.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IFileDeleteOptions, IFileChange, IWatchOptions, createFileSystemProviderError, FileSystemProviderErrorCode } from '../common/files.js'; +import { DiskFileSystemProvider } from '../node/diskFileSystemProvider.js'; +import { basename, normalize } from '../../../base/common/path.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { ILogService } from '../../log/common/log.js'; +import { AbstractDiskFileSystemProviderChannel, AbstractSessionFileWatcher, ISessionFileWatcher } from '../node/diskFileSystemProviderServer.js'; +import { DefaultURITransformer, IURITransformer } from '../../../base/common/uriIpc.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; export class DiskFileSystemProviderChannel extends AbstractDiskFileSystemProviderChannel { diff --git a/src/vs/platform/files/node/diskFileSystemProvider.ts b/src/vs/platform/files/node/diskFileSystemProvider.ts index 9993c5f82..4586709dd 100644 --- a/src/vs/platform/files/node/diskFileSystemProvider.ts +++ b/src/vs/platform/files/node/diskFileSystemProvider.ts @@ -4,27 +4,27 @@ *--------------------------------------------------------------------------------------------*/ import { Stats, promises } from 'fs'; -import { Barrier, retry } from 'vs/base/common/async'; -import { ResourceMap } from 'vs/base/common/map'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { isEqual } from 'vs/base/common/extpath'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { basename, dirname, join } from 'vs/base/common/path'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase, joinPath, basename as resourcesBasename, dirname as resourcesDirname } from 'vs/base/common/resources'; -import { newWriteableStream, ReadableStreamEvents } from 'vs/base/common/stream'; -import { URI } from 'vs/base/common/uri'; -import { IDirent, Promises, RimRafMode, SymlinkSupport } from 'vs/base/node/pfs'; -import { localize } from 'vs/nls'; -import { createFileSystemProviderError, IFileAtomicReadOptions, IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileCloneCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, isFileOpenForWriteOptions, IStat, FilePermission, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileAtomicDeleteCapability, IFileChange } from 'vs/platform/files/common/files'; -import { readFileIntoStream } from 'vs/platform/files/common/io'; -import { AbstractNonRecursiveWatcherClient, AbstractUniversalWatcherClient, ILogMessage } from 'vs/platform/files/common/watcher'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AbstractDiskFileSystemProvider, IDiskFileSystemProviderOptions } from 'vs/platform/files/common/diskFileSystemProvider'; -import { UniversalWatcherClient } from 'vs/platform/files/node/watcher/watcherClient'; -import { NodeJSWatcherClient } from 'vs/platform/files/node/watcher/nodejs/nodejsClient'; +import { Barrier, retry } from '../../../base/common/async.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { isEqual } from '../../../base/common/extpath.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { basename, dirname, join } from '../../../base/common/path.js'; +import { isLinux, isWindows } from '../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase, joinPath, basename as resourcesBasename, dirname as resourcesDirname } from '../../../base/common/resources.js'; +import { newWriteableStream, ReadableStreamEvents } from '../../../base/common/stream.js'; +import { URI } from '../../../base/common/uri.js'; +import { IDirent, Promises, RimRafMode, SymlinkSupport } from '../../../base/node/pfs.js'; +import { localize } from '../../../nls.js'; +import { createFileSystemProviderError, IFileAtomicReadOptions, IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileCloneCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, isFileOpenForWriteOptions, IStat, FilePermission, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileAtomicDeleteCapability, IFileChange } from '../common/files.js'; +import { readFileIntoStream } from '../common/io.js'; +import { AbstractNonRecursiveWatcherClient, AbstractUniversalWatcherClient, ILogMessage } from '../common/watcher.js'; +import { ILogService } from '../../log/common/log.js'; +import { AbstractDiskFileSystemProvider, IDiskFileSystemProviderOptions } from '../common/diskFileSystemProvider.js'; +import { UniversalWatcherClient } from './watcher/watcherClient.js'; +import { NodeJSWatcherClient } from './watcher/nodejs/nodejsClient.js'; export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapability, diff --git a/src/vs/platform/files/node/diskFileSystemProviderServer.ts b/src/vs/platform/files/node/diskFileSystemProviderServer.ts index a6407715b..d62690494 100644 --- a/src/vs/platform/files/node/diskFileSystemProviderServer.ts +++ b/src/vs/platform/files/node/diskFileSystemProviderServer.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { Disposable, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { ReadableStreamEventPayload, listenStream } from 'vs/base/common/stream'; -import { IStat, IFileReadStreamOptions, IFileWriteOptions, IFileOpenOptions, IFileDeleteOptions, IFileOverwriteOptions, IFileChange, IWatchOptions, FileType, IFileAtomicReadOptions } from 'vs/platform/files/common/files'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { IRecursiveWatcherOptions } from 'vs/platform/files/common/watcher'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { DiskFileSystemProvider } from './diskFileSystemProvider.js'; +import { Disposable, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ILogService } from '../../log/common/log.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { ReadableStreamEventPayload, listenStream } from '../../../base/common/stream.js'; +import { IStat, IFileReadStreamOptions, IFileWriteOptions, IFileOpenOptions, IFileDeleteOptions, IFileOverwriteOptions, IFileChange, IWatchOptions, FileType, IFileAtomicReadOptions } from '../common/files.js'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IRecursiveWatcherOptions } from '../common/watcher.js'; export interface ISessionFileWatcher extends IDisposable { watch(req: number, resource: URI, opts: IWatchOptions): IDisposable; @@ -272,7 +272,7 @@ export abstract class AbstractSessionFileWatcher extends Disposable implements I // This is important because we want to ensure that we only // forward events from the watched paths for this session and // not other clients that asked to watch other paths. - private readonly fileWatcher = this._register(new DiskFileSystemProvider(this.logService, { watcher: { recursive: this.getRecursiveWatcherOptions(this.environmentService) } })); + private readonly fileWatcher = this._register(new DiskFileSystemProvider(this.logService)); constructor( private readonly uriTransformer: IURITransformer, diff --git a/src/vs/platform/files/node/watcher/baseWatcher.ts b/src/vs/platform/files/node/watcher/baseWatcher.ts index c5665396d..749f9fc85 100644 --- a/src/vs/platform/files/node/watcher/baseWatcher.ts +++ b/src/vs/platform/files/node/watcher/baseWatcher.ts @@ -4,12 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import { watchFile, unwatchFile, Stats } from 'fs'; -import { Disposable, DisposableMap, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { ILogMessage, IRecursiveWatcherWithSubscribe, IUniversalWatchRequest, IWatchRequestWithCorrelation, IWatcher, IWatcherErrorEvent, isWatchRequestWithCorrelation, requestFilterToString } from 'vs/platform/files/common/watcher'; -import { Emitter, Event } from 'vs/base/common/event'; -import { FileChangeType, IFileChange } from 'vs/platform/files/common/files'; -import { URI } from 'vs/base/common/uri'; -import { DeferredPromise, ThrottledDelayer } from 'vs/base/common/async'; +import { Disposable, DisposableMap, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { ILogMessage, IRecursiveWatcherWithSubscribe, IUniversalWatchRequest, IWatchRequestWithCorrelation, IWatcher, IWatcherErrorEvent, isWatchRequestWithCorrelation, requestFilterToString } from '../../common/watcher.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { FileChangeType, IFileChange } from '../../common/files.js'; +import { URI } from '../../../../base/common/uri.js'; +import { DeferredPromise, ThrottledDelayer } from '../../../../base/common/async.js'; +import { hash } from '../../../../base/common/hash.js'; + +interface ISuspendedWatchRequest { + readonly id: number; + readonly correlationId: number | undefined; + readonly path: string; +} export abstract class BaseWatcher extends Disposable implements IWatcher { @@ -22,11 +29,11 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { protected readonly _onDidWatchFail = this._register(new Emitter()); private readonly onDidWatchFail = this._onDidWatchFail.event; - private readonly allNonCorrelatedWatchRequests = new Set(); - private readonly allCorrelatedWatchRequests = new Map(); + private readonly correlatedWatchRequests = new Map(); + private readonly nonCorrelatedWatchRequests = new Map(); - private readonly suspendedWatchRequests = this._register(new DisposableMap()); - private readonly suspendedWatchRequestsWithPolling = new Set(); + private readonly suspendedWatchRequests = this._register(new DisposableMap()); + private readonly suspendedWatchRequestsWithPolling = new Set(); private readonly updateWatchersDelayer = this._register(new ThrottledDelayer(this.getUpdateWatchersDelay())); @@ -37,32 +44,28 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { constructor() { super(); - this._register(this.onDidWatchFail(request => this.handleDidWatchFail(request))); - } - - private handleDidWatchFail(request: IUniversalWatchRequest): void { - if (!this.isCorrelated(request)) { - - // For now, limit failed watch monitoring to requests with a correlationId - // to experiment with this feature in a controlled way. Monitoring requests - // requires us to install polling watchers (via `fs.watchFile()`) and thus - // should be used sparingly. - // - // TODO@bpasero revisit this in the future to have a more general approach - // for suspend/resume and drop the `legacyMonitorRequest` in parcel. - // One issue is that we need to be able to uniquely identify a request and - // without correlation that is actually harder... - - return; - } - - this.suspendWatchRequest(request); + this._register(this.onDidWatchFail(request => this.suspendWatchRequest({ + id: this.computeId(request), + correlationId: this.isCorrelated(request) ? request.correlationId : undefined, + path: request.path + }))); } protected isCorrelated(request: IUniversalWatchRequest): request is IWatchRequestWithCorrelation { return isWatchRequestWithCorrelation(request); } + private computeId(request: IUniversalWatchRequest): number { + if (this.isCorrelated(request)) { + return request.correlationId; + } else { + // Requests without correlation do not carry any unique identifier, so we have to + // come up with one based on the options of the request. This matches what the + // file service does (vs/platform/files/common/fileService.ts#L1178). + return hash(request); + } + } + async watch(requests: IUniversalWatchRequest[]): Promise { if (!this.joinWatch.isSettled) { this.joinWatch.complete(); @@ -70,23 +73,23 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { this.joinWatch = new DeferredPromise(); try { - this.allCorrelatedWatchRequests.clear(); - this.allNonCorrelatedWatchRequests.clear(); + this.correlatedWatchRequests.clear(); + this.nonCorrelatedWatchRequests.clear(); // Figure out correlated vs. non-correlated requests for (const request of requests) { if (this.isCorrelated(request)) { - this.allCorrelatedWatchRequests.set(request.correlationId, request); + this.correlatedWatchRequests.set(request.correlationId, request); } else { - this.allNonCorrelatedWatchRequests.add(request); + this.nonCorrelatedWatchRequests.set(this.computeId(request), request); } } - // Remove all suspended correlated watch requests that are no longer watched - for (const [correlationId] of this.suspendedWatchRequests) { - if (!this.allCorrelatedWatchRequests.has(correlationId)) { - this.suspendedWatchRequests.deleteAndDispose(correlationId); - this.suspendedWatchRequestsWithPolling.delete(correlationId); + // Remove all suspended watch requests that are no longer watched + for (const [id] of this.suspendedWatchRequests) { + if (!this.nonCorrelatedWatchRequests.has(id) && !this.correlatedWatchRequests.has(id)) { + this.suspendedWatchRequests.deleteAndDispose(id); + this.suspendedWatchRequestsWithPolling.delete(id); } } @@ -97,10 +100,14 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { } private updateWatchers(delayed: boolean): Promise { - return this.updateWatchersDelayer.trigger(() => this.doWatch([ - ...this.allNonCorrelatedWatchRequests, - ...Array.from(this.allCorrelatedWatchRequests.values()).filter(request => !this.suspendedWatchRequests.has(request.correlationId)) - ]), delayed ? this.getUpdateWatchersDelay() : 0); + const nonSuspendedRequests: IUniversalWatchRequest[] = []; + for (const [id, request] of [...this.nonCorrelatedWatchRequests, ...this.correlatedWatchRequests]) { + if (!this.suspendedWatchRequests.has(id)) { + nonSuspendedRequests.push(request); + } + } + + return this.updateWatchersDelayer.trigger(() => this.doWatch(nonSuspendedRequests), delayed ? this.getUpdateWatchersDelay() : 0); } protected getUpdateWatchersDelay(): number { @@ -108,20 +115,17 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { } isSuspended(request: IUniversalWatchRequest): 'polling' | boolean { - if (typeof request.correlationId !== 'number') { - return false; - } - - return this.suspendedWatchRequestsWithPolling.has(request.correlationId) ? 'polling' : this.suspendedWatchRequests.has(request.correlationId); + const id = this.computeId(request); + return this.suspendedWatchRequestsWithPolling.has(id) ? 'polling' : this.suspendedWatchRequests.has(id); } - private async suspendWatchRequest(request: IWatchRequestWithCorrelation): Promise { - if (this.suspendedWatchRequests.has(request.correlationId)) { + private async suspendWatchRequest(request: ISuspendedWatchRequest): Promise { + if (this.suspendedWatchRequests.has(request.id)) { return; // already suspended } const disposables = new DisposableStore(); - this.suspendedWatchRequests.set(request.correlationId, disposables); + this.suspendedWatchRequests.set(request.id, disposables); // It is possible that a watch request fails right during watch() // phase while other requests succeed. To increase the chance of @@ -139,24 +143,24 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { this.updateWatchers(true /* delay this call as we might accumulate many failing watch requests on startup */); } - private resumeWatchRequest(request: IWatchRequestWithCorrelation): void { - this.suspendedWatchRequests.deleteAndDispose(request.correlationId); - this.suspendedWatchRequestsWithPolling.delete(request.correlationId); + private resumeWatchRequest(request: ISuspendedWatchRequest): void { + this.suspendedWatchRequests.deleteAndDispose(request.id); + this.suspendedWatchRequestsWithPolling.delete(request.id); this.updateWatchers(false); } - private monitorSuspendedWatchRequest(request: IWatchRequestWithCorrelation, disposables: DisposableStore): void { + private monitorSuspendedWatchRequest(request: ISuspendedWatchRequest, disposables: DisposableStore): void { if (this.doMonitorWithExistingWatcher(request, disposables)) { this.trace(`reusing an existing recursive watcher to monitor ${request.path}`); - this.suspendedWatchRequestsWithPolling.delete(request.correlationId); + this.suspendedWatchRequestsWithPolling.delete(request.id); } else { this.doMonitorWithNodeJS(request, disposables); - this.suspendedWatchRequestsWithPolling.add(request.correlationId); + this.suspendedWatchRequestsWithPolling.add(request.id); } } - private doMonitorWithExistingWatcher(request: IWatchRequestWithCorrelation, disposables: DisposableStore): boolean { + private doMonitorWithExistingWatcher(request: ISuspendedWatchRequest, disposables: DisposableStore): boolean { const subscription = this.recursiveWatcher?.subscribe(request.path, (error, change) => { if (disposables.isDisposed) { return; // return early if already disposed @@ -178,7 +182,7 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { return false; } - private doMonitorWithNodeJS(request: IWatchRequestWithCorrelation, disposables: DisposableStore): void { + private doMonitorWithNodeJS(request: ISuspendedWatchRequest, disposables: DisposableStore): void { let pathNotFound = false; const watchFileCallback: (curr: Stats, prev: Stats) => void = (curr, prev) => { @@ -215,7 +219,7 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { })); } - private onMonitoredPathAdded(request: IWatchRequestWithCorrelation) { + private onMonitoredPathAdded(request: ISuspendedWatchRequest): void { this.trace(`detected ${request.path} exists again, resuming watcher (correlationId: ${request.correlationId})`); // Emit as event @@ -236,14 +240,14 @@ export abstract class BaseWatcher extends Disposable implements IWatcher { this.suspendedWatchRequestsWithPolling.clear(); } - protected traceEvent(event: IFileChange, request: IUniversalWatchRequest): void { + protected traceEvent(event: IFileChange, request: IUniversalWatchRequest | ISuspendedWatchRequest): void { if (this.verboseLogging) { const traceMsg = ` >> normalized ${event.type === FileChangeType.ADDED ? '[ADDED]' : event.type === FileChangeType.DELETED ? '[DELETED]' : '[CHANGED]'} ${event.resource.fsPath}`; this.traceWithCorrelation(traceMsg, request); } } - protected traceWithCorrelation(message: string, request: IUniversalWatchRequest): void { + protected traceWithCorrelation(message: string, request: IUniversalWatchRequest | ISuspendedWatchRequest): void { if (this.verboseLogging) { this.trace(`${message}${typeof request.correlationId === 'number' ? ` <${request.correlationId}> ` : ``}`); } diff --git a/src/vs/platform/files/node/watcher/nodejs/nodejsClient.ts b/src/vs/platform/files/node/watcher/nodejs/nodejsClient.ts index 3a2f64469..a10792b1d 100644 --- a/src/vs/platform/files/node/watcher/nodejs/nodejsClient.ts +++ b/src/vs/platform/files/node/watcher/nodejs/nodejsClient.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IFileChange } from 'vs/platform/files/common/files'; -import { ILogMessage, AbstractNonRecursiveWatcherClient, INonRecursiveWatcher } from 'vs/platform/files/common/watcher'; -import { NodeJSWatcher } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcher'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; +import { IFileChange } from '../../../common/files.js'; +import { ILogMessage, AbstractNonRecursiveWatcherClient, INonRecursiveWatcher } from '../../../common/watcher.js'; +import { NodeJSWatcher } from './nodejsWatcher.js'; export class NodeJSWatcherClient extends AbstractNonRecursiveWatcherClient { diff --git a/src/vs/platform/files/node/watcher/nodejs/nodejsWatcher.ts b/src/vs/platform/files/node/watcher/nodejs/nodejsWatcher.ts index 16f861668..0c60edd91 100644 --- a/src/vs/platform/files/node/watcher/nodejs/nodejsWatcher.ts +++ b/src/vs/platform/files/node/watcher/nodejs/nodejsWatcher.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { patternsEquals } from 'vs/base/common/glob'; -import { BaseWatcher } from 'vs/platform/files/node/watcher/baseWatcher'; -import { isLinux } from 'vs/base/common/platform'; -import { INonRecursiveWatchRequest, INonRecursiveWatcher, IRecursiveWatcherWithSubscribe } from 'vs/platform/files/common/watcher'; -import { NodeJSFileWatcherLibrary } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcherLib'; -import { isEqual } from 'vs/base/common/extpath'; +import { Event } from '../../../../../base/common/event.js'; +import { patternsEquals } from '../../../../../base/common/glob.js'; +import { BaseWatcher } from '../baseWatcher.js'; +import { isLinux } from '../../../../../base/common/platform.js'; +import { INonRecursiveWatchRequest, INonRecursiveWatcher, IRecursiveWatcherWithSubscribe } from '../../../common/watcher.js'; +import { NodeJSFileWatcherLibrary } from './nodejsWatcherLib.js'; +import { isEqual } from '../../../../../base/common/extpath.js'; export interface INodeJSWatcherInstance { diff --git a/src/vs/platform/files/node/watcher/nodejs/nodejsWatcherLib.ts b/src/vs/platform/files/node/watcher/nodejs/nodejsWatcherLib.ts index eec6a2232..69792c996 100644 --- a/src/vs/platform/files/node/watcher/nodejs/nodejsWatcherLib.ts +++ b/src/vs/platform/files/node/watcher/nodejs/nodejsWatcherLib.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import { watch, promises } from 'fs'; -import { RunOnceWorker, ThrottledWorker } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isEqualOrParent } from 'vs/base/common/extpath'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { normalizeNFC } from 'vs/base/common/normalization'; -import { basename, dirname, join } from 'vs/base/common/path'; -import { isLinux, isMacintosh } from 'vs/base/common/platform'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { realcase } from 'vs/base/node/extpath'; -import { Promises } from 'vs/base/node/pfs'; -import { FileChangeType, IFileChange } from 'vs/platform/files/common/files'; -import { ILogMessage, coalesceEvents, INonRecursiveWatchRequest, parseWatcherPatterns, IRecursiveWatcherWithSubscribe, isFiltered, isWatchRequestWithCorrelation } from 'vs/platform/files/common/watcher'; +import { RunOnceWorker, ThrottledWorker } from '../../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js'; +import { isEqualOrParent } from '../../../../../base/common/extpath.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js'; +import { normalizeNFC } from '../../../../../base/common/normalization.js'; +import { basename, dirname, join } from '../../../../../base/common/path.js'; +import { isLinux, isMacintosh } from '../../../../../base/common/platform.js'; +import { joinPath } from '../../../../../base/common/resources.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { realcase } from '../../../../../base/node/extpath.js'; +import { Promises } from '../../../../../base/node/pfs.js'; +import { FileChangeType, IFileChange } from '../../../common/files.js'; +import { ILogMessage, coalesceEvents, INonRecursiveWatchRequest, parseWatcherPatterns, IRecursiveWatcherWithSubscribe, isFiltered, isWatchRequestWithCorrelation } from '../../../common/watcher.js'; export class NodeJSFileWatcherLibrary extends Disposable { @@ -51,7 +51,7 @@ export class NodeJSFileWatcherLibrary extends Disposable { private readonly excludes = parseWatcherPatterns(this.request.path, this.request.excludes); private readonly includes = this.request.includes ? parseWatcherPatterns(this.request.path, this.request.includes) : undefined; - private readonly filter = isWatchRequestWithCorrelation(this.request) ? this.request.filter : undefined; // TODO@bpasero filtering for now is only enabled when correlating because watchers are otherwise potentially reused + private readonly filter = isWatchRequestWithCorrelation(this.request) ? this.request.filter : undefined; // filtering is only enabled when correlating because watchers are otherwise potentially reused private readonly cts = new CancellationTokenSource(); diff --git a/src/vs/platform/files/node/watcher/parcel/parcelWatcher.ts b/src/vs/platform/files/node/watcher/parcel/parcelWatcher.ts index 46d213c12..3b47a55d6 100644 --- a/src/vs/platform/files/node/watcher/parcel/parcelWatcher.ts +++ b/src/vs/platform/files/node/watcher/parcel/parcelWatcher.ts @@ -4,25 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import * as parcelWatcher from '@parcel/watcher'; -import { existsSync, statSync, unlinkSync } from 'fs'; -import { tmpdir } from 'os'; -import { URI } from 'vs/base/common/uri'; -import { DeferredPromise, RunOnceScheduler, RunOnceWorker, ThrottledWorker } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Emitter, Event } from 'vs/base/common/event'; -import { randomPath, isEqual, isEqualOrParent } from 'vs/base/common/extpath'; -import { GLOBSTAR, patternsEquals } from 'vs/base/common/glob'; -import { BaseWatcher } from 'vs/platform/files/node/watcher/baseWatcher'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { normalizeNFC } from 'vs/base/common/normalization'; -import { dirname, normalize } from 'vs/base/common/path'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { realcaseSync, realpathSync } from 'vs/base/node/extpath'; -import { NodeJSFileWatcherLibrary } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcherLib'; -import { FileChangeType, IFileChange } from 'vs/platform/files/common/files'; -import { coalesceEvents, IRecursiveWatchRequest, parseWatcherPatterns, IRecursiveWatcherWithSubscribe, isFiltered, IWatcherErrorEvent } from 'vs/platform/files/common/watcher'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { statSync, unlinkSync } from 'fs'; +import { tmpdir, homedir } from 'os'; +import { URI } from '../../../../../base/common/uri.js'; +import { DeferredPromise, RunOnceScheduler, RunOnceWorker, ThrottledWorker } from '../../../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../../../base/common/errorMessage.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { randomPath, isEqual, isEqualOrParent } from '../../../../../base/common/extpath.js'; +import { GLOBSTAR, patternsEquals } from '../../../../../base/common/glob.js'; +import { BaseWatcher } from '../baseWatcher.js'; +import { TernarySearchTree } from '../../../../../base/common/ternarySearchTree.js'; +import { normalizeNFC } from '../../../../../base/common/normalization.js'; +import { normalize, join } from '../../../../../base/common/path.js'; +import { isLinux, isMacintosh, isWindows } from '../../../../../base/common/platform.js'; +import { realcaseSync, realpathSync } from '../../../../../base/node/extpath.js'; +import { FileChangeType, IFileChange } from '../../../common/files.js'; +import { coalesceEvents, IRecursiveWatchRequest, parseWatcherPatterns, IRecursiveWatcherWithSubscribe, isFiltered, IWatcherErrorEvent } from '../../../common/watcher.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js'; export class ParcelWatcherInstance extends Disposable { @@ -145,6 +144,14 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS ] ); + private static readonly PREDEFINED_EXCLUDES: { [platform: string]: string[] } = { + 'win32': [], + 'darwin': [ + join(homedir(), 'Library', 'Containers') // Triggers access dialog from macOS 14 (https://github.com/microsoft/vscode/issues/208105) + ], + 'linux': [] + }; + private static readonly PARCEL_WATCHER_BACKEND = isWindows ? 'windows' : isLinux ? 'inotify' : 'fs-events'; private readonly _onDidError = this._register(new Emitter()); @@ -293,8 +300,9 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS } // We already ran before, check for events since + const parcelWatcherLib = parcelWatcher; if (counter > 1) { - const parcelEvents = await parcelWatcher.getEventsSince(realPath, snapshotFile, { ignore: request.excludes, backend: ParcelWatcher.PARCEL_WATCHER_BACKEND }); + const parcelEvents = await parcelWatcherLib.getEventsSince(realPath, snapshotFile, { ignore: this.addPredefinedExcludes(request.excludes), backend: ParcelWatcher.PARCEL_WATCHER_BACKEND }); if (cts.token.isCancellationRequested) { return; @@ -305,7 +313,7 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS } // Store a snapshot of files to the snapshot file - await parcelWatcher.writeSnapshot(realPath, snapshotFile, { ignore: request.excludes, backend: ParcelWatcher.PARCEL_WATCHER_BACKEND }); + await parcelWatcherLib.writeSnapshot(realPath, snapshotFile, { ignore: this.addPredefinedExcludes(request.excludes), backend: ParcelWatcher.PARCEL_WATCHER_BACKEND }); // Signal we are ready now when the first snapshot was written if (counter === 1) { @@ -350,7 +358,8 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS const { realPath, realPathDiffers, realPathLength } = this.normalizePath(request); try { - const parcelWatcherInstance = await parcelWatcher.subscribe(realPath, (error, parcelEvents) => { + const parcelWatcherLib = parcelWatcher; + const parcelWatcherInstance = await parcelWatcherLib.subscribe(realPath, (error, parcelEvents) => { if (watcher.token.isCancellationRequested) { return; // return early when disposed } @@ -367,7 +376,7 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS this.onParcelEvents(parcelEvents, watcher, realPathDiffers, realPathLength); }, { backend: ParcelWatcher.PARCEL_WATCHER_BACKEND, - ignore: watcher.request.excludes + ignore: this.addPredefinedExcludes(watcher.request.excludes) }); this.trace(`Started watching: '${realPath}' with backend '${ParcelWatcher.PARCEL_WATCHER_BACKEND}'`); @@ -383,6 +392,21 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS } } + private addPredefinedExcludes(initialExcludes: string[]): string[] { + const excludes = [...initialExcludes]; + + const predefinedExcludes = ParcelWatcher.PREDEFINED_EXCLUDES[process.platform]; + if (Array.isArray(predefinedExcludes)) { + for (const exclude of predefinedExcludes) { + if (!excludes.includes(exclude)) { + excludes.push(exclude); + } + } + } + + return excludes; + } + private onParcelEvents(parcelEvents: parcelWatcher.Event[], watcher: ParcelWatcherInstance, realPathDiffers: boolean, realPathLength: number): void { if (parcelEvents.length === 0) { return; @@ -516,7 +540,7 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS const filteredEvents: IFileChange[] = []; let rootDeleted = false; - const filter = this.isCorrelated(watcher.request) ? watcher.request.filter : undefined; // TODO@bpasero filtering for now is only enabled when correlating because watchers are otherwise potentially reused + const filter = this.isCorrelated(watcher.request) ? watcher.request.filter : undefined; // filtering is only enabled when correlating because watchers are otherwise potentially reused for (const event of events) { // Emit to instance subscriptions if any before filtering @@ -526,20 +550,7 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS // Filtering rootDeleted = event.type === FileChangeType.DELETED && isEqual(event.resource.fsPath, watcher.request.path, !isLinux); - if ( - isFiltered(event, filter) || - // Explicitly exclude changes to root if we have any - // to avoid VS Code closing all opened editors which - // can happen e.g. in case of network connectivity - // issues - // (https://github.com/microsoft/vscode/issues/136673) - // - // Update 2024: with the new correlated events, we - // really do not want to skip over file events any - // more, so we only ignore this event for non-correlated - // watch requests. - (rootDeleted && !this.isCorrelated(watcher.request)) - ) { + if (isFiltered(event, filter)) { if (this.verboseLogging) { this.traceWithCorrelation(` >> ignored (filtered) ${event.resource.fsPath}`, watcher.request); } @@ -559,54 +570,8 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS private onWatchedPathDeleted(watcher: ParcelWatcherInstance): void { this.warn('Watcher shutdown because watched path got deleted', watcher); - let legacyMonitored = false; - if (!this.isCorrelated(watcher.request)) { - // Do monitoring of the request path parent unless this request - // can be handled via suspend/resume in the super class - legacyMonitored = this.legacyMonitorRequest(watcher); - } - - if (!legacyMonitored) { - watcher.notifyWatchFailed(); - this._onDidWatchFail.fire(watcher.request); - } - } - - private legacyMonitorRequest(watcher: ParcelWatcherInstance): boolean { - const parentPath = dirname(watcher.request.path); - if (existsSync(parentPath)) { - this.trace('Trying to watch on the parent path to restart the watcher...', watcher); - - const nodeWatcher = new NodeJSFileWatcherLibrary({ path: parentPath, excludes: [], recursive: false, correlationId: watcher.request.correlationId }, undefined, changes => { - if (watcher.token.isCancellationRequested) { - return; // return early when disposed - } - - // Watcher path came back! Restart watching... - for (const { resource, type } of changes) { - if (isEqual(resource.fsPath, watcher.request.path, !isLinux) && (type === FileChangeType.ADDED || type === FileChangeType.UPDATED)) { - if (this.isPathValid(watcher.request.path)) { - this.warn('Watcher restarts because watched path got created again', watcher); - - // Stop watching that parent folder - nodeWatcher.dispose(); - - // Restart the file watching - this.restartWatching(watcher); - - break; - } - } - } - }, undefined, msg => this._onDidLogMessage.fire(msg), this.verboseLogging); - - // Make sure to stop watching when the watcher is disposed - watcher.token.onCancellationRequested(() => nodeWatcher.dispose()); - - return true; - } - - return false; + watcher.notifyWatchFailed(); + this._onDidWatchFail.fire(watcher.request); } private onUnexpectedError(error: unknown, request?: IRecursiveWatchRequest): void { @@ -835,7 +800,7 @@ export class ParcelWatcher extends BaseWatcher implements IRecursiveWatcherWithS } private toMessage(message: string, request?: IRecursiveWatchRequest): string { - return request ? `[File Watcher (parcel)] ${message} (path: ${request.path})` : `[File Watcher (parcel)] ${message}`; + return request ? `[File Watcher] ${message} (path: ${request.path})` : `[File Watcher ('parcel')] ${message}`; } protected get recursiveWatcher() { return this; } diff --git a/src/vs/platform/files/node/watcher/watcher.ts b/src/vs/platform/files/node/watcher/watcher.ts index 3ea9fc612..9ceab54f8 100644 --- a/src/vs/platform/files/node/watcher/watcher.ts +++ b/src/vs/platform/files/node/watcher/watcher.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILogMessage, IUniversalWatcher, IUniversalWatchRequest } from 'vs/platform/files/common/watcher'; -import { Emitter, Event } from 'vs/base/common/event'; -import { ParcelWatcher } from 'vs/platform/files/node/watcher/parcel/parcelWatcher'; -import { NodeJSWatcher } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcher'; -import { Promises } from 'vs/base/common/async'; -import { computeStats } from 'vs/platform/files/node/watcher/watcherStats'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ILogMessage, isRecursiveWatchRequest, IUniversalWatcher, IUniversalWatchRequest } from '../../common/watcher.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { ParcelWatcher } from './parcel/parcelWatcher.js'; +import { NodeJSWatcher } from './nodejs/nodejsWatcher.js'; +import { Promises } from '../../../../base/common/async.js'; +import { computeStats } from './watcherStats.js'; export class UniversalWatcher extends Disposable implements IUniversalWatcher { @@ -23,9 +23,21 @@ export class UniversalWatcher extends Disposable implements IUniversalWatcher { readonly onDidLogMessage = Event.any(this._onDidLogMessage.event, this.recursiveWatcher.onDidLogMessage, this.nonRecursiveWatcher.onDidLogMessage); private requests: IUniversalWatchRequest[] = []; + private failedRecursiveRequests = 0; + + constructor() { + super(); + + this._register(this.recursiveWatcher.onDidError(e => { + if (e.request) { + this.failedRecursiveRequests++; + } + })); + } async watch(requests: IUniversalWatchRequest[]): Promise { this.requests = requests; + this.failedRecursiveRequests = 0; // Watch recursively first to give recursive watchers a chance // to step in for non-recursive watch requests, thus reducing @@ -33,13 +45,13 @@ export class UniversalWatcher extends Disposable implements IUniversalWatcher { let error: Error | undefined; try { - await this.recursiveWatcher.watch(requests.filter(request => request.recursive)); + await this.recursiveWatcher.watch(requests.filter(request => isRecursiveWatchRequest(request))); } catch (e) { error = e; } try { - await this.nonRecursiveWatcher.watch(requests.filter(request => !request.recursive)); + await this.nonRecursiveWatcher.watch(requests.filter(request => !isRecursiveWatchRequest(request))); } catch (e) { if (!error) { error = e; @@ -55,7 +67,7 @@ export class UniversalWatcher extends Disposable implements IUniversalWatcher { // Log stats if (enabled && this.requests.length > 0) { - this._onDidLogMessage.fire({ type: 'trace', message: computeStats(this.requests, this.recursiveWatcher, this.nonRecursiveWatcher) }); + this._onDidLogMessage.fire({ type: 'trace', message: computeStats(this.requests, this.failedRecursiveRequests, this.recursiveWatcher, this.nonRecursiveWatcher) }); } // Forward to watchers diff --git a/src/vs/platform/files/node/watcher/watcherClient.ts b/src/vs/platform/files/node/watcher/watcherClient.ts index f7b39b5f3..f14e8c4dd 100644 --- a/src/vs/platform/files/node/watcher/watcherClient.ts +++ b/src/vs/platform/files/node/watcher/watcherClient.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { FileAccess } from 'vs/base/common/network'; -import { getNextTickChannel, ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { Client } from 'vs/base/parts/ipc/node/ipc.cp'; -import { IFileChange } from 'vs/platform/files/common/files'; -import { AbstractUniversalWatcherClient, ILogMessage, IUniversalWatcher } from 'vs/platform/files/common/watcher'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { FileAccess } from '../../../../base/common/network.js'; +import { getNextTickChannel, ProxyChannel } from '../../../../base/parts/ipc/common/ipc.js'; +import { Client } from '../../../../base/parts/ipc/node/ipc.cp.js'; +import { IFileChange } from '../../common/files.js'; +import { AbstractUniversalWatcherClient, ILogMessage, IUniversalWatcher } from '../../common/watcher.js'; export class UniversalWatcherClient extends AbstractUniversalWatcherClient { diff --git a/src/vs/platform/files/node/watcher/watcherMain.ts b/src/vs/platform/files/node/watcher/watcherMain.ts index 09f952c4f..82f77152d 100644 --- a/src/vs/platform/files/node/watcher/watcherMain.ts +++ b/src/vs/platform/files/node/watcher/watcherMain.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { Server as ChildProcessServer } from 'vs/base/parts/ipc/node/ipc.cp'; -import { Server as UtilityProcessServer } from 'vs/base/parts/ipc/node/ipc.mp'; -import { isUtilityProcess } from 'vs/base/parts/sandbox/node/electronTypes'; -import { UniversalWatcher } from 'vs/platform/files/node/watcher/watcher'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ProxyChannel } from '../../../../base/parts/ipc/common/ipc.js'; +import { Server as ChildProcessServer } from '../../../../base/parts/ipc/node/ipc.cp.js'; +import { Server as UtilityProcessServer } from '../../../../base/parts/ipc/node/ipc.mp.js'; +import { isUtilityProcess } from '../../../../base/parts/sandbox/node/electronTypes.js'; +import { UniversalWatcher } from './watcher.js'; let server: ChildProcessServer | UtilityProcessServer; if (isUtilityProcess(process)) { diff --git a/src/vs/platform/files/node/watcher/watcherStats.ts b/src/vs/platform/files/node/watcher/watcherStats.ts index 861e6d24b..b13a2187f 100644 --- a/src/vs/platform/files/node/watcher/watcherStats.ts +++ b/src/vs/platform/files/node/watcher/watcherStats.ts @@ -3,18 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IUniversalWatchRequest, requestFilterToString } from 'vs/platform/files/common/watcher'; -import { INodeJSWatcherInstance, NodeJSWatcher } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcher'; -import { ParcelWatcher, ParcelWatcherInstance } from 'vs/platform/files/node/watcher/parcel/parcelWatcher'; +import { INonRecursiveWatchRequest, IRecursiveWatchRequest, isRecursiveWatchRequest, IUniversalWatchRequest, requestFilterToString } from '../../common/watcher.js'; +import { INodeJSWatcherInstance, NodeJSWatcher } from './nodejs/nodejsWatcher.js'; +import { ParcelWatcher, ParcelWatcherInstance } from './parcel/parcelWatcher.js'; export function computeStats( requests: IUniversalWatchRequest[], + failedRecursiveRequests: number, recursiveWatcher: ParcelWatcher, nonRecursiveWatcher: NodeJSWatcher ): string { const lines: string[] = []; - const allRecursiveRequests = sortByPathPrefix(requests.filter(request => request.recursive)); + const allRecursiveRequests = sortByPathPrefix(requests.filter(request => isRecursiveWatchRequest(request))); const nonSuspendedRecursiveRequests = allRecursiveRequests.filter(request => recursiveWatcher.isSuspended(request) === false); const suspendedPollingRecursiveRequests = allRecursiveRequests.filter(request => recursiveWatcher.isSuspended(request) === 'polling'); const suspendedNonPollingRecursiveRequests = allRecursiveRequests.filter(request => recursiveWatcher.isSuspended(request) === true); @@ -22,7 +23,7 @@ export function computeStats( const recursiveRequestsStatus = computeRequestStatus(allRecursiveRequests, recursiveWatcher); const recursiveWatcherStatus = computeRecursiveWatchStatus(recursiveWatcher); - const allNonRecursiveRequests = sortByPathPrefix(requests.filter(request => !request.recursive)); + const allNonRecursiveRequests = sortByPathPrefix(requests.filter(request => !isRecursiveWatchRequest(request))); const nonSuspendedNonRecursiveRequests = allNonRecursiveRequests.filter(request => nonRecursiveWatcher.isSuspended(request) === false); const suspendedPollingNonRecursiveRequests = allNonRecursiveRequests.filter(request => nonRecursiveWatcher.isSuspended(request) === 'polling'); const suspendedNonPollingNonRecursiveRequests = allNonRecursiveRequests.filter(request => nonRecursiveWatcher.isSuspended(request) === true); @@ -31,7 +32,7 @@ export function computeStats( const nonRecursiveWatcherStatus = computeNonRecursiveWatchStatus(nonRecursiveWatcher); lines.push('[Summary]'); - lines.push(`- Recursive Requests: total: ${allRecursiveRequests.length}, suspended: ${recursiveRequestsStatus.suspended}, polling: ${recursiveRequestsStatus.polling}`); + lines.push(`- Recursive Requests: total: ${allRecursiveRequests.length}, suspended: ${recursiveRequestsStatus.suspended}, polling: ${recursiveRequestsStatus.polling}, failed: ${failedRecursiveRequests}`); lines.push(`- Non-Recursive Requests: total: ${allNonRecursiveRequests.length}, suspended: ${nonRecursiveRequestsStatus.suspended}, polling: ${nonRecursiveRequestsStatus.polling}`); lines.push(`- Recursive Watchers: total: ${recursiveWatcher.watchers.size}, active: ${recursiveWatcherStatus.active}, failed: ${recursiveWatcherStatus.failed}, stopped: ${recursiveWatcherStatus.stopped}`); lines.push(`- Non-Recursive Watchers: total: ${nonRecursiveWatcher.watchers.size}, active: ${nonRecursiveWatcherStatus.active}, failed: ${nonRecursiveWatcherStatus.failed}, reusing: ${nonRecursiveWatcherStatus.reusing}`); @@ -140,6 +141,8 @@ function computeNonRecursiveWatchStatus(nonRecursiveWatcher: NodeJSWatcher): { a return { active, failed, reusing }; } +function sortByPathPrefix(requests: IRecursiveWatchRequest[]): IRecursiveWatchRequest[]; +function sortByPathPrefix(requests: INonRecursiveWatchRequest[]): INonRecursiveWatchRequest[]; function sortByPathPrefix(requests: IUniversalWatchRequest[]): IUniversalWatchRequest[]; function sortByPathPrefix(requests: INodeJSWatcherInstance[]): INodeJSWatcherInstance[]; function sortByPathPrefix(requests: ParcelWatcherInstance[]): ParcelWatcherInstance[]; diff --git a/src/vs/platform/files/test/browser/fileService.test.ts b/src/vs/platform/files/test/browser/fileService.test.ts index 166cf5496..0f7e60550 100644 --- a/src/vs/platform/files/test/browser/fileService.test.ts +++ b/src/vs/platform/files/test/browser/fileService.test.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import 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 { Emitter, Event } from 'vs/base/common/event'; -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, IFileChange, isFileSystemWatcher, FileChangesEvent, FileChangeType } 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'; +import { DeferredPromise, timeout } from '../../../../base/common/async.js'; +import { bufferToReadable, bufferToStream, VSBuffer } from '../../../../base/common/buffer.js'; +import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { consumeStream, newWriteableStream, ReadableStreamEvents } from '../../../../base/common/stream.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IFileOpenOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileType, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent, IStat, IFileAtomicReadOptions, IFileAtomicWriteOptions, IFileAtomicDeleteOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileAtomicWriteCapability, IFileAtomicOptions, IFileChange, isFileSystemWatcher, FileChangesEvent, FileChangeType } from '../../common/files.js'; +import { FileService } from '../../common/fileService.js'; +import { NullFileSystemProvider } from '../common/nullFileSystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; suite('File Service', () => { diff --git a/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts b/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts index 0ee13e7c9..fe30a71f5 100644 --- a/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts +++ b/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IndexedDB } from 'vs/base/browser/indexedDB'; -import { bufferToReadable, bufferToStream, VSBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { basename, joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { flakySuite } from 'vs/base/test/common/testUtils'; -import { IndexedDBFileSystemProvider } from 'vs/platform/files/browser/indexedDBFileSystemProvider'; -import { FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FileSystemProviderError, FileSystemProviderErrorCode, FileType } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { IndexedDB } from '../../../../base/browser/indexedDB.js'; +import { bufferToReadable, bufferToStream, VSBuffer, VSBufferReadable, VSBufferReadableStream } from '../../../../base/common/buffer.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { basename, joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { flakySuite } from '../../../../base/test/common/testUtils.js'; +import { IndexedDBFileSystemProvider } from '../../browser/indexedDBFileSystemProvider.js'; +import { FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FileSystemProviderError, FileSystemProviderErrorCode, FileType } from '../../common/files.js'; +import { FileService } from '../../common/fileService.js'; +import { NullLogService } from '../../../log/common/log.js'; flakySuite('IndexedDBFileSystemProvider', function () { diff --git a/src/vs/platform/files/test/common/files.test.ts b/src/vs/platform/files/test/common/files.test.ts index 245d2222b..b057324b2 100644 --- a/src/vs/platform/files/test/common/files.test.ts +++ b/src/vs/platform/files/test/common/files.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { isEqual, isEqualOrParent } from 'vs/base/common/extpath'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite, toResource } from 'vs/base/test/common/utils'; -import { FileChangesEvent, FileChangeType, IFileChange, isParent } from 'vs/platform/files/common/files'; +import { isEqual, isEqualOrParent } from '../../../../base/common/extpath.js'; +import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite, toResource } from '../../../../base/test/common/utils.js'; +import { FileChangesEvent, FileChangeType, IFileChange, isParent } from '../../common/files.js'; suite('Files', () => { diff --git a/src/vs/platform/files/test/common/nullFileSystemProvider.ts b/src/vs/platform/files/test/common/nullFileSystemProvider.ts index 59862eaf6..a0cbe43ae 100644 --- a/src/vs/platform/files/test/common/nullFileSystemProvider.ts +++ b/src/vs/platform/files/test/common/nullFileSystemProvider.ts @@ -3,12 +3,12 @@ * 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 { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { ReadableStreamEvents } from '../../../../base/common/stream.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileType, IFileWriteOptions, IFileChange, IFileSystemProvider, IStat, IWatchOptions, IFileReadStreamOptions } from '../../common/files.js'; export class NullFileSystemProvider implements IFileSystemProvider { diff --git a/src/vs/platform/files/test/common/watcher.test.ts b/src/vs/platform/files/test/common/watcher.test.ts index 6d7bb7f3b..f526d1504 100644 --- a/src/vs/platform/files/test/common/watcher.test.ts +++ b/src/vs/platform/files/test/common/watcher.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { FileChangeFilter, FileChangesEvent, FileChangeType, IFileChange } from 'vs/platform/files/common/files'; -import { coalesceEvents, reviveFileChanges, parseWatcherPatterns, isFiltered } from 'vs/platform/files/common/watcher'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { isLinux, isWindows } from '../../../../base/common/platform.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { FileChangeFilter, FileChangesEvent, FileChangeType, IFileChange } from '../../common/files.js'; +import { coalesceEvents, reviveFileChanges, parseWatcherPatterns, isFiltered } from '../../common/watcher.js'; class TestFileWatcher extends Disposable { private readonly _onDidFilesChange: Emitter<{ raw: IFileChange[]; event: FileChangesEvent }>; diff --git a/src/vs/platform/files/test/node/diskFileService.integrationTest.ts b/src/vs/platform/files/test/node/diskFileService.integrationTest.ts index 681e390ec..84f4a01c3 100644 --- a/src/vs/platform/files/test/node/diskFileService.integrationTest.ts +++ b/src/vs/platform/files/test/node/diskFileService.integrationTest.ts @@ -6,20 +6,21 @@ import assert from 'assert'; import { createReadStream, existsSync, readdirSync, readFileSync, statSync, writeFileSync, promises } from 'fs'; import { tmpdir } from 'os'; -import { timeout } from 'vs/base/common/async'; -import { bufferToReadable, bufferToStream, streamToBuffer, streamToBufferReadableStream, VSBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { basename, dirname, join, posix } from 'vs/base/common/path'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { Promises } from 'vs/base/node/pfs'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { etag, IFileAtomicReadOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, hasFileAtomicReadCapability, hasOpenReadWriteCloseCapability, IFileStat, IFileStatWithMetadata, IReadFileOptions, IStat, NotModifiedSinceFileOperationError, TooLargeFileOperationError, IFileAtomicOptions } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { timeout } from '../../../../base/common/async.js'; +import { bufferToReadable, bufferToStream, streamToBuffer, streamToBufferReadableStream, VSBuffer, VSBufferReadable, VSBufferReadableStream } from '../../../../base/common/buffer.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { FileAccess, Schemas } from '../../../../base/common/network.js'; +import { basename, dirname, join, posix } from '../../../../base/common/path.js'; +import { isLinux, isWindows } from '../../../../base/common/platform.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Promises } from '../../../../base/node/pfs.js'; +import { flakySuite, getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { etag, IFileAtomicReadOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, hasFileAtomicReadCapability, hasOpenReadWriteCloseCapability, IFileStat, IFileStatWithMetadata, IReadFileOptions, IStat, NotModifiedSinceFileOperationError, TooLargeFileOperationError, IFileAtomicOptions } from '../../common/files.js'; +import { FileService } from '../../common/fileService.js'; +import { DiskFileSystemProvider } from '../../node/diskFileSystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { isESM } from '../../../../base/common/amd.js'; function getByName(root: IFileStat, name: string): IFileStat | undefined { if (root.children === undefined) { @@ -131,7 +132,7 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { DiskFileSystemProvider.configureFlushOnWrite(false); // speed up all unit tests by disabling flush on write -flakySuite('Disk File Service', function () { +(!isESM ? suite.skip : flakySuite /* somehow fails in AMD with ENOENT for fixtures dir */)('Disk File Service', function () { const testSchema = 'test'; diff --git a/src/vs/platform/files/test/node/nodejsWatcher.integrationTest.ts b/src/vs/platform/files/test/node/nodejsWatcher.test.ts similarity index 91% rename from src/vs/platform/files/test/node/nodejsWatcher.integrationTest.ts rename to src/vs/platform/files/test/node/nodejsWatcher.test.ts index c53f15426..4b42b0b09 100644 --- a/src/vs/platform/files/test/node/nodejsWatcher.integrationTest.ts +++ b/src/vs/platform/files/test/node/nodejsWatcher.test.ts @@ -6,31 +6,35 @@ import * as fs from 'fs'; import assert from 'assert'; import { tmpdir } from 'os'; -import { basename, dirname, join } from 'vs/base/common/path'; -import { Promises, RimRafMode } from 'vs/base/node/pfs'; -import { getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { FileChangeFilter, FileChangeType } from 'vs/platform/files/common/files'; -import { INonRecursiveWatchRequest, IRecursiveWatcherWithSubscribe } from 'vs/platform/files/common/watcher'; -import { watchFileContents } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcherLib'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { getDriveLetter } from 'vs/base/common/extpath'; -import { ltrim } from 'vs/base/common/strings'; -import { DeferredPromise, timeout } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { NodeJSWatcher } from 'vs/platform/files/node/watcher/nodejs/nodejsWatcher'; -import { FileAccess } from 'vs/base/common/network'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { addUNCHostToAllowlist } from 'vs/base/node/unc'; -import { Emitter, Event } from 'vs/base/common/event'; -import { TestParcelWatcher } from 'vs/platform/files/test/node/parcelWatcher.integrationTest'; +import { basename, dirname, join } from '../../../../base/common/path.js'; +import { Promises, RimRafMode } from '../../../../base/node/pfs.js'; +import { getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { FileChangeFilter, FileChangeType } from '../../common/files.js'; +import { INonRecursiveWatchRequest, IRecursiveWatcherWithSubscribe } from '../../common/watcher.js'; +import { watchFileContents } from '../../node/watcher/nodejs/nodejsWatcherLib.js'; +import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { getDriveLetter } from '../../../../base/common/extpath.js'; +import { ltrim } from '../../../../base/common/strings.js'; +import { DeferredPromise, timeout } from '../../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { NodeJSWatcher } from '../../node/watcher/nodejs/nodejsWatcher.js'; +import { FileAccess } from '../../../../base/common/network.js'; +import { extUriBiasedIgnorePathCase } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { addUNCHostToAllowlist } from '../../../../base/node/unc.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { TestParcelWatcher } from './parcelWatcher.test.js'; // this suite has shown flaky runs in Azure pipelines where // tasks would just hang and timeout after a while (not in // mocha but generally). as such they will run only on demand // whenever we update the watcher library. -suite.skip('File Watcher (node.js)', () => { +/* eslint-disable local/code-ensure-no-disposables-leak-in-test */ + +suite.skip('File Watcher (node.js)', function () { + + this.timeout(10000); class TestNodeJSWatcher extends NodeJSWatcher { @@ -65,7 +69,7 @@ suite.skip('File Watcher (node.js)', () => { watcher?.setVerboseLogging(enable); } - enableLogging(false); + enableLogging(loggingEnabled); setup(async () => { await createWatcher(undefined); @@ -602,42 +606,42 @@ suite.skip('File Watcher (node.js)', () => { await changeFuture; }); - test('correlated watch requests support suspend/resume (file, does not exist in beginning)', async function () { + test('watch requests support suspend/resume (file, does not exist in beginning)', async function () { const filePath = join(testDir, 'not-found.txt'); const onDidWatchFail = Event.toPromise(watcher.onWatchFail); - const request = { path: filePath, excludes: [], recursive: false, correlationId: 1 }; + const request = { path: filePath, excludes: [], recursive: false }; await watcher.watch([request]); await onDidWatchFail; assert.strictEqual(watcher.isSuspended(request), 'polling'); - await basicCrudTest(filePath, undefined, 1, undefined, true); - await basicCrudTest(filePath, undefined, 1, undefined, true); + await basicCrudTest(filePath, undefined, null, undefined, true); + await basicCrudTest(filePath, undefined, null, undefined, true); }); - test('correlated watch requests support suspend/resume (file, exists in beginning)', async function () { + test('watch requests support suspend/resume (file, exists in beginning)', async function () { const filePath = join(testDir, 'lorem.txt'); - const request = { path: filePath, excludes: [], recursive: false, correlationId: 1 }; + const request = { path: filePath, excludes: [], recursive: false }; await watcher.watch([request]); const onDidWatchFail = Event.toPromise(watcher.onWatchFail); - await basicCrudTest(filePath, true, 1); + await basicCrudTest(filePath, true); await onDidWatchFail; assert.strictEqual(watcher.isSuspended(request), 'polling'); - await basicCrudTest(filePath, undefined, 1, undefined, true); + await basicCrudTest(filePath, undefined, null, undefined, true); }); - test('correlated watch requests support suspend/resume (folder, does not exist in beginning)', async function () { + test('watch requests support suspend/resume (folder, does not exist in beginning)', async function () { let onDidWatchFail = Event.toPromise(watcher.onWatchFail); const folderPath = join(testDir, 'not-found'); - const request = { path: folderPath, excludes: [], recursive: false, correlationId: 1 }; + const request = { path: folderPath, excludes: [], recursive: false }; await watcher.watch([request]); await onDidWatchFail; assert.strictEqual(watcher.isSuspended(request), 'polling'); - let changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED, 1); + let changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED); let onDidWatch = Event.toPromise(watcher.onDidWatch); await fs.promises.mkdir(folderPath); await changeFuture; @@ -645,15 +649,15 @@ suite.skip('File Watcher (node.js)', () => { assert.strictEqual(watcher.isSuspended(request), false); - const filePath = join(folderPath, 'newFile.txt'); - await basicCrudTest(filePath, undefined, 1); + if (isWindows) { // somehow failing on macOS/Linux + const filePath = join(folderPath, 'newFile.txt'); + await basicCrudTest(filePath); - if (!isMacintosh) { // macOS does not report DELETE events for folders onDidWatchFail = Event.toPromise(watcher.onWatchFail); await fs.promises.rmdir(folderPath); await onDidWatchFail; - changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED, 1); + changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED); onDidWatch = Event.toPromise(watcher.onDidWatch); await fs.promises.mkdir(folderPath); await changeFuture; @@ -661,22 +665,22 @@ suite.skip('File Watcher (node.js)', () => { await timeout(500); // somehow needed on Linux - await basicCrudTest(filePath, undefined, 1); + await basicCrudTest(filePath); } }); - (isMacintosh /* macOS: does not seem to report this */ ? test.skip : test)('correlated watch requests support suspend/resume (folder, exists in beginning)', async function () { + (isMacintosh /* macOS: does not seem to report this */ ? test.skip : test)('watch requests support suspend/resume (folder, exists in beginning)', async function () { const folderPath = join(testDir, 'deep'); - await watcher.watch([{ path: folderPath, excludes: [], recursive: false, correlationId: 1 }]); + await watcher.watch([{ path: folderPath, excludes: [], recursive: false }]); const filePath = join(folderPath, 'newFile.txt'); - await basicCrudTest(filePath, undefined, 1); + await basicCrudTest(filePath); const onDidWatchFail = Event.toPromise(watcher.onWatchFail); await Promises.rm(folderPath); await onDidWatchFail; - const changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED, 1); + const changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED); const onDidWatch = Event.toPromise(watcher.onDidWatch); await fs.promises.mkdir(folderPath); await changeFuture; @@ -684,7 +688,7 @@ suite.skip('File Watcher (node.js)', () => { await timeout(500); // somehow needed on Linux - await basicCrudTest(filePath, undefined, 1); + await basicCrudTest(filePath); }); test('parcel watcher reused when present for non-recursive file watching (uncorrelated)', function () { @@ -745,7 +749,7 @@ suite.skip('File Watcher (node.js)', () => { assert.strictEqual(instance.isReusingRecursiveWatcher, false); } - test('correlated watch requests support suspend/resume (file, does not exist in beginning, parcel watcher reused)', async function () { + test('watch requests support suspend/resume (file, does not exist in beginning, parcel watcher reused)', async function () { const recursiveWatcher = createParcelWatcher(); await recursiveWatcher.watch([{ path: testDir, excludes: [], recursive: true }]); @@ -754,12 +758,12 @@ suite.skip('File Watcher (node.js)', () => { const filePath = join(testDir, 'not-found-2.txt'); const onDidWatchFail = Event.toPromise(watcher.onWatchFail); - const request = { path: filePath, excludes: [], recursive: false, correlationId: 1 }; + const request = { path: filePath, excludes: [], recursive: false }; await watcher.watch([request]); await onDidWatchFail; assert.strictEqual(watcher.isSuspended(request), true); - const changeFuture = awaitEvent(watcher, filePath, FileChangeType.ADDED, 1); + const changeFuture = awaitEvent(watcher, filePath, FileChangeType.ADDED); await Promises.writeFile(filePath, 'Hello World'); await changeFuture; diff --git a/src/vs/platform/files/test/node/parcelWatcher.integrationTest.ts b/src/vs/platform/files/test/node/parcelWatcher.test.ts similarity index 93% rename from src/vs/platform/files/test/node/parcelWatcher.integrationTest.ts rename to src/vs/platform/files/test/node/parcelWatcher.test.ts index 4370d82bf..c25c061fb 100644 --- a/src/vs/platform/files/test/node/parcelWatcher.integrationTest.ts +++ b/src/vs/platform/files/test/node/parcelWatcher.test.ts @@ -6,22 +6,22 @@ import assert from 'assert'; import { realpathSync, promises } from 'fs'; import { tmpdir } from 'os'; -import { timeout } from 'vs/base/common/async'; -import { dirname, join } from 'vs/base/common/path'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { Promises, RimRafMode } from 'vs/base/node/pfs'; -import { getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { FileChangeFilter, FileChangeType, IFileChange } from 'vs/platform/files/common/files'; -import { ParcelWatcher } from 'vs/platform/files/node/watcher/parcel/parcelWatcher'; -import { IRecursiveWatchRequest } from 'vs/platform/files/common/watcher'; -import { getDriveLetter } from 'vs/base/common/extpath'; -import { ltrim } from 'vs/base/common/strings'; -import { FileAccess } from 'vs/base/common/network'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { addUNCHostToAllowlist } from 'vs/base/node/unc'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { timeout } from '../../../../base/common/async.js'; +import { dirname, join } from '../../../../base/common/path.js'; +import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { Promises, RimRafMode } from '../../../../base/node/pfs.js'; +import { getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { FileChangeFilter, FileChangeType, IFileChange } from '../../common/files.js'; +import { ParcelWatcher } from '../../node/watcher/parcel/parcelWatcher.js'; +import { IRecursiveWatchRequest } from '../../common/watcher.js'; +import { getDriveLetter } from '../../../../base/common/extpath.js'; +import { ltrim } from '../../../../base/common/strings.js'; +import { FileAccess } from '../../../../base/common/network.js'; +import { extUriBiasedIgnorePathCase } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { addUNCHostToAllowlist } from '../../../../base/node/unc.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; export class TestParcelWatcher extends ParcelWatcher { @@ -65,7 +65,11 @@ export class TestParcelWatcher extends ParcelWatcher { // mocha but generally). as such they will run only on demand // whenever we update the watcher library. -suite.skip('File Watcher (parcel)', () => { +/* eslint-disable local/code-ensure-no-disposables-leak-in-test */ + +suite.skip('File Watcher (parcel)', function () { + + this.timeout(10000); let testDir: string; let watcher: TestParcelWatcher; @@ -77,7 +81,7 @@ suite.skip('File Watcher (parcel)', () => { watcher?.setVerboseLogging(enable); } - enableLogging(false); + enableLogging(loggingEnabled); setup(async () => { watcher = new TestParcelWatcher(); @@ -743,15 +747,15 @@ suite.skip('File Watcher (parcel)', () => { assert.strictEqual(instance.failed, true); }); - test('correlated watch requests support suspend/resume (folder, does not exist in beginning, not reusing watcher)', async () => { - await testCorrelatedWatchFolderDoesNotExist(false); + test('watch requests support suspend/resume (folder, does not exist in beginning, not reusing watcher)', async () => { + await testWatchFolderDoesNotExist(false); }); - (!isMacintosh /* Linux/Windows: times out for some reason */ ? test.skip : test)('correlated watch requests support suspend/resume (folder, does not exist in beginning, reusing watcher)', async () => { - await testCorrelatedWatchFolderDoesNotExist(true); + (!isMacintosh /* Linux/Windows: times out for some reason */ ? test.skip : test)('watch requests support suspend/resume (folder, does not exist in beginning, reusing watcher)', async () => { + await testWatchFolderDoesNotExist(true); }); - async function testCorrelatedWatchFolderDoesNotExist(reuseExistingWatcher: boolean) { + async function testWatchFolderDoesNotExist(reuseExistingWatcher: boolean) { let onDidWatchFail = Event.toPromise(watcher.onWatchFail); const folderPath = join(testDir, 'not-found'); @@ -762,7 +766,7 @@ suite.skip('File Watcher (parcel)', () => { await watcher.watch(requests); } - const request: IRecursiveWatchRequest = { path: folderPath, excludes: [], recursive: true, correlationId: 1 }; + const request: IRecursiveWatchRequest = { path: folderPath, excludes: [], recursive: true }; requests.push(request); await watcher.watch(requests); @@ -774,7 +778,7 @@ suite.skip('File Watcher (parcel)', () => { assert.strictEqual(watcher.isSuspended(request), 'polling'); } - let changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED, undefined, 1); + let changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED); let onDidWatch = Event.toPromise(watcher.onDidWatch); await promises.mkdir(folderPath); await changeFuture; @@ -783,33 +787,33 @@ suite.skip('File Watcher (parcel)', () => { assert.strictEqual(watcher.isSuspended(request), false); const filePath = join(folderPath, 'newFile.txt'); - await basicCrudTest(filePath, 1); + await basicCrudTest(filePath); onDidWatchFail = Event.toPromise(watcher.onWatchFail); await Promises.rm(folderPath); await onDidWatchFail; - changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED, undefined, 1); + changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED); onDidWatch = Event.toPromise(watcher.onDidWatch); await promises.mkdir(folderPath); await changeFuture; await onDidWatch; - await basicCrudTest(filePath, 1); + await basicCrudTest(filePath); } - test('correlated watch requests support suspend/resume (folder, exist in beginning, not reusing watcher)', async () => { - await testCorrelatedWatchFolderExists(false); + test('watch requests support suspend/resume (folder, exist in beginning, not reusing watcher)', async () => { + await testWatchFolderExists(false); }); - (!isMacintosh /* Linux/Windows: times out for some reason */ ? test.skip : test)('correlated watch requests support suspend/resume (folder, exist in beginning, reusing watcher)', async () => { - await testCorrelatedWatchFolderExists(true); + (!isMacintosh /* Linux/Windows: times out for some reason */ ? test.skip : test)('watch requests support suspend/resume (folder, exist in beginning, reusing watcher)', async () => { + await testWatchFolderExists(true); }); - async function testCorrelatedWatchFolderExists(reuseExistingWatcher: boolean) { + async function testWatchFolderExists(reuseExistingWatcher: boolean) { const folderPath = join(testDir, 'deep'); - const requests: IRecursiveWatchRequest[] = [{ path: folderPath, excludes: [], recursive: true, correlationId: 1 }]; + const requests: IRecursiveWatchRequest[] = [{ path: folderPath, excludes: [], recursive: true }]; if (reuseExistingWatcher) { requests.push({ path: testDir, excludes: [], recursive: true }); } @@ -817,19 +821,19 @@ suite.skip('File Watcher (parcel)', () => { await watcher.watch(requests); const filePath = join(folderPath, 'newFile.txt'); - await basicCrudTest(filePath, 1); + await basicCrudTest(filePath); const onDidWatchFail = Event.toPromise(watcher.onWatchFail); await Promises.rm(folderPath); await onDidWatchFail; - const changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED, undefined, 1); + const changeFuture = awaitEvent(watcher, folderPath, FileChangeType.ADDED); const onDidWatch = Event.toPromise(watcher.onDidWatch); await promises.mkdir(folderPath); await changeFuture; await onDidWatch; - await basicCrudTest(filePath, 1); + await basicCrudTest(filePath); } test('watch request reuses another recursive watcher even when requests are coming in at the same time', async function () { diff --git a/src/vs/platform/history/browser/contextScopedHistoryWidget.ts b/src/vs/platform/history/browser/contextScopedHistoryWidget.ts index a1ba7444f..4c4010626 100644 --- a/src/vs/platform/history/browser/contextScopedHistoryWidget.ts +++ b/src/vs/platform/history/browser/contextScopedHistoryWidget.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IHistoryNavigationWidget } from 'vs/base/browser/history'; -import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; -import { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput'; -import { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput'; -import { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { localize } from 'vs/nls'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { isActiveElement } from 'vs/base/browser/dom'; +import { IHistoryNavigationWidget } from '../../../base/browser/history.js'; +import { IContextViewProvider } from '../../../base/browser/ui/contextview/contextview.js'; +import { FindInput, IFindInputOptions } from '../../../base/browser/ui/findinput/findInput.js'; +import { IReplaceInputOptions, ReplaceInput } from '../../../base/browser/ui/findinput/replaceInput.js'; +import { HistoryInputBox, IHistoryInputOptions } from '../../../base/browser/ui/inputbox/inputBox.js'; +import { KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../keybinding/common/keybindingsRegistry.js'; +import { localize } from '../../../nls.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { isActiveElement } from '../../../base/browser/dom.js'; export const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', "Whether suggestion are visible")); diff --git a/src/vs/platform/history/browser/historyWidgetKeybindingHint.ts b/src/vs/platform/history/browser/historyWidgetKeybindingHint.ts index bef0f5efe..ab56b5657 100644 --- a/src/vs/platform/history/browser/historyWidgetKeybindingHint.ts +++ b/src/vs/platform/history/browser/historyWidgetKeybindingHint.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; export function showHistoryKeybindingHint(keybindingService: IKeybindingService): boolean { return keybindingService.lookupKeybinding('history.showPrevious')?.getElectronAccelerator() === 'Up' && keybindingService.lookupKeybinding('history.showNext')?.getElectronAccelerator() === 'Down'; diff --git a/src/vs/platform/hover/browser/hover.ts b/src/vs/platform/hover/browser/hover.ts index 51ead712f..779a4598f 100644 --- a/src/vs/platform/hover/browser/hover.ts +++ b/src/vs/platform/hover/browser/hover.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IHoverDelegate, IHoverDelegateOptions } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { addStandardDisposableListener, isHTMLElement } from 'vs/base/browser/dom'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import type { IHoverDelegate2, IHoverOptions, IHoverWidget } from 'vs/base/browser/ui/hover/hover'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { IHoverDelegate, IHoverDelegateOptions } from '../../../base/browser/ui/hover/hoverDelegate.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { addStandardDisposableListener, isHTMLElement } from '../../../base/browser/dom.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import type { IHoverDelegate2, IHoverOptions, IHoverWidget } from '../../../base/browser/ui/hover/hover.js'; export const IHoverService = createDecorator('hoverService'); diff --git a/src/vs/platform/hover/test/browser/nullHoverService.ts b/src/vs/platform/hover/test/browser/nullHoverService.ts index 44c73f8a0..a4266ef7c 100644 --- a/src/vs/platform/hover/test/browser/nullHoverService.ts +++ b/src/vs/platform/hover/test/browser/nullHoverService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import type { IHoverService } from 'vs/platform/hover/browser/hover'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import type { IHoverService } from '../../browser/hover.js'; export const NullHoverService: IHoverService = { _serviceBrand: undefined, diff --git a/src/vs/platform/instantiation/common/extensions.ts b/src/vs/platform/instantiation/common/extensions.ts index fd60abf40..517a8cc2a 100644 --- a/src/vs/platform/instantiation/common/extensions.ts +++ b/src/vs/platform/instantiation/common/extensions.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SyncDescriptor } from './descriptors'; -import { BrandedService, ServiceIdentifier } from './instantiation'; +import { SyncDescriptor } from './descriptors.js'; +import { BrandedService, ServiceIdentifier } from './instantiation.js'; const _registry: [ServiceIdentifier, SyncDescriptor][] = []; diff --git a/src/vs/platform/instantiation/common/instantiation.ts b/src/vs/platform/instantiation/common/instantiation.ts index c1ce65652..04e6e3166 100644 --- a/src/vs/platform/instantiation/common/instantiation.ts +++ b/src/vs/platform/instantiation/common/instantiation.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import * as descriptors from './descriptors'; -import { ServiceCollection } from './serviceCollection'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import * as descriptors from './descriptors.js'; +import { ServiceCollection } from './serviceCollection.js'; // ------ internal util @@ -52,7 +52,7 @@ export interface IInstantiationService { * Synchronously creates an instance that is denoted by the descriptor */ createInstance(descriptor: descriptors.SyncDescriptor0): T; - createInstance any, R extends InstanceType>(ctor: Ctor, ...args: GetLeadingNonServiceArgs>): R; + createInstance unknown, R extends InstanceType>(ctor: Ctor, ...args: GetLeadingNonServiceArgs>): R; /** * Calls a function with a service accessor. @@ -106,7 +106,7 @@ export function createDecorator(serviceId: string): ServiceIdentifier { return _util.serviceIds.get(serviceId)!; } - const id = function (target: Function, key: string, index: number): any { + const id = function (target: Function, key: string, index: number) { if (arguments.length !== 3) { throw new Error('@IServiceName-decorator can only be used to decorate a parameter'); } diff --git a/src/vs/platform/instantiation/common/instantiationService.ts b/src/vs/platform/instantiation/common/instantiationService.ts index a61ef7433..86099cc8b 100644 --- a/src/vs/platform/instantiation/common/instantiationService.ts +++ b/src/vs/platform/instantiation/common/instantiationService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { GlobalIdleValue } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { illegalState } from 'vs/base/common/errors'; -import { DisposableStore, dispose, IDisposable, isDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { SyncDescriptor, SyncDescriptor0 } from 'vs/platform/instantiation/common/descriptors'; -import { Graph } from 'vs/platform/instantiation/common/graph'; -import { GetLeadingNonServiceArgs, IInstantiationService, ServiceIdentifier, ServicesAccessor, _util } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { LinkedList } from 'vs/base/common/linkedList'; +import { GlobalIdleValue } from '../../../base/common/async.js'; +import { Event } from '../../../base/common/event.js'; +import { illegalState } from '../../../base/common/errors.js'; +import { DisposableStore, dispose, IDisposable, isDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { SyncDescriptor, SyncDescriptor0 } from './descriptors.js'; +import { Graph } from './graph.js'; +import { GetLeadingNonServiceArgs, IInstantiationService, ServiceIdentifier, ServicesAccessor, _util } from './instantiation.js'; +import { ServiceCollection } from './serviceCollection.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; // TRACING const _enableAllTracing = false @@ -114,8 +114,8 @@ export class InstantiationService implements IInstantiationService { } createInstance(descriptor: SyncDescriptor0): T; - createInstance any, R extends InstanceType>(ctor: Ctor, ...args: GetLeadingNonServiceArgs>): R; - createInstance(ctorOrDescriptor: any | SyncDescriptor, ...rest: any[]): any { + createInstance unknown, R extends InstanceType>(ctor: Ctor, ...args: GetLeadingNonServiceArgs>): R; + createInstance(ctorOrDescriptor: any | SyncDescriptor, ...rest: any[]): unknown { this._throwIfDisposed(); let _trace: Trace; @@ -330,7 +330,7 @@ export class InstantiationService implements IInstantiationService { return result; }); return new Proxy(Object.create(null), { - get(target: any, key: PropertyKey): any { + get(target: any, key: PropertyKey): unknown { if (!idle.isInitialized) { // looks like an event diff --git a/src/vs/platform/instantiation/common/serviceCollection.ts b/src/vs/platform/instantiation/common/serviceCollection.ts index 4f33e7e75..13c489e83 100644 --- a/src/vs/platform/instantiation/common/serviceCollection.ts +++ b/src/vs/platform/instantiation/common/serviceCollection.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; -import { SyncDescriptor } from './descriptors'; +import { ServiceIdentifier } from './instantiation.js'; +import { SyncDescriptor } from './descriptors.js'; export class ServiceCollection { diff --git a/src/vs/platform/instantiation/test/common/graph.test.ts b/src/vs/platform/instantiation/test/common/graph.test.ts index 99e8e0e75..36777f910 100644 --- a/src/vs/platform/instantiation/test/common/graph.test.ts +++ b/src/vs/platform/instantiation/test/common/graph.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { Graph } from 'vs/platform/instantiation/common/graph'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Graph } from '../../common/graph.js'; suite('Graph', () => { diff --git a/src/vs/platform/instantiation/test/common/instantiationService.test.ts b/src/vs/platform/instantiation/test/common/instantiationService.test.ts index 70718ba71..a4d07c1b2 100644 --- a/src/vs/platform/instantiation/test/common/instantiationService.test.ts +++ b/src/vs/platform/instantiation/test/common/instantiationService.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Emitter, Event } from 'vs/base/common/event'; -import { dispose } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { createDecorator, IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { dispose } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { SyncDescriptor } from '../../common/descriptors.js'; +import { createDecorator, IInstantiationService, ServicesAccessor } from '../../common/instantiation.js'; +import { InstantiationService } from '../../common/instantiationService.js'; +import { ServiceCollection } from '../../common/serviceCollection.js'; const IService1 = createDecorator('service1'); diff --git a/src/vs/platform/instantiation/test/common/instantiationServiceMock.ts b/src/vs/platform/instantiation/test/common/instantiationServiceMock.ts index a7c52175e..0e90a07d1 100644 --- a/src/vs/platform/instantiation/test/common/instantiationServiceMock.ts +++ b/src/vs/platform/instantiation/test/common/instantiationServiceMock.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as sinon from 'sinon'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService, Trace } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { SyncDescriptor } from '../../common/descriptors.js'; +import { ServiceIdentifier } from '../../common/instantiation.js'; +import { InstantiationService, Trace } from '../../common/instantiationService.js'; +import { ServiceCollection } from '../../common/serviceCollection.js'; interface IServiceMock { id: ServiceIdentifier; diff --git a/src/vs/platform/ipc/common/mainProcessService.ts b/src/vs/platform/ipc/common/mainProcessService.ts index a9e67cbd5..3caec1ebd 100644 --- a/src/vs/platform/ipc/common/mainProcessService.ts +++ b/src/vs/platform/ipc/common/mainProcessService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IChannel, IPCServer, IServerChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IRemoteService } from 'vs/platform/ipc/common/services'; +import { IChannel, IPCServer, IServerChannel, StaticRouter } from '../../../base/parts/ipc/common/ipc.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IRemoteService } from './services.js'; export const IMainProcessService = createDecorator('mainProcessService'); diff --git a/src/vs/platform/ipc/common/services.ts b/src/vs/platform/ipc/common/services.ts index 08a1ffea0..ae6de92a9 100644 --- a/src/vs/platform/ipc/common/services.ts +++ b/src/vs/platform/ipc/common/services.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; export interface IRemoteService { diff --git a/src/vs/platform/ipc/electron-sandbox/mainProcessService.ts b/src/vs/platform/ipc/electron-sandbox/mainProcessService.ts index 423919570..8707d26a2 100644 --- a/src/vs/platform/ipc/electron-sandbox/mainProcessService.ts +++ b/src/vs/platform/ipc/electron-sandbox/mainProcessService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { Client as IPCElectronClient } from 'vs/base/parts/ipc/electron-sandbox/ipc.electron'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { Client as IPCElectronClient } from '../../../base/parts/ipc/electron-sandbox/ipc.electron.js'; +import { IMainProcessService } from '../common/mainProcessService.js'; /** * An implementation of `IMainProcessService` that leverages Electron's IPC. diff --git a/src/vs/platform/ipc/electron-sandbox/services.ts b/src/vs/platform/ipc/electron-sandbox/services.ts index 060ef30d9..b03e23621 100644 --- a/src/vs/platform/ipc/electron-sandbox/services.ts +++ b/src/vs/platform/ipc/electron-sandbox/services.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IChannel, ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator, IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { IRemoteService } from 'vs/platform/ipc/common/services'; +import { IChannel, ProxyChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { SyncDescriptor } from '../../instantiation/common/descriptors.js'; +import { registerSingleton } from '../../instantiation/common/extensions.js'; +import { createDecorator, IInstantiationService, ServiceIdentifier } from '../../instantiation/common/instantiation.js'; +import { IMainProcessService } from '../common/mainProcessService.js'; +import { IRemoteService } from '../common/services.js'; type ChannelClientCtor = { new(channel: IChannel, ...args: any[]): T }; type Remote = { getChannel(channelName: string): IChannel }; diff --git a/src/vs/platform/issue/common/issue.ts b/src/vs/platform/issue/common/issue.ts index 26f8e8004..3fc9e76e8 100644 --- a/src/vs/platform/issue/common/issue.ts +++ b/src/vs/platform/issue/common/issue.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { UriComponents } from 'vs/base/common/uri'; -import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes'; -import { PerformanceInfo, SystemInfo } from 'vs/platform/diagnostics/common/diagnostics'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { UriComponents } from '../../../base/common/uri.js'; +import { ISandboxConfiguration } from '../../../base/parts/sandbox/common/sandboxTypes.js'; +import { PerformanceInfo, SystemInfo } from '../../diagnostics/common/diagnostics.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; // Since data sent through the service is serialized to JSON, functions will be lost, so Color objects // should not be sent as their 'toString' method will be stripped. Instead convert to strings before sending. diff --git a/src/vs/platform/issue/common/issueReporterUtil.ts b/src/vs/platform/issue/common/issueReporterUtil.ts index da2b397ba..3a2266e30 100644 --- a/src/vs/platform/issue/common/issueReporterUtil.ts +++ b/src/vs/platform/issue/common/issueReporterUtil.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { rtrim } from 'vs/base/common/strings'; +import { rtrim } from '../../../base/common/strings.js'; export function normalizeGitHubUrl(url: string): string { // If the url has a .git suffix, remove it diff --git a/src/vs/platform/issue/electron-main/issueMainService.ts b/src/vs/platform/issue/electron-main/issueMainService.ts index cb73c2202..00a203c2d 100644 --- a/src/vs/platform/issue/electron-main/issueMainService.ts +++ b/src/vs/platform/issue/electron-main/issueMainService.ts @@ -5,25 +5,25 @@ import { BrowserWindow, BrowserWindowConstructorOptions, Display, screen } from 'electron'; import { arch, release, type } from 'os'; -import { raceTimeout } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { FileAccess } from 'vs/base/common/network'; -import { IProcessEnvironment, isMacintosh } from 'vs/base/common/platform'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { getNLSLanguage, getNLSMessages, localize } from 'vs/nls'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { IIssueMainService, OldIssueReporterData, OldIssueReporterWindowConfiguration } from 'vs/platform/issue/common/issue'; -import { ILogService } from 'vs/platform/log/common/log'; -import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; -import product from 'vs/platform/product/common/product'; -import { IIPCObjectUrl, IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol'; -import { zoomLevelToZoomFactor } from 'vs/platform/window/common/window'; -import { ICodeWindow, IWindowState } from 'vs/platform/window/electron-main/window'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; -import { isESM } from 'vs/base/common/amd'; -import { ICSSDevelopmentService } from 'vs/platform/cssDev/node/cssDevService'; +import { raceTimeout } from '../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { IProcessEnvironment, isMacintosh } from '../../../base/common/platform.js'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { getNLSLanguage, getNLSMessages, localize } from '../../../nls.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { IIssueMainService, OldIssueReporterData, OldIssueReporterWindowConfiguration } from '../common/issue.js'; +import { ILogService } from '../../log/common/log.js'; +import { INativeHostMainService } from '../../native/electron-main/nativeHostMainService.js'; +import product from '../../product/common/product.js'; +import { IIPCObjectUrl, IProtocolMainService } from '../../protocol/electron-main/protocol.js'; +import { zoomLevelToZoomFactor } from '../../window/common/window.js'; +import { ICodeWindow, IWindowState } from '../../window/electron-main/window.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; +import { isESM } from '../../../base/common/amd.js'; +import { ICSSDevelopmentService } from '../../cssDev/node/cssDevService.js'; interface IBrowserWindowOptions { backgroundColor: string | undefined; diff --git a/src/vs/platform/issue/electron-main/processMainService.ts b/src/vs/platform/issue/electron-main/processMainService.ts index 52e72f353..dd2a275ee 100644 --- a/src/vs/platform/issue/electron-main/processMainService.ts +++ b/src/vs/platform/issue/electron-main/processMainService.ts @@ -4,29 +4,29 @@ *--------------------------------------------------------------------------------------------*/ import { BrowserWindow, BrowserWindowConstructorOptions, contentTracing, Display, IpcMainEvent, screen } from 'electron'; -import { randomPath } from 'vs/base/common/extpath'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { FileAccess } from 'vs/base/common/network'; -import { IProcessEnvironment, isMacintosh } from 'vs/base/common/platform'; -import { listProcesses } from 'vs/base/node/ps'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { getNLSLanguage, getNLSMessages, localize } from 'vs/nls'; -import { IDiagnosticsService, isRemoteDiagnosticError, PerformanceInfo, SystemInfo } from 'vs/platform/diagnostics/common/diagnostics'; -import { IDiagnosticsMainService } from 'vs/platform/diagnostics/electron-main/diagnosticsMainService'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ICSSDevelopmentService } from 'vs/platform/cssDev/node/cssDevService'; -import { IProcessMainService, ProcessExplorerData, ProcessExplorerWindowConfiguration } from 'vs/platform/issue/common/issue'; -import { ILogService } from 'vs/platform/log/common/log'; -import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IIPCObjectUrl, IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol'; -import { IStateService } from 'vs/platform/state/node/state'; -import { UtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; -import { zoomLevelToZoomFactor } from 'vs/platform/window/common/window'; -import { IWindowState } from 'vs/platform/window/electron-main/window'; -import { isESM } from 'vs/base/common/amd'; +import { randomPath } from '../../../base/common/extpath.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { IProcessEnvironment, isMacintosh } from '../../../base/common/platform.js'; +import { listProcesses } from '../../../base/node/ps.js'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { getNLSLanguage, getNLSMessages, localize } from '../../../nls.js'; +import { IDiagnosticsService, isRemoteDiagnosticError, PerformanceInfo, SystemInfo } from '../../diagnostics/common/diagnostics.js'; +import { IDiagnosticsMainService } from '../../diagnostics/electron-main/diagnosticsMainService.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ICSSDevelopmentService } from '../../cssDev/node/cssDevService.js'; +import { IProcessMainService, ProcessExplorerData, ProcessExplorerWindowConfiguration } from '../common/issue.js'; +import { ILogService } from '../../log/common/log.js'; +import { INativeHostMainService } from '../../native/electron-main/nativeHostMainService.js'; +import product from '../../product/common/product.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IIPCObjectUrl, IProtocolMainService } from '../../protocol/electron-main/protocol.js'; +import { IStateService } from '../../state/node/state.js'; +import { UtilityProcess } from '../../utilityProcess/electron-main/utilityProcess.js'; +import { zoomLevelToZoomFactor } from '../../window/common/window.js'; +import { IWindowState } from '../../window/electron-main/window.js'; +import { isESM } from '../../../base/common/amd.js'; const processExplorerWindowState = 'issue.processExplorerWindowState'; diff --git a/src/vs/platform/jsonschemas/common/jsonContributionRegistry.ts b/src/vs/platform/jsonschemas/common/jsonContributionRegistry.ts index 039aaa6cc..72b231f4e 100644 --- a/src/vs/platform/jsonschemas/common/jsonContributionRegistry.ts +++ b/src/vs/platform/jsonschemas/common/jsonContributionRegistry.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { getCompressedContent, IJSONSchema } from 'vs/base/common/jsonSchema'; -import * as platform from 'vs/platform/registry/common/platform'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { getCompressedContent, IJSONSchema } from '../../../base/common/jsonSchema.js'; +import * as platform from '../../registry/common/platform.js'; export const Extensions = { JSONContribution: 'base.contributions.json' diff --git a/src/vs/platform/keybinding/common/abstractKeybindingService.ts b/src/vs/platform/keybinding/common/abstractKeybindingService.ts index 40e5567ab..22f1d3437 100644 --- a/src/vs/platform/keybinding/common/abstractKeybindingService.ts +++ b/src/vs/platform/keybinding/common/abstractKeybindingService.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; -import * as arrays from 'vs/base/common/arrays'; -import { IntervalTimer, TimeoutTimer } from 'vs/base/common/async'; -import { illegalState } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IME } from 'vs/base/common/ime'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Keybinding, ResolvedChord, ResolvedKeybinding, SingleModifierChord } from 'vs/base/common/keybindings'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import * as nls from 'vs/nls'; - -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindingService, IKeyboardEvent, KeybindingsSchemaContribution } from 'vs/platform/keybinding/common/keybinding'; -import { ResolutionResult, KeybindingResolver, ResultKind, NoMatchingKb } from 'vs/platform/keybinding/common/keybindingResolver'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; -import { ILogService } from 'vs/platform/log/common/log'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js'; +import * as arrays from '../../../base/common/arrays.js'; +import { IntervalTimer, TimeoutTimer } from '../../../base/common/async.js'; +import { illegalState } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IME } from '../../../base/common/ime.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { Keybinding, ResolvedChord, ResolvedKeybinding, SingleModifierChord } from '../../../base/common/keybindings.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import * as nls from '../../../nls.js'; + +import { ICommandService } from '../../commands/common/commands.js'; +import { IContextKeyService, IContextKeyServiceTarget } from '../../contextkey/common/contextkey.js'; +import { IKeybindingService, IKeyboardEvent, KeybindingsSchemaContribution } from './keybinding.js'; +import { ResolutionResult, KeybindingResolver, ResultKind, NoMatchingKb } from './keybindingResolver.js'; +import { ResolvedKeybindingItem } from './resolvedKeybindingItem.js'; +import { ILogService } from '../../log/common/log.js'; +import { INotificationService } from '../../notification/common/notification.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; interface CurrentChord { keypress: string; diff --git a/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts b/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts index 4584188d9..96b56234d 100644 --- a/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts +++ b/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { illegalArgument } from 'vs/base/common/errors'; -import { AriaLabelProvider, ElectronAcceleratorLabelProvider, UILabelProvider, UserSettingsLabelProvider } from 'vs/base/common/keybindingLabels'; -import { Chord, SingleModifierChord, ResolvedKeybinding, ResolvedChord } from 'vs/base/common/keybindings'; -import { OperatingSystem } from 'vs/base/common/platform'; +import { illegalArgument } from '../../../base/common/errors.js'; +import { AriaLabelProvider, ElectronAcceleratorLabelProvider, UILabelProvider, UserSettingsLabelProvider } from '../../../base/common/keybindingLabels.js'; +import { Chord, SingleModifierChord, ResolvedKeybinding, ResolvedChord } from '../../../base/common/keybindings.js'; +import { OperatingSystem } from '../../../base/common/platform.js'; export abstract class BaseResolvedKeybinding extends ResolvedKeybinding { diff --git a/src/vs/platform/keybinding/common/keybinding.ts b/src/vs/platform/keybinding/common/keybinding.ts index 5a8c2b5dc..f41ac90b7 100644 --- a/src/vs/platform/keybinding/common/keybinding.ts +++ b/src/vs/platform/keybinding/common/keybinding.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { ResolvedKeybinding, Keybinding } from 'vs/base/common/keybindings'; -import { IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ResolutionResult } from 'vs/platform/keybinding/common/keybindingResolver'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; +import { Event } from '../../../base/common/event.js'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { ResolvedKeybinding, Keybinding } from '../../../base/common/keybindings.js'; +import { IContextKeyService, IContextKeyServiceTarget } from '../../contextkey/common/contextkey.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ResolutionResult } from './keybindingResolver.js'; +import { ResolvedKeybindingItem } from './resolvedKeybindingItem.js'; export interface IUserFriendlyKeybinding { key: string; diff --git a/src/vs/platform/keybinding/common/keybindingResolver.ts b/src/vs/platform/keybinding/common/keybindingResolver.ts index f337eea01..eeace6fa5 100644 --- a/src/vs/platform/keybinding/common/keybindingResolver.ts +++ b/src/vs/platform/keybinding/common/keybindingResolver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { implies, ContextKeyExpression, ContextKeyExprType, IContext, IContextKeyService, expressionsAreEqualWithConstantSubstitution } from 'vs/platform/contextkey/common/contextkey'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; +import { implies, ContextKeyExpression, ContextKeyExprType, IContext, IContextKeyService, expressionsAreEqualWithConstantSubstitution } from '../../contextkey/common/contextkey.js'; +import { ResolvedKeybindingItem } from './resolvedKeybindingItem.js'; //#region resolution-result diff --git a/src/vs/platform/keybinding/common/keybindingsRegistry.ts b/src/vs/platform/keybinding/common/keybindingsRegistry.ts index 6c88451df..eeabcc557 100644 --- a/src/vs/platform/keybinding/common/keybindingsRegistry.ts +++ b/src/vs/platform/keybinding/common/keybindingsRegistry.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { decodeKeybinding, Keybinding } from 'vs/base/common/keybindings'; -import { OperatingSystem, OS } from 'vs/base/common/platform'; -import { CommandsRegistry, ICommandHandler, ICommandMetadata } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { combinedDisposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { LinkedList } from 'vs/base/common/linkedList'; +import { decodeKeybinding, Keybinding } from '../../../base/common/keybindings.js'; +import { OperatingSystem, OS } from '../../../base/common/platform.js'; +import { CommandsRegistry, ICommandHandler, ICommandMetadata } from '../../commands/common/commands.js'; +import { ContextKeyExpression } from '../../contextkey/common/contextkey.js'; +import { Registry } from '../../registry/common/platform.js'; +import { combinedDisposable, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { LinkedList } from '../../../base/common/linkedList.js'; export interface IKeybindingItem { keybinding: Keybinding | null; diff --git a/src/vs/platform/keybinding/common/resolvedKeybindingItem.ts b/src/vs/platform/keybinding/common/resolvedKeybindingItem.ts index c12893f40..76a5e8ccb 100644 --- a/src/vs/platform/keybinding/common/resolvedKeybindingItem.ts +++ b/src/vs/platform/keybinding/common/resolvedKeybindingItem.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CharCode } from 'vs/base/common/charCode'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; +import { CharCode } from '../../../base/common/charCode.js'; +import { ResolvedKeybinding } from '../../../base/common/keybindings.js'; +import { ContextKeyExpression } from '../../contextkey/common/contextkey.js'; export class ResolvedKeybindingItem { _resolvedKeybindingItemBrand: void = undefined; diff --git a/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts b/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts index de345edf2..5ea9a5ba5 100644 --- a/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts +++ b/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyCodeUtils, IMMUTABLE_CODE_TO_KEY_CODE, ScanCode } from 'vs/base/common/keyCodes'; -import { SingleModifierChord, Chord, KeyCodeChord, Keybinding } from 'vs/base/common/keybindings'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { BaseResolvedKeybinding } from 'vs/platform/keybinding/common/baseResolvedKeybinding'; -import { toEmptyArrayIfContainsNull } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; +import { KeyCode, KeyCodeUtils, IMMUTABLE_CODE_TO_KEY_CODE, ScanCode } from '../../../base/common/keyCodes.js'; +import { SingleModifierChord, Chord, KeyCodeChord, Keybinding } from '../../../base/common/keybindings.js'; +import { OperatingSystem } from '../../../base/common/platform.js'; +import { BaseResolvedKeybinding } from './baseResolvedKeybinding.js'; +import { toEmptyArrayIfContainsNull } from './resolvedKeybindingItem.js'; /** * Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout. diff --git a/src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts b/src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts index 88aa86a05..4a5f4c834 100644 --- a/src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts +++ b/src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { createSimpleKeybinding, ResolvedKeybinding, KeyCodeChord, Keybinding } from 'vs/base/common/keybindings'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { OS } from 'vs/base/common/platform'; -import Severity from 'vs/base/common/severity'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr, ContextKeyExpression, IContext, IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey'; -import { AbstractKeybindingService } from 'vs/platform/keybinding/common/abstractKeybindingService'; -import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; -import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; -import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding'; -import { createUSLayoutResolvedKeybinding } from 'vs/platform/keybinding/test/common/keybindingsTestUtils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { INotification, INotificationService, IPromptChoice, IPromptOptions, IStatusMessageOptions, NoOpNotification } from 'vs/platform/notification/common/notification'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { createSimpleKeybinding, ResolvedKeybinding, KeyCodeChord, Keybinding } from '../../../../base/common/keybindings.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { OS } from '../../../../base/common/platform.js'; +import Severity from '../../../../base/common/severity.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ICommandService } from '../../../commands/common/commands.js'; +import { ContextKeyExpr, ContextKeyExpression, IContext, IContextKeyService, IContextKeyServiceTarget } from '../../../contextkey/common/contextkey.js'; +import { AbstractKeybindingService } from '../../common/abstractKeybindingService.js'; +import { IKeyboardEvent } from '../../common/keybinding.js'; +import { KeybindingResolver } from '../../common/keybindingResolver.js'; +import { ResolvedKeybindingItem } from '../../common/resolvedKeybindingItem.js'; +import { USLayoutResolvedKeybinding } from '../../common/usLayoutResolvedKeybinding.js'; +import { createUSLayoutResolvedKeybinding } from './keybindingsTestUtils.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { INotification, INotificationService, IPromptChoice, IPromptOptions, IStatusMessageOptions, NoOpNotification } from '../../../notification/common/notification.js'; +import { NullTelemetryService } from '../../../telemetry/common/telemetryUtils.js'; function createContext(ctx: any) { return { diff --git a/src/vs/platform/keybinding/test/common/keybindingLabels.test.ts b/src/vs/platform/keybinding/test/common/keybindingLabels.test.ts index b88a747e4..3d1e238d8 100644 --- a/src/vs/platform/keybinding/test/common/keybindingLabels.test.ts +++ b/src/vs/platform/keybinding/test/common/keybindingLabels.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { createUSLayoutResolvedKeybinding } from 'vs/platform/keybinding/test/common/keybindingsTestUtils'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { OperatingSystem } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { createUSLayoutResolvedKeybinding } from './keybindingsTestUtils.js'; suite('KeybindingLabels', () => { diff --git a/src/vs/platform/keybinding/test/common/keybindingResolver.test.ts b/src/vs/platform/keybinding/test/common/keybindingResolver.test.ts index 3fccf3875..ccd5b6dff 100644 --- a/src/vs/platform/keybinding/test/common/keybindingResolver.test.ts +++ b/src/vs/platform/keybinding/test/common/keybindingResolver.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { decodeKeybinding, createSimpleKeybinding, KeyCodeChord } from 'vs/base/common/keybindings'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { OS } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ContextKeyExpr, ContextKeyExpression, IContext } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingResolver, ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; -import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding'; -import { createUSLayoutResolvedKeybinding } from 'vs/platform/keybinding/test/common/keybindingsTestUtils'; +import { decodeKeybinding, createSimpleKeybinding, KeyCodeChord } from '../../../../base/common/keybindings.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { OS } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ContextKeyExpr, ContextKeyExpression, IContext } from '../../../contextkey/common/contextkey.js'; +import { KeybindingResolver, ResultKind } from '../../common/keybindingResolver.js'; +import { ResolvedKeybindingItem } from '../../common/resolvedKeybindingItem.js'; +import { USLayoutResolvedKeybinding } from '../../common/usLayoutResolvedKeybinding.js'; +import { createUSLayoutResolvedKeybinding } from './keybindingsTestUtils.js'; function createContext(ctx: any) { return { diff --git a/src/vs/platform/keybinding/test/common/keybindingsTestUtils.ts b/src/vs/platform/keybinding/test/common/keybindingsTestUtils.ts index d0b338d96..e9c700e4b 100644 --- a/src/vs/platform/keybinding/test/common/keybindingsTestUtils.ts +++ b/src/vs/platform/keybinding/test/common/keybindingsTestUtils.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { decodeKeybinding, ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding'; +import { decodeKeybinding, ResolvedKeybinding } from '../../../../base/common/keybindings.js'; +import { OperatingSystem } from '../../../../base/common/platform.js'; +import { USLayoutResolvedKeybinding } from '../../common/usLayoutResolvedKeybinding.js'; export function createUSLayoutResolvedKeybinding(encodedKeybinding: number | number[], OS: OperatingSystem): ResolvedKeybinding | undefined { if (encodedKeybinding === 0) { diff --git a/src/vs/platform/keybinding/test/common/mockKeybindingService.ts b/src/vs/platform/keybinding/test/common/mockKeybindingService.ts index 9991b85f2..477ccb952 100644 --- a/src/vs/platform/keybinding/test/common/mockKeybindingService.ts +++ b/src/vs/platform/keybinding/test/common/mockKeybindingService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { ResolvedKeybinding, KeyCodeChord, Keybinding } from 'vs/base/common/keybindings'; -import { OS } from 'vs/base/common/platform'; -import { ContextKeyExpression, ContextKeyValue, IContextKey, IContextKeyChangeEvent, IContextKeyService, IContextKeyServiceTarget, IScopedContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IKeybindingService, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; -import { NoMatchingKb, ResolutionResult } from 'vs/platform/keybinding/common/keybindingResolver'; -import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem'; -import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding'; +import { Event } from '../../../../base/common/event.js'; +import { ResolvedKeybinding, KeyCodeChord, Keybinding } from '../../../../base/common/keybindings.js'; +import { OS } from '../../../../base/common/platform.js'; +import { ContextKeyExpression, ContextKeyValue, IContextKey, IContextKeyChangeEvent, IContextKeyService, IContextKeyServiceTarget, IScopedContextKeyService } from '../../../contextkey/common/contextkey.js'; +import { IKeybindingService, IKeyboardEvent } from '../../common/keybinding.js'; +import { NoMatchingKb, ResolutionResult } from '../../common/keybindingResolver.js'; +import { ResolvedKeybindingItem } from '../../common/resolvedKeybindingItem.js'; +import { USLayoutResolvedKeybinding } from '../../common/usLayoutResolvedKeybinding.js'; class MockKeybindingContextKey implements IContextKey { private _defaultValue: T | undefined; diff --git a/src/vs/platform/keyboardLayout/common/keyboardConfig.ts b/src/vs/platform/keyboardLayout/common/keyboardConfig.ts index e9e83dcd7..67be262ce 100644 --- a/src/vs/platform/keyboardLayout/common/keyboardConfig.ts +++ b/src/vs/platform/keyboardLayout/common/keyboardConfig.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { OS, OperatingSystem } from 'vs/base/common/platform'; -import { ConfigurationScope, Extensions as ConfigExtensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import * as nls from '../../../nls.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { OS, OperatingSystem } from '../../../base/common/platform.js'; +import { ConfigurationScope, Extensions as ConfigExtensions, IConfigurationNode, IConfigurationRegistry } from '../../configuration/common/configurationRegistry.js'; +import { Registry } from '../../registry/common/platform.js'; export const enum DispatchConfig { Code, diff --git a/src/vs/platform/keyboardLayout/common/keyboardLayout.ts b/src/vs/platform/keyboardLayout/common/keyboardLayout.ts index ee6c1d894..a1db5be9f 100644 --- a/src/vs/platform/keyboardLayout/common/keyboardLayout.ts +++ b/src/vs/platform/keyboardLayout/common/keyboardLayout.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { ScanCode, ScanCodeUtils } from 'vs/base/common/keyCodes'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; -import { IKeyboardMapper } from 'vs/platform/keyboardLayout/common/keyboardMapper'; +import { Event } from '../../../base/common/event.js'; +import { ScanCode, ScanCodeUtils } from '../../../base/common/keyCodes.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IKeyboardEvent } from '../../keybinding/common/keybinding.js'; +import { IKeyboardMapper } from './keyboardMapper.js'; export const IKeyboardLayoutService = createDecorator('keyboardLayoutService'); diff --git a/src/vs/platform/keyboardLayout/common/keyboardLayoutService.ts b/src/vs/platform/keyboardLayout/common/keyboardLayoutService.ts index 640cc960c..e72c08876 100644 --- a/src/vs/platform/keyboardLayout/common/keyboardLayoutService.ts +++ b/src/vs/platform/keyboardLayout/common/keyboardLayoutService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IKeyboardLayoutInfo, IKeyboardMapping } from 'vs/platform/keyboardLayout/common/keyboardLayout'; +import { Event } from '../../../base/common/event.js'; +import { IKeyboardLayoutInfo, IKeyboardMapping } from './keyboardLayout.js'; export interface IKeyboardLayoutData { keyboardLayoutInfo: IKeyboardLayoutInfo; diff --git a/src/vs/platform/keyboardLayout/common/keyboardMapper.ts b/src/vs/platform/keyboardLayout/common/keyboardMapper.ts index 71528e16e..c9478927b 100644 --- a/src/vs/platform/keyboardLayout/common/keyboardMapper.ts +++ b/src/vs/platform/keyboardLayout/common/keyboardMapper.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ResolvedKeybinding, Keybinding } from 'vs/base/common/keybindings'; -import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; +import { ResolvedKeybinding, Keybinding } from '../../../base/common/keybindings.js'; +import { IKeyboardEvent } from '../../keybinding/common/keybinding.js'; export interface IKeyboardMapper { dumpDebugInfo(): string; diff --git a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts index 1d17e4c70..8950ce218 100644 --- a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts +++ b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import type * as nativeKeymap from 'native-keymap'; -import * as platform from 'vs/base/common/platform'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IKeyboardLayoutData, INativeKeyboardLayoutService } from 'vs/platform/keyboardLayout/common/keyboardLayoutService'; -import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; +import * as platform from '../../../base/common/platform.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IKeyboardLayoutData, INativeKeyboardLayoutService } from '../common/keyboardLayoutService.js'; +import { ILifecycleMainService, LifecycleMainPhase } from '../../lifecycle/electron-main/lifecycleMainService.js'; export const IKeyboardLayoutMainService = createDecorator('keyboardLayoutMainService'); diff --git a/src/vs/platform/label/common/label.ts b/src/vs/platform/label/common/label.ts index 60d6acb85..e920d9a1c 100644 --- a/src/vs/platform/label/common/label.ts +++ b/src/vs/platform/label/common/label.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IWorkspace, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IWorkspace, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export const ILabelService = createDecorator('labelService'); diff --git a/src/vs/platform/languagePacks/browser/languagePacks.ts b/src/vs/platform/languagePacks/browser/languagePacks.ts index 62dedb224..af82787b8 100644 --- a/src/vs/platform/languagePacks/browser/languagePacks.ts +++ b/src/vs/platform/languagePacks/browser/languagePacks.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IExtensionResourceLoaderService } from 'vs/platform/extensionResourceLoader/common/extensionResourceLoader'; -import { ILanguagePackItem, LanguagePackBaseService } from 'vs/platform/languagePacks/common/languagePacks'; -import { ILogService } from 'vs/platform/log/common/log'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { URI } from '../../../base/common/uri.js'; +import { IExtensionGalleryService } from '../../extensionManagement/common/extensionManagement.js'; +import { IExtensionResourceLoaderService } from '../../extensionResourceLoader/common/extensionResourceLoader.js'; +import { ILanguagePackItem, LanguagePackBaseService } from '../common/languagePacks.js'; +import { ILogService } from '../../log/common/log.js'; export class WebLanguagePacksService extends LanguagePackBaseService { constructor( diff --git a/src/vs/platform/languagePacks/common/languagePacks.ts b/src/vs/platform/languagePacks/common/languagePacks.ts index f682e997d..28fa2ccd3 100644 --- a/src/vs/platform/languagePacks/common/languagePacks.ts +++ b/src/vs/platform/languagePacks/common/languagePacks.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { language } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { localize } from 'vs/nls'; -import { IExtensionGalleryService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { language } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { IQuickPickItem } from '../../quickinput/common/quickInput.js'; +import { localize } from '../../../nls.js'; +import { IExtensionGalleryService, IGalleryExtension } from '../../extensionManagement/common/extensionManagement.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export function getLocale(extension: IGalleryExtension): string | undefined { return extension.tags.find(t => t.startsWith('lp-'))?.split('lp-')[1]; diff --git a/src/vs/platform/languagePacks/common/localizedStrings.ts b/src/vs/platform/languagePacks/common/localizedStrings.ts index 5432fbcb6..614b0dfb0 100644 --- a/src/vs/platform/languagePacks/common/localizedStrings.ts +++ b/src/vs/platform/languagePacks/common/localizedStrings.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../nls.js'; /** * These are some predefined strings that we test during smoke testing that they are localized diff --git a/src/vs/platform/languagePacks/node/languagePacks.ts b/src/vs/platform/languagePacks/node/languagePacks.ts index 698b9b56d..9527de9f2 100644 --- a/src/vs/platform/languagePacks/node/languagePacks.ts +++ b/src/vs/platform/languagePacks/node/languagePacks.ts @@ -5,19 +5,19 @@ import * as fs from 'fs'; import { createHash } from 'crypto'; -import { equals } from 'vs/base/common/arrays'; -import { Queue } from 'vs/base/common/async'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ILocalizationContribution } from 'vs/platform/extensions/common/extensions'; -import { ILanguagePackItem, LanguagePackBaseService } from 'vs/platform/languagePacks/common/languagePacks'; -import { URI } from 'vs/base/common/uri'; +import { equals } from '../../../base/common/arrays.js'; +import { Queue } from '../../../base/common/async.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { join } from '../../../base/common/path.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementService, ILocalExtension } from '../../extensionManagement/common/extensionManagement.js'; +import { areSameExtensions } from '../../extensionManagement/common/extensionManagementUtil.js'; +import { ILogService } from '../../log/common/log.js'; +import { ILocalizationContribution } from '../../extensions/common/extensions.js'; +import { ILanguagePackItem, LanguagePackBaseService } from '../common/languagePacks.js'; +import { URI } from '../../../base/common/uri.js'; interface ILanguagePack { hash: string; diff --git a/src/vs/platform/launch/electron-main/launchMainService.ts b/src/vs/platform/launch/electron-main/launchMainService.ts index 1fcb94730..36020f52c 100644 --- a/src/vs/platform/launch/electron-main/launchMainService.ts +++ b/src/vs/platform/launch/electron-main/launchMainService.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import { app } from 'electron'; -import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; -import { IProcessEnvironment, isMacintosh } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { whenDeleted } from 'vs/base/node/pfs'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { isLaunchedFromCli } from 'vs/platform/environment/node/argvHelper'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IURLService } from 'vs/platform/url/common/url'; -import { ICodeWindow } from 'vs/platform/window/electron-main/window'; -import { IWindowSettings } from 'vs/platform/window/common/window'; -import { IOpenConfiguration, IWindowsMainService, OpenContext } from 'vs/platform/windows/electron-main/windows'; -import { IProtocolUrl } from 'vs/platform/url/electron-main/url'; +import { coalesce } from '../../../base/common/arrays.js'; +import { IProcessEnvironment, isMacintosh } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { whenDeleted } from '../../../base/node/pfs.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { isLaunchedFromCli } from '../../environment/node/argvHelper.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IURLService } from '../../url/common/url.js'; +import { ICodeWindow } from '../../window/electron-main/window.js'; +import { IWindowSettings } from '../../window/common/window.js'; +import { IOpenConfiguration, IWindowsMainService, OpenContext } from '../../windows/electron-main/windows.js'; +import { IProtocolUrl } from '../../url/electron-main/url.js'; export const ID = 'launchMainService'; export const ILaunchMainService = createDecorator(ID); @@ -70,7 +70,7 @@ export class LaunchMainService implements ILaunchMainService { // Create a window if there is none if (this.windowsMainService.getWindowCount() === 0) { - const window = firstOrDefault(await this.windowsMainService.openEmptyWindow({ context: OpenContext.DESKTOP })); + const window = (await this.windowsMainService.openEmptyWindow({ context: OpenContext.DESKTOP })).at(0); if (window) { whenWindowReady = window.ready(); } diff --git a/src/vs/platform/layout/browser/layoutService.ts b/src/vs/platform/layout/browser/layoutService.ts index 65de03124..8f5ecfb47 100644 --- a/src/vs/platform/layout/browser/layoutService.ts +++ b/src/vs/platform/layout/browser/layoutService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDimension } from 'vs/base/browser/dom'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IDimension } from '../../../base/browser/dom.js'; +import { Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const ILayoutService = createDecorator('layoutService'); diff --git a/src/vs/platform/layout/browser/zIndexRegistry.ts b/src/vs/platform/layout/browser/zIndexRegistry.ts index c8e4e9cf8..671eb7754 100644 --- a/src/vs/platform/layout/browser/zIndexRegistry.ts +++ b/src/vs/platform/layout/browser/zIndexRegistry.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { clearNode, createCSSRule, createStyleSheet } from 'vs/base/browser/dom'; -import { RunOnceScheduler } from 'vs/base/common/async'; +import { clearNode, createCSSRule, createStyleSheet } from '../../../base/browser/dom.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; export enum ZIndex { Base = 0, diff --git a/src/vs/platform/lifecycle/common/lifecycle.ts b/src/vs/platform/lifecycle/common/lifecycle.ts index d79ae9d50..0a27c275e 100644 --- a/src/vs/platform/lifecycle/common/lifecycle.ts +++ b/src/vs/platform/lifecycle/common/lifecycle.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isThenable, Promises } from 'vs/base/common/async'; +import { isThenable, Promises } from '../../../base/common/async.js'; // Shared veto handling across main and renderer export function handleVetos(vetos: (boolean | Promise)[], onError: (error: Error) => void): Promise { diff --git a/src/vs/platform/lifecycle/electron-main/lifecycleMainService.ts b/src/vs/platform/lifecycle/electron-main/lifecycleMainService.ts index 4013b2b54..0016baac8 100644 --- a/src/vs/platform/lifecycle/electron-main/lifecycleMainService.ts +++ b/src/vs/platform/lifecycle/electron-main/lifecycleMainService.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import electron from 'electron'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { Barrier, Promises, timeout } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isMacintosh, isWindows } from 'vs/base/common/platform'; -import { cwd } from 'vs/base/common/process'; -import { assertIsDefined } from 'vs/base/common/types'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateService } from 'vs/platform/state/node/state'; -import { ICodeWindow, LoadReason, UnloadReason } from 'vs/platform/window/electron-main/window'; -import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { Barrier, Promises, timeout } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { cwd } from '../../../base/common/process.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStateService } from '../../state/node/state.js'; +import { ICodeWindow, LoadReason, UnloadReason } from '../../window/electron-main/window.js'; +import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { IAuxiliaryWindow } from '../../auxiliaryWindow/electron-main/auxiliaryWindow.js'; export const ILifecycleMainService = createDecorator('lifecycleMainService'); diff --git a/src/vs/platform/lifecycle/node/sharedProcessLifecycleService.ts b/src/vs/platform/lifecycle/node/sharedProcessLifecycleService.ts index f3c6d0d40..3c033c770 100644 --- a/src/vs/platform/lifecycle/node/sharedProcessLifecycleService.ts +++ b/src/vs/platform/lifecycle/node/sharedProcessLifecycleService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; export const ISharedProcessLifecycleService = createDecorator('sharedProcessLifecycleService'); diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index 976b9a85d..7a03fcb4b 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createStyleSheet, isActiveElement, isKeyboardEvent } from 'vs/base/browser/dom'; -import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; -import { IListMouseEvent, IListRenderer, IListTouchEvent, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { IPagedListOptions, IPagedRenderer, PagedList } from 'vs/base/browser/ui/list/listPaging'; -import { DefaultStyleController, IKeyboardNavigationEventFilter, IListAccessibilityProvider, IListOptions, IListOptionsUpdate, IListStyles, IMultipleSelectionController, isSelectionRangeChangeEvent, isSelectionSingleChangeEvent, List, TypeNavigationMode } from 'vs/base/browser/ui/list/listWidget'; -import { ITableColumn, ITableRenderer, ITableVirtualDelegate } from 'vs/base/browser/ui/table/table'; -import { ITableOptions, ITableOptionsUpdate, ITableStyles, Table } from 'vs/base/browser/ui/table/tableWidget'; -import { TreeFindMode, IAbstractTreeOptions, IAbstractTreeOptionsUpdate, RenderIndentGuides, TreeFindMatchType } from 'vs/base/browser/ui/tree/abstractTree'; -import { AsyncDataTree, CompressibleAsyncDataTree, IAsyncDataTreeOptions, IAsyncDataTreeOptionsUpdate, ICompressibleAsyncDataTreeOptions, ICompressibleAsyncDataTreeOptionsUpdate, ITreeCompressionDelegate } from 'vs/base/browser/ui/tree/asyncDataTree'; -import { DataTree, IDataTreeOptions } from 'vs/base/browser/ui/tree/dataTree'; -import { CompressibleObjectTree, ICompressibleObjectTreeOptions, ICompressibleObjectTreeOptionsUpdate, ICompressibleTreeRenderer, IObjectTreeOptions, ObjectTree } from 'vs/base/browser/ui/tree/objectTree'; -import { IAsyncDataSource, IDataSource, ITreeEvent, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; -import { Emitter, Event } from 'vs/base/common/event'; -import { combinedDisposable, Disposable, DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { ContextKeyExpr, IContextKey, IContextKeyService, IScopedContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { InputFocusedContextKey } from 'vs/platform/contextkey/common/contextkeys'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { createDecorator, IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IStyleOverride, defaultFindWidgetStyles, defaultListStyles, getListStyles } from 'vs/platform/theme/browser/defaultStyles'; +import { isActiveElement, isKeyboardEvent } from '../../../base/browser/dom.js'; +import { IContextViewProvider } from '../../../base/browser/ui/contextview/contextview.js'; +import { IListMouseEvent, IListRenderer, IListTouchEvent, IListVirtualDelegate } from '../../../base/browser/ui/list/list.js'; +import { IPagedListOptions, IPagedRenderer, PagedList } from '../../../base/browser/ui/list/listPaging.js'; +import { IKeyboardNavigationEventFilter, IListAccessibilityProvider, IListOptions, IListOptionsUpdate, IListStyles, IMultipleSelectionController, isSelectionRangeChangeEvent, isSelectionSingleChangeEvent, List, TypeNavigationMode } from '../../../base/browser/ui/list/listWidget.js'; +import { ITableColumn, ITableRenderer, ITableVirtualDelegate } from '../../../base/browser/ui/table/table.js'; +import { ITableOptions, ITableOptionsUpdate, ITableStyles, Table } from '../../../base/browser/ui/table/tableWidget.js'; +import { IAbstractTreeOptions, IAbstractTreeOptionsUpdate, RenderIndentGuides, TreeFindMatchType, TreeFindMode } from '../../../base/browser/ui/tree/abstractTree.js'; +import { AsyncDataTree, CompressibleAsyncDataTree, IAsyncDataTreeOptions, IAsyncDataTreeOptionsUpdate, ICompressibleAsyncDataTreeOptions, ICompressibleAsyncDataTreeOptionsUpdate, ITreeCompressionDelegate } from '../../../base/browser/ui/tree/asyncDataTree.js'; +import { DataTree, IDataTreeOptions } from '../../../base/browser/ui/tree/dataTree.js'; +import { CompressibleObjectTree, ICompressibleObjectTreeOptions, ICompressibleObjectTreeOptionsUpdate, ICompressibleTreeRenderer, IObjectTreeOptions, ObjectTree } from '../../../base/browser/ui/tree/objectTree.js'; +import { IAsyncDataSource, IDataSource, ITreeEvent, ITreeRenderer } from '../../../base/browser/ui/tree/tree.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { combinedDisposable, Disposable, DisposableStore, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from '../../configuration/common/configurationRegistry.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, IScopedContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js'; +import { InputFocusedContextKey } from '../../contextkey/common/contextkeys.js'; +import { IContextViewService } from '../../contextview/browser/contextView.js'; +import { IEditorOptions } from '../../editor/common/editor.js'; +import { createDecorator, IInstantiationService, ServicesAccessor } from '../../instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { ResultKind } from '../../keybinding/common/keybindingResolver.js'; +import { Registry } from '../../registry/common/platform.js'; +import { defaultFindWidgetStyles, defaultListStyles, getListStyles, IStyleOverride } from '../../theme/browser/defaultStyles.js'; export type ListWidget = List | PagedList | ObjectTree | DataTree | AsyncDataTree | Table; export type WorkbenchListWidget = WorkbenchList | WorkbenchPagedList | WorkbenchObjectTree | WorkbenchCompressibleObjectTree | WorkbenchDataTree | WorkbenchAsyncDataTree | WorkbenchCompressibleAsyncDataTree | WorkbenchTable; @@ -57,7 +57,6 @@ export class ListService implements IListService { private readonly disposables = new DisposableStore(); private lists: IRegisteredList[] = []; private _lastFocusedWidget: WorkbenchListWidget | undefined = undefined; - private _hasCreatedStyleController: boolean = false; get lastFocusedList(): WorkbenchListWidget | undefined { return this._lastFocusedWidget; @@ -76,13 +75,6 @@ export class ListService implements IListService { } register(widget: WorkbenchListWidget, extraContextKeys?: (IContextKey)[]): IDisposable { - if (!this._hasCreatedStyleController) { - this._hasCreatedStyleController = true; - // create a shared default tree style sheet for performance reasons - const styleController = new DefaultStyleController(createStyleSheet(), ''); - styleController.style(defaultListStyles); - } - if (this.lists.some(l => l.widget === widget)) { throw new Error('Cannot register the same widget multiple times'); } diff --git a/src/vs/platform/log/browser/log.ts b/src/vs/platform/log/browser/log.ts index 0abfdaa67..d7fcff914 100644 --- a/src/vs/platform/log/browser/log.ts +++ b/src/vs/platform/log/browser/log.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { mainWindow } from 'vs/base/browser/window'; -import { relativePath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { AdapterLogger, DEFAULT_LOG_LEVEL, ILogger, LogLevel } from 'vs/platform/log/common/log'; +import { mainWindow } from '../../../base/browser/window.js'; +import { relativePath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { AdapterLogger, DEFAULT_LOG_LEVEL, ILogger, LogLevel } from '../common/log.js'; export interface IAutomatedWindow { codeAutomationLog(type: string, args: any[]): void; diff --git a/src/vs/platform/log/common/bufferLog.ts b/src/vs/platform/log/common/bufferLog.ts index 0eb366074..d0db55ec5 100644 --- a/src/vs/platform/log/common/bufferLog.ts +++ b/src/vs/platform/log/common/bufferLog.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AbstractMessageLogger, DEFAULT_LOG_LEVEL, ILogger, log, LogLevel } from 'vs/platform/log/common/log'; +import { MutableDisposable } from '../../../base/common/lifecycle.js'; +import { AbstractMessageLogger, DEFAULT_LOG_LEVEL, ILogger, log, LogLevel } from './log.js'; interface ILog { level: LogLevel; @@ -15,17 +16,17 @@ export class BufferLogger extends AbstractMessageLogger { declare readonly _serviceBrand: undefined; private buffer: ILog[] = []; private _logger: ILogger | undefined = undefined; + private readonly _logLevelDisposable = this._register(new MutableDisposable()); constructor(logLevel: LogLevel = DEFAULT_LOG_LEVEL) { super(); this.setLevel(logLevel); - this._register(this.onDidChangeLogLevel(level => { - this._logger?.setLevel(level); - })); } set logger(logger: ILogger) { this._logger = logger; + this.setLevel(logger.getLevel()); + this._logLevelDisposable.value = logger.onDidChangeLogLevel(this.setLevel, this); for (const { level, message } of this.buffer) { log(logger, level, message); diff --git a/src/vs/platform/log/common/fileLog.ts b/src/vs/platform/log/common/fileLog.ts index 05d657933..a0d97a36c 100644 --- a/src/vs/platform/log/common/fileLog.ts +++ b/src/vs/platform/log/common/fileLog.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ThrottledDelayer } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { basename, dirname, joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ByteSize, FileOperationError, FileOperationResult, IFileService, whenProviderRegistered } from 'vs/platform/files/common/files'; -import { BufferLogger } from 'vs/platform/log/common/bufferLog'; -import { AbstractLoggerService, AbstractMessageLogger, ILogger, ILoggerOptions, ILoggerService, LogLevel } from 'vs/platform/log/common/log'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { basename, dirname, joinPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { ByteSize, FileOperationError, FileOperationResult, IFileService, whenProviderRegistered } from '../../files/common/files.js'; +import { BufferLogger } from './bufferLog.js'; +import { AbstractLoggerService, AbstractMessageLogger, ILogger, ILoggerOptions, ILoggerService, LogLevel } from './log.js'; const MAX_FILE_SIZE = 5 * ByteSize.MB; diff --git a/src/vs/platform/log/common/log.ts b/src/vs/platform/log/common/log.ts index 28fc419bb..2471e0573 100644 --- a/src/vs/platform/log/common/log.ts +++ b/src/vs/platform/log/common/log.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Emitter, Event } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { isWindows } from 'vs/base/common/platform'; -import { joinPath } from 'vs/base/common/resources'; -import { Mutable, isNumber, isString } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import * as nls from '../../../nls.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { hash } from '../../../base/common/hash.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { isWindows } from '../../../base/common/platform.js'; +import { joinPath } from '../../../base/common/resources.js'; +import { Mutable, isNumber, isString } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILocalizedString } from '../../action/common/action.js'; +import { RawContextKey } from '../../contextkey/common/contextkey.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const ILogService = createDecorator('logService'); export const ILoggerService = createDecorator('loggerService'); diff --git a/src/vs/platform/log/common/logIpc.ts b/src/vs/platform/log/common/logIpc.ts index 996d680b2..4a767070d 100644 --- a/src/vs/platform/log/common/logIpc.ts +++ b/src/vs/platform/log/common/logIpc.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { Event } from 'vs/base/common/event'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { AbstractLoggerService, AbstractMessageLogger, AdapterLogger, DidChangeLoggersEvent, ILogger, ILoggerOptions, ILoggerResource, ILoggerService, isLogLevel, LogLevel } from 'vs/platform/log/common/log'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IURITransformer } from 'vs/base/common/uriIpc'; +import { URI } from '../../../base/common/uri.js'; +import { Event } from '../../../base/common/event.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { AbstractLoggerService, AbstractMessageLogger, AdapterLogger, DidChangeLoggersEvent, ILogger, ILoggerOptions, ILoggerResource, ILoggerService, isLogLevel, LogLevel } from './log.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; export class LoggerChannelClient extends AbstractLoggerService implements ILoggerService { diff --git a/src/vs/platform/log/common/logService.ts b/src/vs/platform/log/common/logService.ts index 095d8b931..e76c4c30d 100644 --- a/src/vs/platform/log/common/logService.ts +++ b/src/vs/platform/log/common/logService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; -import { ILogger, ILogService, LogLevel, MultiplexLogger } from 'vs/platform/log/common/log'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Event } from '../../../base/common/event.js'; +import { ILogger, ILogService, LogLevel, MultiplexLogger } from './log.js'; export class LogService extends Disposable implements ILogService { diff --git a/src/vs/platform/log/electron-main/logIpc.ts b/src/vs/platform/log/electron-main/logIpc.ts index 6ff3362ee..2caf2b72d 100644 --- a/src/vs/platform/log/electron-main/logIpc.ts +++ b/src/vs/platform/log/electron-main/logIpc.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { ResourceMap } from 'vs/base/common/map'; -import { URI } from 'vs/base/common/uri'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ILogger, ILoggerOptions, isLogLevel, log, LogLevel } from 'vs/platform/log/common/log'; -import { ILoggerMainService } from 'vs/platform/log/electron-main/loggerService'; +import { Event } from '../../../base/common/event.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { URI } from '../../../base/common/uri.js'; +import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ILogger, ILoggerOptions, isLogLevel, log, LogLevel } from '../common/log.js'; +import { ILoggerMainService } from './loggerService.js'; export class LoggerChannel implements IServerChannel { diff --git a/src/vs/platform/log/electron-main/loggerService.ts b/src/vs/platform/log/electron-main/loggerService.ts index c191d7e7c..5d569519f 100644 --- a/src/vs/platform/log/electron-main/loggerService.ts +++ b/src/vs/platform/log/electron-main/loggerService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ResourceMap } from 'vs/base/common/map'; -import { URI } from 'vs/base/common/uri'; -import { Event } from 'vs/base/common/event'; -import { refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { DidChangeLoggersEvent, ILogger, ILoggerOptions, ILoggerResource, ILoggerService, LogLevel, isLogLevel } from 'vs/platform/log/common/log'; -import { LoggerService } from 'vs/platform/log/node/loggerService'; +import { ResourceMap } from '../../../base/common/map.js'; +import { URI } from '../../../base/common/uri.js'; +import { Event } from '../../../base/common/event.js'; +import { refineServiceDecorator } from '../../instantiation/common/instantiation.js'; +import { DidChangeLoggersEvent, ILogger, ILoggerOptions, ILoggerResource, ILoggerService, LogLevel, isLogLevel } from '../common/log.js'; +import { LoggerService } from '../node/loggerService.js'; export const ILoggerMainService = refineServiceDecorator(ILoggerService); diff --git a/src/vs/platform/log/node/loggerService.ts b/src/vs/platform/log/node/loggerService.ts index 9624ac363..ab034fdaf 100644 --- a/src/vs/platform/log/node/loggerService.ts +++ b/src/vs/platform/log/node/loggerService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { AbstractLoggerService, ILogger, ILoggerOptions, ILoggerService, LogLevel } from 'vs/platform/log/common/log'; -import { SpdLogLogger } from 'vs/platform/log/node/spdlogLog'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { AbstractLoggerService, ILogger, ILoggerOptions, ILoggerService, LogLevel } from '../common/log.js'; +import { SpdLogLogger } from './spdlogLog.js'; export class LoggerService extends AbstractLoggerService implements ILoggerService { diff --git a/src/vs/platform/log/node/spdlogLog.ts b/src/vs/platform/log/node/spdlogLog.ts index 5c38b748e..ef99c3283 100644 --- a/src/vs/platform/log/node/spdlogLog.ts +++ b/src/vs/platform/log/node/spdlogLog.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import type * as spdlog from '@vscode/spdlog'; -import { ByteSize } from 'vs/platform/files/common/files'; -import { AbstractMessageLogger, ILogger, LogLevel } from 'vs/platform/log/common/log'; +import { ByteSize } from '../../files/common/files.js'; +import { AbstractMessageLogger, ILogger, LogLevel } from '../common/log.js'; enum SpdLogLevel { Trace, diff --git a/src/vs/platform/markers/common/markerService.ts b/src/vs/platform/markers/common/markerService.ts index 91120aab5..8e9968a94 100644 --- a/src/vs/platform/markers/common/markerService.ts +++ b/src/vs/platform/markers/common/markerService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isFalsyOrEmpty, isNonEmptyArray } from 'vs/base/common/arrays'; -import { DebounceEmitter } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IMarker, IMarkerData, IMarkerService, IResourceMarker, MarkerSeverity, MarkerStatistics } from './markers'; +import { isFalsyOrEmpty, isNonEmptyArray } from '../../../base/common/arrays.js'; +import { DebounceEmitter } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IMarker, IMarkerData, IMarkerService, IResourceMarker, MarkerSeverity, MarkerStatistics } from './markers.js'; export const unsupportedSchemas = new Set([ Schemas.inMemory, diff --git a/src/vs/platform/markers/common/markers.ts b/src/vs/platform/markers/common/markers.ts index 8b68c4f80..73cb12086 100644 --- a/src/vs/platform/markers/common/markers.ts +++ b/src/vs/platform/markers/common/markers.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export interface IMarkerService { readonly _serviceBrand: undefined; diff --git a/src/vs/platform/markers/test/common/markerService.test.ts b/src/vs/platform/markers/test/common/markerService.test.ts index 1b9916a8a..b3d1ff9a2 100644 --- a/src/vs/platform/markers/test/common/markerService.test.ts +++ b/src/vs/platform/markers/test/common/markerService.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IMarkerData, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import * as markerService from 'vs/platform/markers/common/markerService'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IMarkerData, MarkerSeverity } from '../../common/markers.js'; +import * as markerService from '../../common/markerService.js'; function randomMarkerData(severity = MarkerSeverity.Error): IMarkerData { return { diff --git a/src/vs/platform/menubar/common/menubar.ts b/src/vs/platform/menubar/common/menubar.ts index 6f8d45d8c..581f4e481 100644 --- a/src/vs/platform/menubar/common/menubar.ts +++ b/src/vs/platform/menubar/common/menubar.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; +import { URI } from '../../../base/common/uri.js'; export interface ICommonMenubarService { updateMenubar(windowId: number, menuData: IMenubarData): Promise; diff --git a/src/vs/platform/menubar/electron-main/menubar.ts b/src/vs/platform/menubar/electron-main/menubar.ts index d7449e945..3ff82f229 100644 --- a/src/vs/platform/menubar/electron-main/menubar.ts +++ b/src/vs/platform/menubar/electron-main/menubar.ts @@ -4,28 +4,28 @@ *--------------------------------------------------------------------------------------------*/ import { app, BrowserWindow, KeyboardEvent, Menu, MenuItem, MenuItemConstructorOptions, WebContents } from 'electron'; -import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { mnemonicMenuLabel } from 'vs/base/common/labels'; -import { isMacintosh, language } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import * as nls from 'vs/nls'; -import { IAuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IMenubarData, IMenubarKeybinding, IMenubarMenu, IMenubarMenuRecentItemAction, isMenubarMenuItemAction, isMenubarMenuItemRecentAction, isMenubarMenuItemSeparator, isMenubarMenuItemSubmenu, MenubarMenuItem } from 'vs/platform/menubar/common/menubar'; -import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IStateService } from 'vs/platform/state/node/state'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUpdateService, StateType } from 'vs/platform/update/common/update'; -import { INativeRunActionInWindowRequest, INativeRunKeybindingInWindowRequest, IWindowOpenable, hasNativeTitlebar } from 'vs/platform/window/common/window'; -import { IWindowsCountChangedEvent, IWindowsMainService, OpenContext } from 'vs/platform/windows/electron-main/windows'; -import { IWorkspacesHistoryMainService } from 'vs/platform/workspaces/electron-main/workspacesHistoryMainService'; -import { Disposable } from 'vs/base/common/lifecycle'; +import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { mnemonicMenuLabel } from '../../../base/common/labels.js'; +import { isMacintosh, language } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import * as nls from '../../../nls.js'; +import { IAuxiliaryWindowsMainService } from '../../auxiliaryWindow/electron-main/auxiliaryWindows.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IMenubarData, IMenubarKeybinding, IMenubarMenu, IMenubarMenuRecentItemAction, isMenubarMenuItemAction, isMenubarMenuItemRecentAction, isMenubarMenuItemSeparator, isMenubarMenuItemSubmenu, MenubarMenuItem } from '../common/menubar.js'; +import { INativeHostMainService } from '../../native/electron-main/nativeHostMainService.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IStateService } from '../../state/node/state.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUpdateService, StateType } from '../../update/common/update.js'; +import { INativeRunActionInWindowRequest, INativeRunKeybindingInWindowRequest, IWindowOpenable, hasNativeTitlebar } from '../../window/common/window.js'; +import { IWindowsCountChangedEvent, IWindowsMainService, OpenContext } from '../../windows/electron-main/windows.js'; +import { IWorkspacesHistoryMainService } from '../../workspaces/electron-main/workspacesHistoryMainService.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; const telemetryFrom = 'menu'; diff --git a/src/vs/platform/menubar/electron-main/menubarMainService.ts b/src/vs/platform/menubar/electron-main/menubarMainService.ts index 731070e4f..a80966d41 100644 --- a/src/vs/platform/menubar/electron-main/menubarMainService.ts +++ b/src/vs/platform/menubar/electron-main/menubarMainService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ICommonMenubarService, IMenubarData } from 'vs/platform/menubar/common/menubar'; -import { Menubar } from 'vs/platform/menubar/electron-main/menubar'; -import { Disposable } from 'vs/base/common/lifecycle'; +import { createDecorator, IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ILifecycleMainService, LifecycleMainPhase } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { ICommonMenubarService, IMenubarData } from '../common/menubar.js'; +import { Menubar } from './menubar.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; export const IMenubarMainService = createDecorator('menubarMainService'); diff --git a/src/vs/platform/menubar/electron-sandbox/menubar.ts b/src/vs/platform/menubar/electron-sandbox/menubar.ts index 77f60e85e..93ae48857 100644 --- a/src/vs/platform/menubar/electron-sandbox/menubar.ts +++ b/src/vs/platform/menubar/electron-sandbox/menubar.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ICommonMenubarService } from 'vs/platform/menubar/common/menubar'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ICommonMenubarService } from '../common/menubar.js'; export const IMenubarService = createDecorator('menubarService'); diff --git a/src/vs/platform/native/common/native.ts b/src/vs/platform/native/common/native.ts index 344d45395..f2c1930b0 100644 --- a/src/vs/platform/native/common/native.ts +++ b/src/vs/platform/native/common/native.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { MessageBoxOptions, MessageBoxReturnValue, OpenDevToolsOptions, OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue } from 'vs/base/parts/sandbox/common/electronTypes'; -import { ISerializableCommandAction } from 'vs/platform/action/common/action'; -import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IV8Profile } from 'vs/platform/profiling/common/profiling'; -import { AuthInfo, Credentials } from 'vs/platform/request/common/request'; -import { IPartsSplash } from 'vs/platform/theme/common/themeService'; -import { IColorScheme, IOpenedAuxiliaryWindow, IOpenedMainWindow, IOpenEmptyWindowOptions, IOpenWindowOptions, IPoint, IRectangle, IWindowOpenable } from 'vs/platform/window/common/window'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { MessageBoxOptions, MessageBoxReturnValue, OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue } from '../../../base/parts/sandbox/common/electronTypes.js'; +import { ISerializableCommandAction } from '../../action/common/action.js'; +import { INativeOpenDialogOptions } from '../../dialogs/common/dialogs.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IV8Profile } from '../../profiling/common/profiling.js'; +import { AuthInfo, Credentials } from '../../request/common/request.js'; +import { IPartsSplash } from '../../theme/common/themeService.js'; +import { IColorScheme, IOpenedAuxiliaryWindow, IOpenedMainWindow, IOpenEmptyWindowOptions, IOpenWindowOptions, IPoint, IRectangle, IWindowOpenable } from '../../window/common/window.js'; export interface ICPUProperties { model: string; @@ -155,6 +155,7 @@ export interface ICommonNativeHostService { writeClipboardBuffer(format: string, buffer: VSBuffer, type?: 'selection' | 'clipboard'): Promise; readClipboardBuffer(format: string): Promise; hasClipboard(format: string, type?: 'selection' | 'clipboard'): Promise; + readImage(): Promise; // macOS Touchbar newWindowTab(): Promise; @@ -178,7 +179,7 @@ export interface ICommonNativeHostService { exit(code: number): Promise; // Development - openDevTools(options?: Partial & INativeHostOptions): Promise; + openDevTools(options?: INativeHostOptions): Promise; toggleDevTools(options?: INativeHostOptions): Promise; // Perf Introspection diff --git a/src/vs/platform/native/common/nativeHostService.ts b/src/vs/platform/native/common/nativeHostService.ts index c99768ed8..7d16cba7c 100644 --- a/src/vs/platform/native/common/nativeHostService.ts +++ b/src/vs/platform/native/common/nativeHostService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { INativeHostService } from 'vs/platform/native/common/native'; +import { ProxyChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IMainProcessService } from '../../ipc/common/mainProcessService.js'; +import { INativeHostService } from './native.js'; // @ts-ignore: interface is implemented via proxy export class NativeHostService implements INativeHostService { diff --git a/src/vs/platform/native/electron-main/auth.ts b/src/vs/platform/native/electron-main/auth.ts index 52b1f51c0..34adcc69f 100644 --- a/src/vs/platform/native/electron-main/auth.ts +++ b/src/vs/platform/native/electron-main/auth.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import { app, AuthenticationResponseDetails, AuthInfo as ElectronAuthInfo, Event as ElectronEvent, WebContents } from 'electron'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEncryptionMainService } from 'vs/platform/encryption/common/encryptionService'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AuthInfo, Credentials } from 'vs/platform/request/common/request'; -import { StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IApplicationStorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { hash } from '../../../base/common/hash.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEncryptionMainService } from '../../encryption/common/encryptionService.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { AuthInfo, Credentials } from '../../request/common/request.js'; +import { StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { IApplicationStorageMainService } from '../../storage/electron-main/storageMainService.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; interface ElectronAuthenticationResponseDetails extends AuthenticationResponseDetails { firstAuthAttempt?: boolean; // https://github.com/electron/electron/blob/84a42a050e7d45225e69df5bd2d2bf9f1037ea41/shell/browser/login_handler.cc#L70 diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts index 6c49504e7..6f57b9a7b 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts @@ -5,48 +5,48 @@ import * as fs from 'fs'; import { exec } from 'child_process'; -import { app, BrowserWindow, clipboard, Display, Menu, MessageBoxOptions, MessageBoxReturnValue, OpenDevToolsOptions, OpenDialogOptions, OpenDialogReturnValue, powerMonitor, SaveDialogOptions, SaveDialogReturnValue, screen, shell, webContents } from 'electron'; +import { app, BrowserWindow, clipboard, Display, Menu, MessageBoxOptions, MessageBoxReturnValue, OpenDialogOptions, OpenDialogReturnValue, powerMonitor, SaveDialogOptions, SaveDialogReturnValue, screen, shell, webContents } from 'electron'; import { arch, cpus, freemem, loadavg, platform, release, totalmem, type } from 'os'; import { promisify } from 'util'; -import { memoize } from 'vs/base/common/decorators'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { matchesSomeScheme, Schemas } from 'vs/base/common/network'; -import { dirname, join, posix, resolve, win32 } from 'vs/base/common/path'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { AddFirstParameterToFunctions } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { realpath } from 'vs/base/node/extpath'; -import { virtualMachineHint } from 'vs/base/node/id'; -import { Promises, SymlinkSupport } from 'vs/base/node/pfs'; -import { findFreePort } from 'vs/base/node/ports'; -import { localize } from 'vs/nls'; -import { ISerializableCommandAction } from 'vs/platform/action/common/action'; -import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILifecycleMainService, IRelaunchOptions } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ICommonNativeHostService, INativeHostOptions, IOSProperties, IOSStatistics } from 'vs/platform/native/common/native'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IPartsSplash } from 'vs/platform/theme/common/themeService'; -import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; -import { ICodeWindow } from 'vs/platform/window/electron-main/window'; -import { IColorScheme, IOpenedAuxiliaryWindow, IOpenedMainWindow, IOpenEmptyWindowOptions, IOpenWindowOptions, IPoint, IRectangle, IWindowOpenable } from 'vs/platform/window/common/window'; -import { IWindowsMainService, OpenContext } from 'vs/platform/windows/electron-main/windows'; -import { isWorkspaceIdentifier, toWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { hasWSLFeatureInstalled } from 'vs/platform/remote/node/wsl'; -import { WindowProfiler } from 'vs/platform/profiling/electron-main/windowProfiling'; -import { IV8Profile } from 'vs/platform/profiling/common/profiling'; -import { IAuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows'; -import { IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; -import { CancellationError } from 'vs/base/common/errors'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IProxyAuthService } from 'vs/platform/native/electron-main/auth'; -import { AuthInfo, Credentials, IRequestService } from 'vs/platform/request/common/request'; +import { memoize } from '../../../base/common/decorators.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { matchesSomeScheme, Schemas } from '../../../base/common/network.js'; +import { dirname, join, posix, resolve, win32 } from '../../../base/common/path.js'; +import { isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { AddFirstParameterToFunctions } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { realpath } from '../../../base/node/extpath.js'; +import { virtualMachineHint } from '../../../base/node/id.js'; +import { Promises, SymlinkSupport } from '../../../base/node/pfs.js'; +import { findFreePort } from '../../../base/node/ports.js'; +import { localize } from '../../../nls.js'; +import { ISerializableCommandAction } from '../../action/common/action.js'; +import { INativeOpenDialogOptions } from '../../dialogs/common/dialogs.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILifecycleMainService, IRelaunchOptions } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { ICommonNativeHostService, INativeHostOptions, IOSProperties, IOSStatistics } from '../common/native.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IPartsSplash } from '../../theme/common/themeService.js'; +import { IThemeMainService } from '../../theme/electron-main/themeMainService.js'; +import { ICodeWindow } from '../../window/electron-main/window.js'; +import { IColorScheme, IOpenedAuxiliaryWindow, IOpenedMainWindow, IOpenEmptyWindowOptions, IOpenWindowOptions, IPoint, IRectangle, IWindowOpenable, useWindowControlsOverlay } from '../../window/common/window.js'; +import { IWindowsMainService, OpenContext } from '../../windows/electron-main/windows.js'; +import { isWorkspaceIdentifier, toWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IWorkspacesManagementMainService } from '../../workspaces/electron-main/workspacesManagementMainService.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { hasWSLFeatureInstalled } from '../../remote/node/wsl.js'; +import { WindowProfiler } from '../../profiling/electron-main/windowProfiling.js'; +import { IV8Profile } from '../../profiling/common/profiling.js'; +import { IAuxiliaryWindowsMainService } from '../../auxiliaryWindow/electron-main/auxiliaryWindows.js'; +import { IAuxiliaryWindow } from '../../auxiliaryWindow/electron-main/auxiliaryWindow.js'; +import { CancellationError } from '../../../base/common/errors.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IProxyAuthService } from './auth.js'; +import { AuthInfo, Credentials, IRequestService } from '../../request/common/request.js'; export interface INativeHostMainService extends AddFirstParameterToFunctions /* only methods, not events */, number | undefined /* window ID */> { } @@ -690,6 +690,10 @@ export class NativeHostMainService extends Disposable implements INativeHostMain return clipboard.readText(type); } + async readImage(): Promise { + return clipboard.readImage().toPNG(); + } + async writeClipboardText(windowId: number | undefined, text: string, type?: 'selection' | 'clipboard'): Promise { return clipboard.writeText(text, type); } @@ -855,14 +859,28 @@ export class NativeHostMainService extends Disposable implements INativeHostMain //#region Development - async openDevTools(windowId: number | undefined, options?: Partial & INativeHostOptions): Promise { + async openDevTools(windowId: number | undefined, options?: INativeHostOptions): Promise { const window = this.windowById(options?.targetWindowId, windowId); - window?.win?.webContents.openDevTools(options?.mode ? { mode: options.mode, activate: options.activate } : undefined); + + let mode: 'bottom' | undefined = undefined; + if (isLinux && useWindowControlsOverlay(this.configurationService)) { + mode = 'bottom'; // TODO@bpasero WCO and devtools collide with default option 'right' + } + window?.win?.webContents.openDevTools(mode ? { mode } : undefined); } async toggleDevTools(windowId: number | undefined, options?: INativeHostOptions): Promise { const window = this.windowById(options?.targetWindowId, windowId); - window?.win?.webContents.toggleDevTools(); + const webContents = window?.win?.webContents; + if (!webContents) { + return; + } + + if (isLinux && useWindowControlsOverlay(this.configurationService) && !webContents.isDevToolsOpened()) { + webContents.openDevTools({ mode: 'bottom' }); // TODO@bpasero WCO and devtools collide with default option 'right' + } else { + webContents.toggleDevTools(); + } } //#endregion diff --git a/src/vs/platform/notification/common/notification.ts b/src/vs/platform/notification/common/notification.ts index 8506385b0..f573e788f 100644 --- a/src/vs/platform/notification/common/notification.ts +++ b/src/vs/platform/notification/common/notification.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction } from 'vs/base/common/actions'; -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import BaseSeverity from 'vs/base/common/severity'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IAction } from '../../../base/common/actions.js'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import BaseSeverity from '../../../base/common/severity.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export import Severity = BaseSeverity; diff --git a/src/vs/platform/notification/test/common/testNotificationService.ts b/src/vs/platform/notification/test/common/testNotificationService.ts index 7868f3d40..f016e186c 100644 --- a/src/vs/platform/notification/test/common/testNotificationService.ts +++ b/src/vs/platform/notification/test/common/testNotificationService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { INotification, INotificationHandle, INotificationService, INotificationSource, INotificationSourceFilter, IPromptChoice, IPromptOptions, IStatusMessageOptions, NoOpNotification, NotificationsFilter, Severity } from 'vs/platform/notification/common/notification'; +import { Event } from '../../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { INotification, INotificationHandle, INotificationService, INotificationSource, INotificationSourceFilter, IPromptChoice, IPromptOptions, IStatusMessageOptions, NoOpNotification, NotificationsFilter, Severity } from '../../common/notification.js'; export class TestNotificationService implements INotificationService { diff --git a/src/vs/platform/observable/common/platformObservableUtils.ts b/src/vs/platform/observable/common/platformObservableUtils.ts index 2e886ef65..225357bad 100644 --- a/src/vs/platform/observable/common/platformObservableUtils.ts +++ b/src/vs/platform/observable/common/platformObservableUtils.ts @@ -3,11 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { autorunOpts, IObservable, IReader } from 'vs/base/common/observable'; -import { observableFromEventOpts } from 'vs/base/common/observableInternal/utils'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyValue, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { autorunOpts, IObservable, IReader, observableFromEventOpts } from '../../../base/common/observable.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { ContextKeyValue, IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js'; /** Creates an observable update when a configuration key updates. */ export function observableConfigValue(key: string, defaultValue: T, configurationService: IConfigurationService): IObservable { diff --git a/src/vs/platform/observable/common/wrapInHotClass.ts b/src/vs/platform/observable/common/wrapInHotClass.ts new file mode 100644 index 000000000..75e706ed1 --- /dev/null +++ b/src/vs/platform/observable/common/wrapInHotClass.ts @@ -0,0 +1,70 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { isHotReloadEnabled } from '../../../base/common/hotReload.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { autorunWithStore, IObservable } from '../../../base/common/observable.js'; +import { BrandedService, GetLeadingNonServiceArgs, IInstantiationService } from '../../instantiation/common/instantiation.js'; + +export function hotClassGetOriginalInstance(value: T): T { + if (value instanceof BaseClass) { + return value._instance as any; + } + return value; +} + +/** + * Wrap a class in a reloadable wrapper. + * When the wrapper is created, the original class is created. + * When the original class changes, the instance is re-created. +*/ +export function wrapInHotClass0(clazz: IObservable>): Result> { + return !isHotReloadEnabled() ? clazz.get() : createWrapper(clazz, BaseClass0); +} + +type Result = new (...args: TArgs) => IDisposable; + +class BaseClass { + public _instance: unknown; + + constructor( + public readonly instantiationService: IInstantiationService, + ) { } + + public init(...params: any[]): void { } +} + +function createWrapper(clazz: IObservable, B: new (...args: T) => BaseClass) { + return (class ReloadableWrapper extends B { + private _autorun: IDisposable | undefined = undefined; + + override init(...params: any[]) { + this._autorun = autorunWithStore((reader, store) => { + const clazz_ = clazz.read(reader); + this._instance = store.add(this.instantiationService.createInstance(clazz_, ...params) as IDisposable); + }); + } + + dispose(): void { + this._autorun?.dispose(); + } + }) as any; +} + +class BaseClass0 extends BaseClass { + constructor(@IInstantiationService i: IInstantiationService) { super(i); this.init(); } +} + +/** + * Wrap a class in a reloadable wrapper. + * When the wrapper is created, the original class is created. + * When the original class changes, the instance is re-created. +*/ +export function wrapInHotClass1(clazz: IObservable>): Result> { + return !isHotReloadEnabled() ? clazz.get() : createWrapper(clazz, BaseClass1); +} + +class BaseClass1 extends BaseClass { + constructor(param1: any, @IInstantiationService i: IInstantiationService,) { super(i); this.init(param1); } +} diff --git a/src/vs/platform/observable/common/wrapInReloadableClass.ts b/src/vs/platform/observable/common/wrapInReloadableClass.ts index cfecf902c..2bb37d1f4 100644 --- a/src/vs/platform/observable/common/wrapInReloadableClass.ts +++ b/src/vs/platform/observable/common/wrapInReloadableClass.ts @@ -2,11 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isHotReloadEnabled } from 'vs/base/common/hotReload'; -import { readHotReloadableExport } from 'vs/base/common/hotReloadHelpers'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { autorunWithStore } from 'vs/base/common/observable'; -import { BrandedService, GetLeadingNonServiceArgs, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { isHotReloadEnabled } from '../../../base/common/hotReload.js'; +import { readHotReloadableExport } from '../../../base/common/hotReloadHelpers.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { autorunWithStore } from '../../../base/common/observable.js'; +import { BrandedService, GetLeadingNonServiceArgs, IInstantiationService } from '../../instantiation/common/instantiation.js'; /** * Wrap a class in a reloadable wrapper. diff --git a/src/vs/platform/opener/browser/link.ts b/src/vs/platform/opener/browser/link.ts index eb93b66a1..ff830dc05 100644 --- a/src/vs/platform/opener/browser/link.ts +++ b/src/vs/platform/opener/browser/link.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, append, EventHelper, EventLike, clearNode } from 'vs/base/browser/dom'; -import { DomEmitter } from 'vs/base/browser/event'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { EventType as TouchEventType, Gesture } from 'vs/base/browser/touch'; -import { Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import 'vs/css!./link'; -import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import type { IManagedHover } from 'vs/base/browser/ui/hover/hover'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; +import { $, append, EventHelper, EventLike, clearNode } from '../../../base/browser/dom.js'; +import { DomEmitter } from '../../../base/browser/event.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { EventType as TouchEventType, Gesture } from '../../../base/browser/touch.js'; +import { Event } from '../../../base/common/event.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IOpenerService } from '../common/opener.js'; +import './link.css'; +import { getDefaultHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js'; +import type { IManagedHover } from '../../../base/browser/ui/hover/hover.js'; +import { IHoverService } from '../../hover/browser/hover.js'; export interface ILinkDescriptor { readonly label: string | HTMLElement; diff --git a/src/vs/platform/opener/common/opener.ts b/src/vs/platform/opener/common/opener.ts index 1f4d1d96b..eb8074255 100644 --- a/src/vs/platform/opener/common/opener.ts +++ b/src/vs/platform/opener/common/opener.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IEditorOptions, ITextEditorSelection } from 'vs/platform/editor/common/editor'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IEditorOptions, ITextEditorSelection } from '../../editor/common/editor.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IOpenerService = createDecorator('openerService'); diff --git a/src/vs/platform/opener/test/common/nullOpenerService.ts b/src/vs/platform/opener/test/common/nullOpenerService.ts index e5d5a3a05..f5c0473d7 100644 --- a/src/vs/platform/opener/test/common/nullOpenerService.ts +++ b/src/vs/platform/opener/test/common/nullOpenerService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IOpenerService } from '../../common/opener'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IOpenerService } from '../../common/opener.js'; export const NullOpenerService = Object.freeze({ _serviceBrand: undefined, diff --git a/src/vs/platform/opener/test/common/opener.test.ts b/src/vs/platform/opener/test/common/opener.test.ts index 93ee50f99..b75a268ec 100644 --- a/src/vs/platform/opener/test/common/opener.test.ts +++ b/src/vs/platform/opener/test/common/opener.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { extractSelection, withSelection } from 'vs/platform/opener/common/opener'; +import { URI } from '../../../../base/common/uri.js'; +import { extractSelection, withSelection } from '../../common/opener.js'; suite('extractSelection', () => { diff --git a/src/vs/platform/policy/common/filePolicyService.ts b/src/vs/platform/policy/common/filePolicyService.ts index 3d3a1531e..40d13159b 100644 --- a/src/vs/platform/policy/common/filePolicyService.ts +++ b/src/vs/platform/policy/common/filePolicyService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ThrottledDelayer } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { isObject } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AbstractPolicyService, IPolicyService, PolicyName, PolicyValue } from 'vs/platform/policy/common/policy'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import { Event } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { isObject } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { FileOperationError, FileOperationResult, IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { AbstractPolicyService, IPolicyService, PolicyName, PolicyValue } from './policy.js'; function keysDiff(a: Map, b: Map): string[] { const result: string[] = []; diff --git a/src/vs/platform/policy/common/policy.ts b/src/vs/platform/policy/common/policy.ts index 74b3a0dc3..5da12a2a5 100644 --- a/src/vs/platform/policy/common/policy.ts +++ b/src/vs/platform/policy/common/policy.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export type PolicyName = string; export type PolicyValue = string | number; diff --git a/src/vs/platform/policy/common/policyIpc.ts b/src/vs/platform/policy/common/policyIpc.ts index 33a0ddf1c..c95719592 100644 --- a/src/vs/platform/policy/common/policyIpc.ts +++ b/src/vs/platform/policy/common/policyIpc.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { AbstractPolicyService, IPolicyService, PolicyDefinition, PolicyName, PolicyValue } from 'vs/platform/policy/common/policy'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { AbstractPolicyService, IPolicyService, PolicyDefinition, PolicyName, PolicyValue } from './policy.js'; export class PolicyChannel implements IServerChannel { diff --git a/src/vs/platform/policy/node/nativePolicyService.ts b/src/vs/platform/policy/node/nativePolicyService.ts index 747177ae7..67f7892e7 100644 --- a/src/vs/platform/policy/node/nativePolicyService.ts +++ b/src/vs/platform/policy/node/nativePolicyService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AbstractPolicyService, IPolicyService, PolicyDefinition } from 'vs/platform/policy/common/policy'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Throttler } from 'vs/base/common/async'; +import { AbstractPolicyService, IPolicyService, PolicyDefinition } from '../common/policy.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Throttler } from '../../../base/common/async.js'; import type { PolicyUpdate, Watcher } from '@vscode/policy-watcher'; -import { MutableDisposable } from 'vs/base/common/lifecycle'; -import { ILogService } from 'vs/platform/log/common/log'; +import { MutableDisposable } from '../../../base/common/lifecycle.js'; +import { ILogService } from '../../log/common/log.js'; export class NativePolicyService extends AbstractPolicyService implements IPolicyService { diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts index 58278d978..a98043f55 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { env } from 'vs/base/common/process'; -import { IProductConfiguration } from 'vs/base/common/product'; -import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes'; +import { env } from '../../../base/common/process.js'; +import { IProductConfiguration } from '../../../base/common/product.js'; +import { ISandboxConfiguration } from '../../../base/parts/sandbox/common/sandboxTypes.js'; /** * @deprecated You MUST use `IProductService` if possible. @@ -58,7 +58,7 @@ else { // Running out of sources if (Object.keys(product).length === 0) { Object.assign(product, { - version: '1.91.0-dev', + version: '1.94.0-dev', nameShort: 'Code - OSS Dev', nameLong: 'Code - OSS Dev', applicationName: 'code-oss', diff --git a/src/vs/platform/product/common/productService.ts b/src/vs/platform/product/common/productService.ts index 4e8561e3b..fbcccb4f0 100644 --- a/src/vs/platform/product/common/productService.ts +++ b/src/vs/platform/product/common/productService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IProductConfiguration } from 'vs/base/common/product'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IProductConfiguration } from '../../../base/common/product.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IProductService = createDecorator('productService'); diff --git a/src/vs/platform/profiling/common/profiling.ts b/src/vs/platform/profiling/common/profiling.ts index f4b4a3027..79f9612d4 100644 --- a/src/vs/platform/profiling/common/profiling.ts +++ b/src/vs/platform/profiling/common/profiling.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { basename, isAbsolute, join } from 'vs/base/common/path'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { basename, isAbsolute, join } from '../../../base/common/path.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export interface IV8Profile { nodes: IV8ProfileNode[]; diff --git a/src/vs/platform/profiling/common/profilingModel.ts b/src/vs/platform/profiling/common/profilingModel.ts index 822022033..a1c491c50 100644 --- a/src/vs/platform/profiling/common/profilingModel.ts +++ b/src/vs/platform/profiling/common/profilingModel.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import type { IV8Profile, IV8ProfileNode } from 'vs/platform/profiling/common/profiling'; +import type { IV8Profile, IV8ProfileNode } from './profiling.js'; // #region // https://github.com/microsoft/vscode-js-profile-visualizer/blob/6e7401128ee860be113a916f80fcfe20ac99418e/packages/vscode-js-profile-core/src/cpu/model.ts#L4 diff --git a/src/vs/platform/profiling/common/profilingTelemetrySpec.ts b/src/vs/platform/profiling/common/profilingTelemetrySpec.ts index 316b6321f..d6f8fd92b 100644 --- a/src/vs/platform/profiling/common/profilingTelemetrySpec.ts +++ b/src/vs/platform/profiling/common/profilingTelemetrySpec.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogService } from 'vs/platform/log/common/log'; -import { BottomUpSample } from 'vs/platform/profiling/common/profilingModel'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { errorHandler } from 'vs/base/common/errors'; +import { ILogService } from '../../log/common/log.js'; +import { BottomUpSample } from './profilingModel.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { errorHandler } from '../../../base/common/errors.js'; type TelemetrySampleData = { selfTime: number; diff --git a/src/vs/platform/profiling/electron-main/windowProfiling.ts b/src/vs/platform/profiling/electron-main/windowProfiling.ts index c9ac6756b..222fe9c0f 100644 --- a/src/vs/platform/profiling/electron-main/windowProfiling.ts +++ b/src/vs/platform/profiling/electron-main/windowProfiling.ts @@ -5,9 +5,9 @@ import type { ProfileResult } from 'v8-inspect-profiler'; import { BrowserWindow } from 'electron'; -import { timeout } from 'vs/base/common/async'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IV8Profile } from 'vs/platform/profiling/common/profiling'; +import { timeout } from '../../../base/common/async.js'; +import { ILogService } from '../../log/common/log.js'; +import { IV8Profile } from '../common/profiling.js'; export class WindowProfiler { diff --git a/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.esm.ts b/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.esm.ts index 4329929cd..bab4ec0dc 100644 --- a/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.esm.ts +++ b/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.esm.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { create } from './profileAnalysisWorker'; -import { bootstrapSimpleWorker } from 'vs/base/common/worker/simpleWorkerBootstrap'; +import { create } from './profileAnalysisWorker.js'; +import { bootstrapSimpleWorker } from '../../../base/common/worker/simpleWorkerBootstrap.js'; bootstrapSimpleWorker(create); diff --git a/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.ts b/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.ts index 4d04422e3..50acc3353 100644 --- a/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.ts +++ b/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { basename } from 'vs/base/common/path'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { URI } from 'vs/base/common/uri'; -import { IRequestHandler, IWorkerServer } from 'vs/base/common/worker/simpleWorker'; -import { IV8Profile, Utils } from 'vs/platform/profiling/common/profiling'; -import { IProfileModel, BottomUpSample, buildModel, BottomUpNode, processNode, CdpCallFrame } from 'vs/platform/profiling/common/profilingModel'; -import { BottomUpAnalysis, IProfileAnalysisWorker, ProfilingOutput } from 'vs/platform/profiling/electron-sandbox/profileAnalysisWorkerService'; +import { basename } from '../../../base/common/path.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { URI } from '../../../base/common/uri.js'; +import { IRequestHandler, IWorkerServer } from '../../../base/common/worker/simpleWorker.js'; +import { IV8Profile, Utils } from '../common/profiling.js'; +import { IProfileModel, BottomUpSample, buildModel, BottomUpNode, processNode, CdpCallFrame } from '../common/profilingModel.js'; +import { BottomUpAnalysis, IProfileAnalysisWorker, ProfilingOutput } from './profileAnalysisWorkerService.js'; /** * Defines the worker entry point. Must be exported and named `create`. diff --git a/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorkerService.ts b/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorkerService.ts index 433200a8b..164bafa02 100644 --- a/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorkerService.ts +++ b/src/vs/platform/profiling/electron-sandbox/profileAnalysisWorkerService.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ -import { createWebWorker } from 'vs/base/browser/defaultWorkerFactory'; -import { URI } from 'vs/base/common/uri'; -import { Proxied } from 'vs/base/common/worker/simpleWorker'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IV8Profile } from 'vs/platform/profiling/common/profiling'; -import { BottomUpSample } from 'vs/platform/profiling/common/profilingModel'; -import { reportSample } from 'vs/platform/profiling/common/profilingTelemetrySpec'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { createWebWorker } from '../../../base/browser/defaultWorkerFactory.js'; +import { URI } from '../../../base/common/uri.js'; +import { Proxied } from '../../../base/common/worker/simpleWorker.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IV8Profile } from '../common/profiling.js'; +import { BottomUpSample } from '../common/profilingModel.js'; +import { reportSample } from '../common/profilingTelemetrySpec.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; export const enum ProfilingOutput { Failure, diff --git a/src/vs/platform/profiling/electron-sandbox/profilingService.ts b/src/vs/platform/profiling/electron-sandbox/profilingService.ts index 7e26d8a5e..ffb1e47ed 100644 --- a/src/vs/platform/profiling/electron-sandbox/profilingService.ts +++ b/src/vs/platform/profiling/electron-sandbox/profilingService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerSharedProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; -import { IV8InspectProfilingService } from 'vs/platform/profiling/common/profiling'; +import { registerSharedProcessRemoteService } from '../../ipc/electron-sandbox/services.js'; +import { IV8InspectProfilingService } from '../common/profiling.js'; registerSharedProcessRemoteService(IV8InspectProfilingService, 'v8InspectProfiling'); diff --git a/src/vs/platform/profiling/node/profilingService.ts b/src/vs/platform/profiling/node/profilingService.ts index c3f218d04..e1b199d38 100644 --- a/src/vs/platform/profiling/node/profilingService.ts +++ b/src/vs/platform/profiling/node/profilingService.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import type { ProfilingSession } from 'v8-inspect-profiler'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IV8InspectProfilingService, IV8Profile } from 'vs/platform/profiling/common/profiling'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IV8InspectProfilingService, IV8Profile } from '../common/profiling.js'; export class InspectProfilingService implements IV8InspectProfilingService { diff --git a/src/vs/platform/progress/common/progress.ts b/src/vs/platform/progress/common/progress.ts index 2a1c7349a..a2bdb893f 100644 --- a/src/vs/platform/progress/common/progress.ts +++ b/src/vs/platform/progress/common/progress.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction } from 'vs/base/common/actions'; -import { DeferredPromise } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { INotificationSource, NotificationPriority } from 'vs/platform/notification/common/notification'; +import { IAction } from '../../../base/common/actions.js'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { INotificationSource, NotificationPriority } from '../../notification/common/notification.js'; export const IProgressService = createDecorator('progressService'); diff --git a/src/vs/platform/progress/test/common/progress.test.ts b/src/vs/platform/progress/test/common/progress.test.ts index 24c2ddb78..b3be8cf80 100644 --- a/src/vs/platform/progress/test/common/progress.test.ts +++ b/src/vs/platform/progress/test/common/progress.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { AsyncProgress } from 'vs/platform/progress/common/progress'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { AsyncProgress } from '../../common/progress.js'; suite('Progress', () => { diff --git a/src/vs/platform/protocol/electron-main/protocol.ts b/src/vs/platform/protocol/electron-main/protocol.ts index eaf83cbdf..e180f1b1a 100644 --- a/src/vs/platform/protocol/electron-main/protocol.ts +++ b/src/vs/platform/protocol/electron-main/protocol.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IProtocolMainService = createDecorator('protocolMainService'); diff --git a/src/vs/platform/protocol/electron-main/protocolMainService.ts b/src/vs/platform/protocol/electron-main/protocolMainService.ts index 4dcb1bcaf..840b936d3 100644 --- a/src/vs/platform/protocol/electron-main/protocolMainService.ts +++ b/src/vs/platform/protocol/electron-main/protocolMainService.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import { session } from 'electron'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { COI, FileAccess, Schemas } from 'vs/base/common/network'; -import { basename, extname, normalize } from 'vs/base/common/path'; -import { isLinux } from 'vs/base/common/platform'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IIPCObjectUrl, IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { COI, FileAccess, Schemas } from '../../../base/common/network.js'; +import { basename, extname, normalize } from '../../../base/common/path.js'; +import { isLinux } from '../../../base/common/platform.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { ILogService } from '../../log/common/log.js'; +import { IIPCObjectUrl, IProtocolMainService } from './protocol.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; type ProtocolCallback = { (result: string | Electron.FilePathWithHeaders | { error: number }): void }; diff --git a/src/vs/platform/quickinput/browser/commandsQuickAccess.ts b/src/vs/platform/quickinput/browser/commandsQuickAccess.ts index feb47bd2f..513641b4d 100644 --- a/src/vs/platform/quickinput/browser/commandsQuickAccess.ts +++ b/src/vs/platform/quickinput/browser/commandsQuickAccess.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { isCancellationError } from 'vs/base/common/errors'; -import { matchesContiguousSubString, matchesPrefix, matchesWords, or } from 'vs/base/common/filters'; -import { createSingleCallFunction } from 'vs/base/common/functional'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { LRUCache } from 'vs/base/common/map'; -import { TfIdfCalculator, normalizeTfIdfScores } from 'vs/base/common/tfIdf'; -import { localize } from 'vs/nls'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ILogService } from 'vs/platform/log/common/log'; -import { FastAndSlowPicks, IPickerQuickAccessItem, IPickerQuickAccessProviderOptions, PickerQuickAccessProvider, Picks } from 'vs/platform/quickinput/browser/pickerQuickAccess'; -import { IQuickAccessProviderRunOptions } from 'vs/platform/quickinput/common/quickAccess'; -import { IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; -import { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { matchesContiguousSubString, matchesPrefix, matchesWords, or } from '../../../base/common/filters.js'; +import { createSingleCallFunction } from '../../../base/common/functional.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { LRUCache } from '../../../base/common/map.js'; +import { TfIdfCalculator, normalizeTfIdfScores } from '../../../base/common/tfIdf.js'; +import { localize } from '../../../nls.js'; +import { ILocalizedString } from '../../action/common/action.js'; +import { ICommandService } from '../../commands/common/commands.js'; +import { IConfigurationChangeEvent, IConfigurationService } from '../../configuration/common/configuration.js'; +import { IDialogService } from '../../dialogs/common/dialogs.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { ILogService } from '../../log/common/log.js'; +import { FastAndSlowPicks, IPickerQuickAccessItem, IPickerQuickAccessProviderOptions, PickerQuickAccessProvider, Picks } from './pickerQuickAccess.js'; +import { IQuickAccessProviderRunOptions } from '../common/quickAccess.js'; +import { IQuickPickSeparator } from '../common/quickInput.js'; +import { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; export interface ICommandQuickPick extends IPickerQuickAccessItem { readonly commandId: string; diff --git a/src/vs/platform/quickinput/browser/helpQuickAccess.ts b/src/vs/platform/quickinput/browser/helpQuickAccess.ts index 0a9315878..6cb51c869 100644 --- a/src/vs/platform/quickinput/browser/helpQuickAccess.ts +++ b/src/vs/platform/quickinput/browser/helpQuickAccess.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { Extensions, IQuickAccessProvider, IQuickAccessProviderDescriptor, IQuickAccessRegistry } from 'vs/platform/quickinput/common/quickAccess'; -import { IQuickInputService, IQuickPick, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; +import { localize } from '../../../nls.js'; +import { Registry } from '../../registry/common/platform.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +import { Extensions, IQuickAccessProvider, IQuickAccessProviderDescriptor, IQuickAccessRegistry } from '../common/quickAccess.js'; +import { IQuickInputService, IQuickPick, IQuickPickItem } from '../common/quickInput.js'; interface IHelpQuickAccessPickItem extends IQuickPickItem { readonly prefix: string; diff --git a/src/vs/platform/quickinput/browser/pickerQuickAccess.ts b/src/vs/platform/quickinput/browser/pickerQuickAccess.ts index eded35105..b356304da 100644 --- a/src/vs/platform/quickinput/browser/pickerQuickAccess.ts +++ b/src/vs/platform/quickinput/browser/pickerQuickAccess.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Disposable, DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IKeyMods, IQuickPickDidAcceptEvent, IQuickPickSeparator, IQuickPick, IQuickPickItem, IQuickInputButton } from 'vs/platform/quickinput/common/quickInput'; -import { IQuickAccessProvider, IQuickAccessProviderRunOptions } from 'vs/platform/quickinput/common/quickAccess'; -import { isFunction } from 'vs/base/common/types'; +import { timeout } from '../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableStore, IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { IKeyMods, IQuickPickDidAcceptEvent, IQuickPickSeparator, IQuickPick, IQuickPickItem, IQuickInputButton } from '../common/quickInput.js'; +import { IQuickAccessProvider, IQuickAccessProviderRunOptions } from '../common/quickAccess.js'; +import { isFunction } from '../../../base/common/types.js'; export enum TriggerAction { diff --git a/src/vs/platform/quickinput/browser/quickAccess.ts b/src/vs/platform/quickinput/browser/quickAccess.ts index b66289c83..0ab3fd461 100644 --- a/src/vs/platform/quickinput/browser/quickAccess.ts +++ b/src/vs/platform/quickinput/browser/quickAccess.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DeferredPromise } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { DefaultQuickAccessFilterValue, Extensions, IQuickAccessController, IQuickAccessOptions, IQuickAccessProvider, IQuickAccessProviderDescriptor, IQuickAccessRegistry } from 'vs/platform/quickinput/common/quickAccess'; -import { IQuickInputService, IQuickPick, IQuickPickItem, ItemActivation } from 'vs/platform/quickinput/common/quickInput'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { DefaultQuickAccessFilterValue, Extensions, IQuickAccessController, IQuickAccessOptions, IQuickAccessProvider, IQuickAccessProviderDescriptor, IQuickAccessRegistry } from '../common/quickAccess.js'; +import { IQuickInputService, IQuickPick, IQuickPickItem, ItemActivation } from '../common/quickInput.js'; +import { Registry } from '../../registry/common/platform.js'; export class QuickAccessController extends Disposable implements IQuickAccessController { diff --git a/src/vs/platform/quickinput/browser/quickInput.ts b/src/vs/platform/quickinput/browser/quickInput.ts index afc73c9ec..6d7096e85 100644 --- a/src/vs/platform/quickinput/browser/quickInput.ts +++ b/src/vs/platform/quickinput/browser/quickInput.ts @@ -3,36 +3,36 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Button, IButtonStyles } from 'vs/base/browser/ui/button/button'; -import { CountBadge, ICountBadgeStyles } from 'vs/base/browser/ui/countBadge/countBadge'; -import { IHoverDelegate, IHoverDelegateOptions } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { IInputBoxStyles } from 'vs/base/browser/ui/inputbox/inputBox'; -import { IKeybindingLabelStyles } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { IListStyles } from 'vs/base/browser/ui/list/listWidget'; -import { IProgressBarStyles, ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; -import { IToggleStyles, Toggle } from 'vs/base/browser/ui/toggle/toggle'; -import { equals } from 'vs/base/common/arrays'; -import { TimeoutTimer } from 'vs/base/common/async'; -import { Codicon } from 'vs/base/common/codicons'; -import { Emitter, Event, EventBufferer } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isIOS } from 'vs/base/common/platform'; -import Severity from 'vs/base/common/severity'; -import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./media/quickInput'; -import { localize } from 'vs/nls'; -import { IInputBox, IKeyMods, IQuickInput, IQuickInputButton, IQuickInputHideEvent, IQuickInputToggle, IQuickNavigateConfiguration, IQuickPick, IQuickPickDidAcceptEvent, IQuickPickItem, IQuickPickItemButtonEvent, IQuickPickSeparator, IQuickPickSeparatorButtonEvent, IQuickPickWillAcceptEvent, IQuickWidget, ItemActivation, NO_KEY_MODS, QuickInputButtonLocation, QuickInputHideReason, QuickInputType, QuickPickFocus } from 'vs/platform/quickinput/common/quickInput'; -import { QuickInputBox } from './quickInputBox'; -import { quickInputButtonToAction, renderQuickInputDescription } from './quickInputUtils'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IHoverService, WorkbenchHoverDelegate } from 'vs/platform/hover/browser/hover'; -import { QuickInputTree } from 'vs/platform/quickinput/browser/quickInputTree'; -import type { IHoverOptions } from 'vs/base/browser/ui/hover/hover'; -import { ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import * as dom from '../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { Button, IButtonStyles } from '../../../base/browser/ui/button/button.js'; +import { CountBadge, ICountBadgeStyles } from '../../../base/browser/ui/countBadge/countBadge.js'; +import { IHoverDelegate, IHoverDelegateOptions } from '../../../base/browser/ui/hover/hoverDelegate.js'; +import { IInputBoxStyles } from '../../../base/browser/ui/inputbox/inputBox.js'; +import { IKeybindingLabelStyles } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { IListStyles } from '../../../base/browser/ui/list/listWidget.js'; +import { IProgressBarStyles, ProgressBar } from '../../../base/browser/ui/progressbar/progressbar.js'; +import { IToggleStyles, Toggle } from '../../../base/browser/ui/toggle/toggle.js'; +import { equals } from '../../../base/common/arrays.js'; +import { TimeoutTimer } from '../../../base/common/async.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { Emitter, Event, EventBufferer } from '../../../base/common/event.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { isIOS } from '../../../base/common/platform.js'; +import Severity from '../../../base/common/severity.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import './media/quickInput.css'; +import { localize } from '../../../nls.js'; +import { IInputBox, IKeyMods, IQuickInput, IQuickInputButton, IQuickInputHideEvent, IQuickInputToggle, IQuickNavigateConfiguration, IQuickPick, IQuickPickDidAcceptEvent, IQuickPickItem, IQuickPickItemButtonEvent, IQuickPickSeparator, IQuickPickSeparatorButtonEvent, IQuickPickWillAcceptEvent, IQuickWidget, ItemActivation, NO_KEY_MODS, QuickInputButtonLocation, QuickInputHideReason, QuickInputType, QuickPickFocus } from '../common/quickInput.js'; +import { QuickInputBox } from './quickInputBox.js'; +import { quickInputButtonToAction, renderQuickInputDescription } from './quickInputUtils.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IHoverService, WorkbenchHoverDelegate } from '../../hover/browser/hover.js'; +import { QuickInputTree } from './quickInputTree.js'; +import type { IHoverOptions } from '../../../base/browser/ui/hover/hover.js'; +import { ContextKeyExpr, RawContextKey } from '../../contextkey/common/contextkey.js'; export const inQuickInputContextKeyValue = 'inQuickInput'; export const InQuickInputContextKey = new RawContextKey(inQuickInputContextKeyValue, false, localize('inQuickInput', "Whether keyboard focus is inside the quick input control")); diff --git a/src/vs/platform/quickinput/browser/quickInputActions.ts b/src/vs/platform/quickinput/browser/quickInputActions.ts index 5efaf7936..bf6ca7c73 100644 --- a/src/vs/platform/quickinput/browser/quickInputActions.ts +++ b/src/vs/platform/quickinput/browser/quickInputActions.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { isMacintosh } from 'vs/base/common/platform'; -import { PartialExcept } from 'vs/base/common/types'; -import { localize } from 'vs/nls'; -import { ICommandHandler } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { InputFocusedContext } from 'vs/platform/contextkey/common/contextkeys'; -import { ICommandAndKeybindingRule, KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { endOfQuickInputBoxContext, inQuickInputContext, quickInputTypeContextKeyValue } from 'vs/platform/quickinput/browser/quickInput'; -import { IQuickInputService, IQuickPick, QuickInputType, QuickPickFocus } from 'vs/platform/quickinput/common/quickInput'; +import { KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; +import { isMacintosh } from '../../../base/common/platform.js'; +import { PartialExcept } from '../../../base/common/types.js'; +import { localize } from '../../../nls.js'; +import { ICommandHandler } from '../../commands/common/commands.js'; +import { ContextKeyExpr } from '../../contextkey/common/contextkey.js'; +import { InputFocusedContext } from '../../contextkey/common/contextkeys.js'; +import { ICommandAndKeybindingRule, KeybindingWeight, KeybindingsRegistry } from '../../keybinding/common/keybindingsRegistry.js'; +import { endOfQuickInputBoxContext, inQuickInputContext, quickInputTypeContextKeyValue } from './quickInput.js'; +import { IQuickInputService, IQuickPick, QuickInputType, QuickPickFocus } from '../common/quickInput.js'; const defaultCommandAndKeybindingRule = { weight: KeybindingWeight.WorkbenchContrib, diff --git a/src/vs/platform/quickinput/browser/quickInputBox.ts b/src/vs/platform/quickinput/browser/quickInputBox.ts index 9ee1440a9..e7868b893 100644 --- a/src/vs/platform/quickinput/browser/quickInputBox.ts +++ b/src/vs/platform/quickinput/browser/quickInputBox.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { FindInput } from 'vs/base/browser/ui/findinput/findInput'; -import { IInputBoxStyles, IRange, MessageType } from 'vs/base/browser/ui/inputbox/inputBox'; -import { IToggleStyles, Toggle } from 'vs/base/browser/ui/toggle/toggle'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import Severity from 'vs/base/common/severity'; -import 'vs/css!./media/quickInput'; +import * as dom from '../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { FindInput } from '../../../base/browser/ui/findinput/findInput.js'; +import { IInputBoxStyles, IRange, MessageType } from '../../../base/browser/ui/inputbox/inputBox.js'; +import { IToggleStyles, Toggle } from '../../../base/browser/ui/toggle/toggle.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import Severity from '../../../base/common/severity.js'; +import './media/quickInput.css'; const $ = dom.$; diff --git a/src/vs/platform/quickinput/browser/quickInputController.ts b/src/vs/platform/quickinput/browser/quickInputController.ts index 8941fb5b1..93ca64256 100644 --- a/src/vs/platform/quickinput/browser/quickInputController.ts +++ b/src/vs/platform/quickinput/browser/quickInputController.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { Button } from 'vs/base/browser/ui/button/button'; -import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge'; -import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import Severity from 'vs/base/common/severity'; -import { isString } from 'vs/base/common/types'; -import { localize } from 'vs/nls'; -import { IInputBox, IInputOptions, IKeyMods, IPickOptions, IQuickInput, IQuickInputButton, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, IQuickWidget, QuickInputHideReason, QuickPickInput, QuickPickFocus } from 'vs/platform/quickinput/common/quickInput'; -import { QuickInputBox } from 'vs/platform/quickinput/browser/quickInputBox'; -import { QuickInputUI, Writeable, IQuickInputStyles, IQuickInputOptions, QuickPick, backButton, InputBox, Visibilities, QuickWidget, InQuickInputContextKey, QuickInputTypeContextKey, EndOfQuickInputBoxContextKey } from 'vs/platform/quickinput/browser/quickInput'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { mainWindow } from 'vs/base/browser/window'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { QuickInputTree } from 'vs/platform/quickinput/browser/quickInputTree'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import 'vs/platform/quickinput/browser/quickInputActions'; +import * as dom from '../../../base/browser/dom.js'; +import { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { ActionViewItem } from '../../../base/browser/ui/actionbar/actionViewItems.js'; +import { Button } from '../../../base/browser/ui/button/button.js'; +import { CountBadge } from '../../../base/browser/ui/countBadge/countBadge.js'; +import { ProgressBar } from '../../../base/browser/ui/progressbar/progressbar.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { Disposable, DisposableStore, dispose } from '../../../base/common/lifecycle.js'; +import Severity from '../../../base/common/severity.js'; +import { isString } from '../../../base/common/types.js'; +import { localize } from '../../../nls.js'; +import { IInputBox, IInputOptions, IKeyMods, IPickOptions, IQuickInput, IQuickInputButton, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, IQuickWidget, QuickInputHideReason, QuickPickInput, QuickPickFocus } from '../common/quickInput.js'; +import { QuickInputBox } from './quickInputBox.js'; +import { QuickInputUI, Writeable, IQuickInputStyles, IQuickInputOptions, QuickPick, backButton, InputBox, Visibilities, QuickWidget, InQuickInputContextKey, QuickInputTypeContextKey, EndOfQuickInputBoxContextKey } from './quickInput.js'; +import { ILayoutService } from '../../layout/browser/layoutService.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { QuickInputTree } from './quickInputTree.js'; +import { IContextKeyService } from '../../contextkey/common/contextkey.js'; +import './quickInputActions.js'; const $ = dom.$; diff --git a/src/vs/platform/quickinput/browser/quickInputService.ts b/src/vs/platform/quickinput/browser/quickInputService.ts index 3c5b30a95..ccdb69655 100644 --- a/src/vs/platform/quickinput/browser/quickInputService.ts +++ b/src/vs/platform/quickinput/browser/quickInputService.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { QuickAccessController } from 'vs/platform/quickinput/browser/quickAccess'; -import { IQuickAccessController } from 'vs/platform/quickinput/common/quickAccess'; -import { IInputBox, IInputOptions, IKeyMods, IPickOptions, IQuickInputButton, IQuickInputService, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, IQuickWidget, QuickPickInput } from 'vs/platform/quickinput/common/quickInput'; -import { defaultButtonStyles, defaultCountBadgeStyles, defaultInputBoxStyles, defaultKeybindingLabelStyles, defaultProgressBarStyles, defaultToggleStyles, getListStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { activeContrastBorder, asCssVariable, pickerGroupBorder, pickerGroupForeground, quickInputBackground, quickInputForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, quickInputTitleBackground, widgetBorder, widgetShadow } from 'vs/platform/theme/common/colorRegistry'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { IQuickInputOptions, IQuickInputStyles, QuickInputHoverDelegate } from './quickInput'; -import { QuickInputController, IQuickInputControllerHost } from 'vs/platform/quickinput/browser/quickInputController'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { getWindow } from 'vs/base/browser/dom'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { IContextKey, IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ILayoutService } from '../../layout/browser/layoutService.js'; +import { IOpenerService } from '../../opener/common/opener.js'; +import { QuickAccessController } from './quickAccess.js'; +import { IQuickAccessController } from '../common/quickAccess.js'; +import { IInputBox, IInputOptions, IKeyMods, IPickOptions, IQuickInputButton, IQuickInputService, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, IQuickWidget, QuickPickInput } from '../common/quickInput.js'; +import { defaultButtonStyles, defaultCountBadgeStyles, defaultInputBoxStyles, defaultKeybindingLabelStyles, defaultProgressBarStyles, defaultToggleStyles, getListStyles } from '../../theme/browser/defaultStyles.js'; +import { activeContrastBorder, asCssVariable, pickerGroupBorder, pickerGroupForeground, quickInputBackground, quickInputForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, quickInputTitleBackground, widgetBorder, widgetShadow } from '../../theme/common/colorRegistry.js'; +import { IThemeService, Themable } from '../../theme/common/themeService.js'; +import { IQuickInputOptions, IQuickInputStyles, QuickInputHoverDelegate } from './quickInput.js'; +import { QuickInputController, IQuickInputControllerHost } from './quickInputController.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { getWindow } from '../../../base/browser/dom.js'; export class QuickInputService extends Themable implements IQuickInputService { diff --git a/src/vs/platform/quickinput/browser/quickInputTree.ts b/src/vs/platform/quickinput/browser/quickInputTree.ts index 74163bd7e..a4641a718 100644 --- a/src/vs/platform/quickinput/browser/quickInputTree.ts +++ b/src/vs/platform/quickinput/browser/quickInputTree.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Emitter, Event, EventBufferer, IValueWithChangeEvent } from 'vs/base/common/event'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { IObjectTreeElement, ITreeNode, ITreeRenderer, TreeVisibility } from 'vs/base/browser/ui/tree/tree'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IQuickPickItem, IQuickPickItemButtonEvent, IQuickPickSeparator, IQuickPickSeparatorButtonEvent, QuickPickItem, QuickPickFocus } from 'vs/platform/quickinput/common/quickInput'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IMatch } from 'vs/base/common/filters'; -import { IListAccessibilityProvider, IListStyles } from 'vs/base/browser/ui/list/listWidget'; -import { AriaRole } from 'vs/base/browser/ui/aria/aria'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { OS } from 'vs/base/common/platform'; -import { memoize } from 'vs/base/common/decorators'; -import { IIconLabelValueOptions, IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; -import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { isDark } from 'vs/platform/theme/common/theme'; -import { URI } from 'vs/base/common/uri'; -import { quickInputButtonToAction } from 'vs/platform/quickinput/browser/quickInputUtils'; -import { Lazy } from 'vs/base/common/lazy'; -import { IParsedLabelWithIcons, getCodiconAriaLabel, matchesFuzzyIconAware, parseLabelWithIcons } from 'vs/base/common/iconLabels'; -import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; -import { compareAnything } from 'vs/base/common/comparers'; -import { ltrim } from 'vs/base/common/strings'; -import { RenderIndentGuides } from 'vs/base/browser/ui/tree/abstractTree'; -import { ThrottledDelayer } from 'vs/base/common/async'; -import { isCancellationError } from 'vs/base/common/errors'; -import type { IHoverWidget, IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { observableValue, observableValueOpts, transaction } from 'vs/base/common/observable'; -import { equals } from 'vs/base/common/arrays'; +import * as dom from '../../../base/browser/dom.js'; +import { Emitter, Event, EventBufferer, IValueWithChangeEvent } from '../../../base/common/event.js'; +import { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js'; +import { IListVirtualDelegate } from '../../../base/browser/ui/list/list.js'; +import { IObjectTreeElement, ITreeNode, ITreeRenderer, TreeVisibility } from '../../../base/browser/ui/tree/tree.js'; +import { localize } from '../../../nls.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { WorkbenchObjectTree } from '../../list/browser/listService.js'; +import { IThemeService } from '../../theme/common/themeService.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { IQuickPickItem, IQuickPickItemButtonEvent, IQuickPickSeparator, IQuickPickSeparatorButtonEvent, QuickPickItem, QuickPickFocus } from '../common/quickInput.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IMatch } from '../../../base/common/filters.js'; +import { IListAccessibilityProvider, IListStyles } from '../../../base/browser/ui/list/listWidget.js'; +import { AriaRole } from '../../../base/browser/ui/aria/aria.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { OS } from '../../../base/common/platform.js'; +import { memoize } from '../../../base/common/decorators.js'; +import { IIconLabelValueOptions, IconLabel } from '../../../base/browser/ui/iconLabel/iconLabel.js'; +import { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { isDark } from '../../theme/common/theme.js'; +import { URI } from '../../../base/common/uri.js'; +import { quickInputButtonToAction } from './quickInputUtils.js'; +import { Lazy } from '../../../base/common/lazy.js'; +import { IParsedLabelWithIcons, getCodiconAriaLabel, matchesFuzzyIconAware, parseLabelWithIcons } from '../../../base/common/iconLabels.js'; +import { HoverPosition } from '../../../base/browser/ui/hover/hoverWidget.js'; +import { compareAnything } from '../../../base/common/comparers.js'; +import { ltrim } from '../../../base/common/strings.js'; +import { RenderIndentGuides } from '../../../base/browser/ui/tree/abstractTree.js'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import type { IHoverWidget, IManagedHoverTooltipMarkdownString } from '../../../base/browser/ui/hover/hover.js'; +import { IAccessibilityService } from '../../accessibility/common/accessibility.js'; +import { observableValue, observableValueOpts, transaction } from '../../../base/common/observable.js'; +import { equals } from '../../../base/common/arrays.js'; const $ = dom.$; diff --git a/src/vs/platform/quickinput/browser/quickInputUtils.ts b/src/vs/platform/quickinput/browser/quickInputUtils.ts index cfa7e231a..cbb78a528 100644 --- a/src/vs/platform/quickinput/browser/quickInputUtils.ts +++ b/src/vs/platform/quickinput/browser/quickInputUtils.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { DomEmitter } from 'vs/base/browser/event'; -import { Event } from 'vs/base/common/event'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { Gesture, EventType as GestureEventType } from 'vs/base/browser/touch'; -import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; -import { IdGenerator } from 'vs/base/common/idGenerator'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { parseLinkedText } from 'vs/base/common/linkedText'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./media/quickInput'; -import { localize } from 'vs/nls'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IQuickInputButton } from 'vs/platform/quickinput/common/quickInput'; -import { IAction } from 'vs/base/common/actions'; +import * as dom from '../../../base/browser/dom.js'; +import { DomEmitter } from '../../../base/browser/event.js'; +import { Event } from '../../../base/common/event.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { Gesture, EventType as GestureEventType } from '../../../base/browser/touch.js'; +import { renderLabelWithIcons } from '../../../base/browser/ui/iconLabel/iconLabels.js'; +import { IdGenerator } from '../../../base/common/idGenerator.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { parseLinkedText } from '../../../base/common/linkedText.js'; +import { URI } from '../../../base/common/uri.js'; +import './media/quickInput.css'; +import { localize } from '../../../nls.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { IQuickInputButton } from '../common/quickInput.js'; +import { IAction } from '../../../base/common/actions.js'; const iconPathToClass: Record = {}; const iconClassGenerator = new IdGenerator('quick-input-button-icon-'); diff --git a/src/vs/platform/quickinput/browser/quickPickPin.ts b/src/vs/platform/quickinput/browser/quickPickPin.ts index 7ab79c54f..e7c2cb9ad 100644 --- a/src/vs/platform/quickinput/browser/quickPickPin.ts +++ b/src/vs/platform/quickinput/browser/quickPickPin.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { localize } from 'vs/nls'; -import { IQuickPick, IQuickPickItem, QuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; +import { Codicon } from '../../../base/common/codicons.js'; +import { localize } from '../../../nls.js'; +import { IQuickPick, IQuickPickItem, QuickPickItem } from '../common/quickInput.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; const pinButtonClass = ThemeIcon.asClassName(Codicon.pin); const pinnedButtonClass = ThemeIcon.asClassName(Codicon.pinned); diff --git a/src/vs/platform/quickinput/common/quickAccess.ts b/src/vs/platform/quickinput/common/quickAccess.ts index 987571327..ad4a674c5 100644 --- a/src/vs/platform/quickinput/common/quickAccess.ts +++ b/src/vs/platform/quickinput/common/quickAccess.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ItemActivation, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, QuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { coalesce } from '../../../base/common/arrays.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ItemActivation, IQuickNavigateConfiguration, IQuickPick, IQuickPickItem, QuickPickItem } from './quickInput.js'; +import { Registry } from '../../registry/common/platform.js'; /** * Provider specific options for this particular showing of the diff --git a/src/vs/platform/quickinput/common/quickInput.ts b/src/vs/platform/quickinput/common/quickInput.ts index a3b26fd55..8f2e1c0ac 100644 --- a/src/vs/platform/quickinput/common/quickInput.ts +++ b/src/vs/platform/quickinput/common/quickInput.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IQuickAccessController } from 'vs/platform/quickinput/common/quickAccess'; -import { IMatch } from 'vs/base/common/filters'; -import { IItemAccessor } from 'vs/base/common/fuzzyScorer'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IQuickAccessController } from './quickAccess.js'; +import { IMatch } from '../../../base/common/filters.js'; +import { IItemAccessor } from '../../../base/common/fuzzyScorer.js'; +import { ResolvedKeybinding } from '../../../base/common/keybindings.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; export interface IQuickPickItemHighlights { label?: IMatch[]; diff --git a/src/vs/platform/quickinput/test/browser/quickinput.test.ts b/src/vs/platform/quickinput/test/browser/quickinput.test.ts index 328c43d72..f33759e20 100644 --- a/src/vs/platform/quickinput/test/browser/quickinput.test.ts +++ b/src/vs/platform/quickinput/test/browser/quickinput.test.ts @@ -4,36 +4,36 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { unthemedInboxStyles } from 'vs/base/browser/ui/inputbox/inputBox'; -import { unthemedButtonStyles } from 'vs/base/browser/ui/button/button'; -import { unthemedListStyles } from 'vs/base/browser/ui/list/listWidget'; -import { unthemedToggleStyles } from 'vs/base/browser/ui/toggle/toggle'; -import { Event } from 'vs/base/common/event'; -import { raceTimeout } from 'vs/base/common/async'; -import { unthemedCountStyles } from 'vs/base/browser/ui/countBadge/countBadge'; -import { unthemedKeybindingLabelOptions } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { unthemedProgressBarOptions } from 'vs/base/browser/ui/progressbar/progressbar'; -import { QuickInputController } from 'vs/platform/quickinput/browser/quickInputController'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { mainWindow } from 'vs/base/browser/window'; -import { QuickPick } from 'vs/platform/quickinput/browser/quickInput'; -import { IQuickPickItem, ItemActivation } from 'vs/platform/quickinput/common/quickInput'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { IListService, ListService } from 'vs/platform/list/browser/listService'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService'; -import { NoMatchingKb } from 'vs/platform/keybinding/common/keybindingResolver'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ContextViewService } from 'vs/platform/contextview/browser/contextViewService'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService'; +import { unthemedInboxStyles } from '../../../../base/browser/ui/inputbox/inputBox.js'; +import { unthemedButtonStyles } from '../../../../base/browser/ui/button/button.js'; +import { unthemedListStyles } from '../../../../base/browser/ui/list/listWidget.js'; +import { unthemedToggleStyles } from '../../../../base/browser/ui/toggle/toggle.js'; +import { Event } from '../../../../base/common/event.js'; +import { raceTimeout } from '../../../../base/common/async.js'; +import { unthemedCountStyles } from '../../../../base/browser/ui/countBadge/countBadge.js'; +import { unthemedKeybindingLabelOptions } from '../../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { unthemedProgressBarOptions } from '../../../../base/browser/ui/progressbar/progressbar.js'; +import { QuickInputController } from '../../browser/quickInputController.js'; +import { TestThemeService } from '../../../theme/test/common/testThemeService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { toDisposable } from '../../../../base/common/lifecycle.js'; +import { mainWindow } from '../../../../base/browser/window.js'; +import { QuickPick } from '../../browser/quickInput.js'; +import { IQuickPickItem, ItemActivation } from '../../common/quickInput.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { IThemeService } from '../../../theme/common/themeService.js'; +import { IConfigurationService } from '../../../configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js'; +import { ILayoutService } from '../../../layout/browser/layoutService.js'; +import { IContextViewService } from '../../../contextview/browser/contextView.js'; +import { IListService, ListService } from '../../../list/browser/listService.js'; +import { IContextKeyService } from '../../../contextkey/common/contextkey.js'; +import { ContextKeyService } from '../../../contextkey/browser/contextKeyService.js'; +import { NoMatchingKb } from '../../../keybinding/common/keybindingResolver.js'; +import { IKeybindingService } from '../../../keybinding/common/keybinding.js'; +import { ContextViewService } from '../../../contextview/browser/contextViewService.js'; +import { IAccessibilityService } from '../../../accessibility/common/accessibility.js'; +import { TestAccessibilityService } from '../../../accessibility/test/common/testAccessibilityService.js'; // Sets up an `onShow` listener to allow us to wait until the quick pick is shown (useful when triggering an `accept()` right after launching a quick pick) // kick this off before you launch the picker and then await the promise returned after you launch the picker. diff --git a/src/vs/platform/registry/common/platform.ts b/src/vs/platform/registry/common/platform.ts index 99ef2e35a..b4a9bdd77 100644 --- a/src/vs/platform/registry/common/platform.ts +++ b/src/vs/platform/registry/common/platform.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as Assert from 'vs/base/common/assert'; -import * as Types from 'vs/base/common/types'; +import * as Assert from '../../../base/common/assert.js'; +import * as Types from '../../../base/common/types.js'; export interface IRegistry { diff --git a/src/vs/platform/registry/test/common/platform.test.ts b/src/vs/platform/registry/test/common/platform.test.ts index 8ec965d50..8724f5749 100644 --- a/src/vs/platform/registry/test/common/platform.test.ts +++ b/src/vs/platform/registry/test/common/platform.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { isFunction } from 'vs/base/common/types'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { isFunction } from '../../../../base/common/types.js'; +import { Registry } from '../../common/platform.js'; suite('Platform / Registry', () => { diff --git a/src/vs/platform/remote/browser/browserSocketFactory.ts b/src/vs/platform/remote/browser/browserSocketFactory.ts index e8d40cb8e..7aea76630 100644 --- a/src/vs/platform/remote/browser/browserSocketFactory.ts +++ b/src/vs/platform/remote/browser/browserSocketFactory.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ISocket, SocketCloseEvent, SocketCloseEventType, SocketDiagnostics, SocketDiagnosticsEventType } from 'vs/base/parts/ipc/common/ipc.net'; -import { ISocketFactory } from 'vs/platform/remote/common/remoteSocketFactoryService'; -import { RemoteAuthorityResolverError, RemoteAuthorityResolverErrorCode, RemoteConnectionType, WebSocketRemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { mainWindow } from 'vs/base/browser/window'; +import * as dom from '../../../base/browser/dom.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { ISocket, SocketCloseEvent, SocketCloseEventType, SocketDiagnostics, SocketDiagnosticsEventType } from '../../../base/parts/ipc/common/ipc.net.js'; +import { ISocketFactory } from '../common/remoteSocketFactoryService.js'; +import { RemoteAuthorityResolverError, RemoteAuthorityResolverErrorCode, RemoteConnectionType, WebSocketRemoteConnection } from '../common/remoteAuthorityResolver.js'; +import { mainWindow } from '../../../base/browser/window.js'; export interface IWebSocketFactory { create(url: string, debugLabel: string): IWebSocket; diff --git a/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts b/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts index 8b85c2371..ca6361ffa 100644 --- a/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts +++ b/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { mainWindow } from 'vs/base/browser/window'; -import { DeferredPromise } from 'vs/base/common/async'; -import * as errors from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { RemoteAuthorities } from 'vs/base/common/network'; -import * as performance from 'vs/base/common/performance'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { URI } from 'vs/base/common/uri'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRemoteAuthorityResolverService, IRemoteConnectionData, RemoteConnectionType, ResolvedAuthority, ResolvedOptions, ResolverResult, WebSocketRemoteConnection, getRemoteAuthorityPrefix } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { parseAuthorityWithOptionalPort } from 'vs/platform/remote/common/remoteHosts'; +import { mainWindow } from '../../../base/browser/window.js'; +import { DeferredPromise } from '../../../base/common/async.js'; +import * as errors from '../../../base/common/errors.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { RemoteAuthorities } from '../../../base/common/network.js'; +import * as performance from '../../../base/common/performance.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IRemoteAuthorityResolverService, IRemoteConnectionData, RemoteConnectionType, ResolvedAuthority, ResolvedOptions, ResolverResult, WebSocketRemoteConnection, getRemoteAuthorityPrefix } from '../common/remoteAuthorityResolver.js'; +import { parseAuthorityWithOptionalPort } from '../common/remoteHosts.js'; export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService { diff --git a/src/vs/platform/remote/common/electronRemoteResources.ts b/src/vs/platform/remote/common/electronRemoteResources.ts index a5d2f3722..e8e0fa868 100644 --- a/src/vs/platform/remote/common/electronRemoteResources.ts +++ b/src/vs/platform/remote/common/electronRemoteResources.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { UriComponents } from 'vs/base/common/uri'; -import { Client, IClientRouter, IConnectionHub } from 'vs/base/parts/ipc/common/ipc'; +import { UriComponents } from '../../../base/common/uri.js'; +import { Client, IClientRouter, IConnectionHub } from '../../../base/parts/ipc/common/ipc.js'; export const NODE_REMOTE_RESOURCE_IPC_METHOD_NAME = 'request'; diff --git a/src/vs/platform/remote/common/managedSocket.ts b/src/vs/platform/remote/common/managedSocket.ts index 0f5561726..d5d6ba751 100644 --- a/src/vs/platform/remote/common/managedSocket.ts +++ b/src/vs/platform/remote/common/managedSocket.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer, encodeBase64 } from 'vs/base/common/buffer'; -import { Emitter, Event, PauseableEmitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ISocket, SocketCloseEvent, SocketDiagnostics, SocketDiagnosticsEventType } from 'vs/base/parts/ipc/common/ipc.net'; +import { VSBuffer, encodeBase64 } from '../../../base/common/buffer.js'; +import { Emitter, Event, PauseableEmitter } from '../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { ISocket, SocketCloseEvent, SocketDiagnostics, SocketDiagnosticsEventType } from '../../../base/parts/ipc/common/ipc.net.js'; export const makeRawSocketHeaders = (path: string, query: string, deubgLabel: string) => { // https://tools.ietf.org/html/rfc6455#section-4 diff --git a/src/vs/platform/remote/common/remoteAgentConnection.ts b/src/vs/platform/remote/common/remoteAgentConnection.ts index 45ebbe8df..e89c00768 100644 --- a/src/vs/platform/remote/common/remoteAgentConnection.ts +++ b/src/vs/platform/remote/common/remoteAgentConnection.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, promiseWithResolvers } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isCancellationError, onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { RemoteAuthorities } from 'vs/base/common/network'; -import * as performance from 'vs/base/common/performance'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IIPCLogger } from 'vs/base/parts/ipc/common/ipc'; -import { Client, ISocket, PersistentProtocol, SocketCloseEventType } from 'vs/base/parts/ipc/common/ipc.net'; -import { ILogService } from 'vs/platform/log/common/log'; -import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; -import { RemoteAuthorityResolverError, RemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { IRemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; -import { ISignService } from 'vs/platform/sign/common/sign'; +import { CancelablePromise, createCancelablePromise, promiseWithResolvers } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { isCancellationError, onUnexpectedError } from '../../../base/common/errors.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { RemoteAuthorities } from '../../../base/common/network.js'; +import * as performance from '../../../base/common/performance.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IIPCLogger } from '../../../base/parts/ipc/common/ipc.js'; +import { Client, ISocket, PersistentProtocol, SocketCloseEventType } from '../../../base/parts/ipc/common/ipc.net.js'; +import { ILogService } from '../../log/common/log.js'; +import { RemoteAgentConnectionContext } from './remoteAgentEnvironment.js'; +import { RemoteAuthorityResolverError, RemoteConnection } from './remoteAuthorityResolver.js'; +import { IRemoteSocketFactoryService } from './remoteSocketFactoryService.js'; +import { ISignService } from '../../sign/common/sign.js'; const RECONNECT_TIMEOUT = 30 * 1000 /* 30s */; diff --git a/src/vs/platform/remote/common/remoteAgentEnvironment.ts b/src/vs/platform/remote/common/remoteAgentEnvironment.ts index de9a7559a..e56ea739e 100644 --- a/src/vs/platform/remote/common/remoteAgentEnvironment.ts +++ b/src/vs/platform/remote/common/remoteAgentEnvironment.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as performance from 'vs/base/common/performance'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; +import * as performance from '../../../base/common/performance.js'; +import { OperatingSystem } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; export interface IRemoteAgentEnvironment { pid: number; diff --git a/src/vs/platform/remote/common/remoteAuthorityResolver.ts b/src/vs/platform/remote/common/remoteAuthorityResolver.ts index 14aa2b1a2..938bbd80c 100644 --- a/src/vs/platform/remote/common/remoteAuthorityResolver.ts +++ b/src/vs/platform/remote/common/remoteAuthorityResolver.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ErrorNoTelemetry } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IRemoteAuthorityResolverService = createDecorator('remoteAuthorityResolverService'); diff --git a/src/vs/platform/remote/common/remoteExtensionsScanner.ts b/src/vs/platform/remote/common/remoteExtensionsScanner.ts index a26de9d17..10959aad5 100644 --- a/src/vs/platform/remote/common/remoteExtensionsScanner.ts +++ b/src/vs/platform/remote/common/remoteExtensionsScanner.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IExtensionDescription } from '../../extensions/common/extensions.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IRemoteExtensionsScannerService = createDecorator('IRemoteExtensionsScannerService'); diff --git a/src/vs/platform/remote/common/remoteHosts.ts b/src/vs/platform/remote/common/remoteHosts.ts index ccf58f9ac..9583e30f1 100644 --- a/src/vs/platform/remote/common/remoteHosts.ts +++ b/src/vs/platform/remote/common/remoteHosts.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; export function getRemoteAuthority(uri: URI): string | undefined { return uri.scheme === Schemas.vscodeRemote ? uri.authority : undefined; diff --git a/src/vs/platform/remote/common/remoteSocketFactoryService.ts b/src/vs/platform/remote/common/remoteSocketFactoryService.ts index 6d6eacfc8..4c07701d6 100644 --- a/src/vs/platform/remote/common/remoteSocketFactoryService.ts +++ b/src/vs/platform/remote/common/remoteSocketFactoryService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ISocket } from 'vs/base/parts/ipc/common/ipc.net'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { RemoteConnectionOfType, RemoteConnectionType, RemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ISocket } from '../../../base/parts/ipc/common/ipc.net.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { RemoteConnectionOfType, RemoteConnectionType, RemoteConnection } from './remoteAuthorityResolver.js'; export const IRemoteSocketFactoryService = createDecorator('remoteSocketFactoryService'); diff --git a/src/vs/platform/remote/common/sharedProcessTunnelService.ts b/src/vs/platform/remote/common/sharedProcessTunnelService.ts index 2062f774c..3b676c9cc 100644 --- a/src/vs/platform/remote/common/sharedProcessTunnelService.ts +++ b/src/vs/platform/remote/common/sharedProcessTunnelService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IAddress } from 'vs/platform/remote/common/remoteAgentConnection'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IAddress } from './remoteAgentConnection.js'; export const ISharedProcessTunnelService = createDecorator('sharedProcessTunnelService'); diff --git a/src/vs/platform/remote/electron-sandbox/electronRemoteResourceLoader.ts b/src/vs/platform/remote/electron-sandbox/electronRemoteResourceLoader.ts index 3462f2a00..e57d0122a 100644 --- a/src/vs/platform/remote/electron-sandbox/electronRemoteResourceLoader.ts +++ b/src/vs/platform/remote/electron-sandbox/electronRemoteResourceLoader.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer, encodeBase64 } from 'vs/base/common/buffer'; -import { Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { getMediaOrTextMime } from 'vs/base/common/mime'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { FileOperationError, FileOperationResult, IFileContent, IFileService } from 'vs/platform/files/common/files'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { NODE_REMOTE_RESOURCE_CHANNEL_NAME, NODE_REMOTE_RESOURCE_IPC_METHOD_NAME, NodeRemoteResourceResponse } from 'vs/platform/remote/common/electronRemoteResources'; +import { VSBuffer, encodeBase64 } from '../../../base/common/buffer.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { getMediaOrTextMime } from '../../../base/common/mime.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { FileOperationError, FileOperationResult, IFileContent, IFileService } from '../../files/common/files.js'; +import { IMainProcessService } from '../../ipc/common/mainProcessService.js'; +import { NODE_REMOTE_RESOURCE_CHANNEL_NAME, NODE_REMOTE_RESOURCE_IPC_METHOD_NAME, NodeRemoteResourceResponse } from '../common/electronRemoteResources.js'; export class ElectronRemoteResourceLoader extends Disposable { constructor( diff --git a/src/vs/platform/remote/electron-sandbox/remoteAuthorityResolverService.ts b/src/vs/platform/remote/electron-sandbox/remoteAuthorityResolverService.ts index 9948495f8..99157f24f 100644 --- a/src/vs/platform/remote/electron-sandbox/remoteAuthorityResolverService.ts +++ b/src/vs/platform/remote/electron-sandbox/remoteAuthorityResolverService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // -import { DeferredPromise } from 'vs/base/common/async'; -import * as errors from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { RemoteAuthorities } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRemoteAuthorityResolverService, IRemoteConnectionData, RemoteConnectionType, ResolvedAuthority, ResolvedOptions, ResolverResult } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { ElectronRemoteResourceLoader } from 'vs/platform/remote/electron-sandbox/electronRemoteResourceLoader'; +import { DeferredPromise } from '../../../base/common/async.js'; +import * as errors from '../../../base/common/errors.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { RemoteAuthorities } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IRemoteAuthorityResolverService, IRemoteConnectionData, RemoteConnectionType, ResolvedAuthority, ResolvedOptions, ResolverResult } from '../common/remoteAuthorityResolver.js'; +import { ElectronRemoteResourceLoader } from './electronRemoteResourceLoader.js'; export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService { diff --git a/src/vs/platform/remote/electron-sandbox/sharedProcessTunnelService.ts b/src/vs/platform/remote/electron-sandbox/sharedProcessTunnelService.ts index 725b03005..81c04b34f 100644 --- a/src/vs/platform/remote/electron-sandbox/sharedProcessTunnelService.ts +++ b/src/vs/platform/remote/electron-sandbox/sharedProcessTunnelService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerSharedProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; -import { ISharedProcessTunnelService, ipcSharedProcessTunnelChannelName } from 'vs/platform/remote/common/sharedProcessTunnelService'; +import { registerSharedProcessRemoteService } from '../../ipc/electron-sandbox/services.js'; +import { ISharedProcessTunnelService, ipcSharedProcessTunnelChannelName } from '../common/sharedProcessTunnelService.js'; registerSharedProcessRemoteService(ISharedProcessTunnelService, ipcSharedProcessTunnelChannelName); diff --git a/src/vs/platform/remote/node/nodeSocketFactory.ts b/src/vs/platform/remote/node/nodeSocketFactory.ts index 464179194..4ed634e3d 100644 --- a/src/vs/platform/remote/node/nodeSocketFactory.ts +++ b/src/vs/platform/remote/node/nodeSocketFactory.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as net from 'net'; -import { ISocket } from 'vs/base/parts/ipc/common/ipc.net'; -import { NodeSocket } from 'vs/base/parts/ipc/node/ipc.net'; -import { makeRawSocketHeaders } from 'vs/platform/remote/common/managedSocket'; -import { RemoteConnectionType, WebSocketRemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { ISocketFactory } from 'vs/platform/remote/common/remoteSocketFactoryService'; +import { ISocket } from '../../../base/parts/ipc/common/ipc.net.js'; +import { NodeSocket } from '../../../base/parts/ipc/node/ipc.net.js'; +import { makeRawSocketHeaders } from '../common/managedSocket.js'; +import { RemoteConnectionType, WebSocketRemoteConnection } from '../common/remoteAuthorityResolver.js'; +import { ISocketFactory } from '../common/remoteSocketFactoryService.js'; export const nodeSocketFactory = new class implements ISocketFactory { diff --git a/src/vs/platform/remote/test/common/remoteHosts.test.ts b/src/vs/platform/remote/test/common/remoteHosts.test.ts index ed564551d..4fe2f34e7 100644 --- a/src/vs/platform/remote/test/common/remoteHosts.test.ts +++ b/src/vs/platform/remote/test/common/remoteHosts.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { parseAuthorityWithOptionalPort, parseAuthorityWithPort } from 'vs/platform/remote/common/remoteHosts'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { parseAuthorityWithOptionalPort, parseAuthorityWithPort } from '../../common/remoteHosts.js'; suite('remoteHosts', () => { diff --git a/src/vs/platform/remote/test/electron-sandbox/remoteAuthorityResolverService.test.ts b/src/vs/platform/remote/test/electron-sandbox/remoteAuthorityResolverService.test.ts index 67790a807..ebf023ac4 100644 --- a/src/vs/platform/remote/test/electron-sandbox/remoteAuthorityResolverService.test.ts +++ b/src/vs/platform/remote/test/electron-sandbox/remoteAuthorityResolverService.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { RemoteAuthorityResolverError, RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { RemoteAuthorityResolverService } from 'vs/platform/remote/electron-sandbox/remoteAuthorityResolverService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { RemoteAuthorityResolverError, RemoteAuthorityResolverErrorCode } from '../../common/remoteAuthorityResolver.js'; +import { RemoteAuthorityResolverService } from '../../electron-sandbox/remoteAuthorityResolverService.js'; suite('RemoteAuthorityResolverService', () => { diff --git a/src/vs/platform/remoteTunnel/common/remoteTunnel.ts b/src/vs/platform/remoteTunnel/common/remoteTunnel.ts index d50077ee5..1d25eccd5 100644 --- a/src/vs/platform/remoteTunnel/common/remoteTunnel.ts +++ b/src/vs/platform/remoteTunnel/common/remoteTunnel.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Event } from 'vs/base/common/event'; -import { localize } from 'vs/nls'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { Event } from '../../../base/common/event.js'; +import { localize } from '../../../nls.js'; export interface IRemoteTunnelSession { readonly providerId: string; diff --git a/src/vs/platform/remoteTunnel/electron-sandbox/remoteTunnelService.ts b/src/vs/platform/remoteTunnel/electron-sandbox/remoteTunnelService.ts index 4d626c9de..7aa3657e2 100644 --- a/src/vs/platform/remoteTunnel/electron-sandbox/remoteTunnelService.ts +++ b/src/vs/platform/remoteTunnel/electron-sandbox/remoteTunnelService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerSharedProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; -import { IRemoteTunnelService } from 'vs/platform/remoteTunnel/common/remoteTunnel'; +import { registerSharedProcessRemoteService } from '../../ipc/electron-sandbox/services.js'; +import { IRemoteTunnelService } from '../common/remoteTunnel.js'; registerSharedProcessRemoteService(IRemoteTunnelService, 'remoteTunnel'); diff --git a/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts b/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts index d0d433a33..6c3306c01 100644 --- a/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts +++ b/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CONFIGURATION_KEY_HOST_NAME, CONFIGURATION_KEY_PREVENT_SLEEP, ConnectionInfo, IRemoteTunnelSession, IRemoteTunnelService, LOGGER_NAME, LOG_ID, TunnelStates, TunnelStatus, TunnelMode, INACTIVE_TUNNEL_MODE, ActiveTunnelMode } from 'vs/platform/remoteTunnel/common/remoteTunnel'; -import { Emitter } from 'vs/base/common/event'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILogger, ILoggerService, LogLevelToString } from 'vs/platform/log/common/log'; -import { dirname, join } from 'vs/base/common/path'; +import { CONFIGURATION_KEY_HOST_NAME, CONFIGURATION_KEY_PREVENT_SLEEP, ConnectionInfo, IRemoteTunnelSession, IRemoteTunnelService, LOGGER_NAME, LOG_ID, TunnelStates, TunnelStatus, TunnelMode, INACTIVE_TUNNEL_MODE, ActiveTunnelMode } from '../common/remoteTunnel.js'; +import { Emitter } from '../../../base/common/event.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ILogger, ILoggerService, LogLevelToString } from '../../log/common/log.js'; +import { dirname, join } from '../../../base/common/path.js'; import { ChildProcess, StdioOptions, spawn } from 'child_process'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { isMacintosh, isWindows } from 'vs/base/common/platform'; -import { CancelablePromise, createCancelablePromise, Delayer } from 'vs/base/common/async'; -import { ISharedProcessLifecycleService } from 'vs/platform/lifecycle/node/sharedProcessLifecycleService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { localize } from 'vs/nls'; +import { IProductService } from '../../product/common/productService.js'; +import { isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { CancelablePromise, createCancelablePromise, Delayer } from '../../../base/common/async.js'; +import { ISharedProcessLifecycleService } from '../../lifecycle/node/sharedProcessLifecycleService.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { localize } from '../../../nls.js'; import { hostname, homedir } from 'os'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { isString } from 'vs/base/common/types'; -import { StreamSplitter } from 'vs/base/node/nodeStreams'; -import { joinPath } from 'vs/base/common/resources'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { isString } from '../../../base/common/types.js'; +import { StreamSplitter } from '../../../base/node/nodeStreams.js'; +import { joinPath } from '../../../base/common/resources.js'; type RemoteTunnelEnablementClassification = { owner: 'aeschli'; diff --git a/src/vs/platform/request/browser/requestService.ts b/src/vs/platform/request/browser/requestService.ts deleted file mode 100644 index 78c34491f..000000000 --- a/src/vs/platform/request/browser/requestService.ts +++ /dev/null @@ -1,50 +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 { CancellationToken } from 'vs/base/common/cancellation'; -import { request } from 'vs/base/parts/request/browser/request'; -import { IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILoggerService } from 'vs/platform/log/common/log'; -import { AbstractRequestService, AuthInfo, Credentials, IRequestService } from 'vs/platform/request/common/request'; - -/** - * This service exposes the `request` API, while using the global - * or configured proxy settings. - */ -export class RequestService extends AbstractRequestService implements IRequestService { - - declare readonly _serviceBrand: undefined; - - constructor( - @IConfigurationService private readonly configurationService: IConfigurationService, - @ILoggerService loggerService: ILoggerService - ) { - super(loggerService); - } - - async request(options: IRequestOptions, token: CancellationToken): Promise { - if (!options.proxyAuthorization) { - options.proxyAuthorization = this.configurationService.getValue('http.proxyAuthorization'); - } - return this.logAndRequest('browser', options, () => request(options, token)); - } - - async resolveProxy(url: string): Promise { - return undefined; // not implemented in the web - } - - async lookupAuthorization(authInfo: AuthInfo): Promise { - return undefined; // not implemented in the web - } - - async lookupKerberosAuthorization(url: string): Promise { - return undefined; // not implemented in the web - } - - async loadCertificates(): Promise { - return []; // not implemented in the web - } -} diff --git a/src/vs/platform/request/common/request.ts b/src/vs/platform/request/common/request.ts index fb732b7f7..d012d8ed0 100644 --- a/src/vs/platform/request/common/request.ts +++ b/src/vs/platform/request/common/request.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { streamToBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { localize } from 'vs/nls'; -import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { CONTEXT_LOG_LEVEL, ILogger, ILoggerService, LogLevel, LogLevelToString } from 'vs/platform/log/common/log'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { streamToBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IHeaders, IRequestContext, IRequestOptions } from '../../../base/parts/request/common/request.js'; +import { localize } from '../../../nls.js'; +import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationRegistry } from '../../configuration/common/configurationRegistry.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { Registry } from '../../registry/common/platform.js'; export const IRequestService = createDecorator('requestService'); @@ -68,28 +68,21 @@ export abstract class AbstractRequestService extends Disposable implements IRequ declare readonly _serviceBrand: undefined; - protected readonly logger: ILogger; private counter = 0; - constructor( - loggerService: ILoggerService - ) { + constructor(protected readonly logService: ILogService) { super(); - this.logger = loggerService.createLogger('network', { - name: localize('request', "Network Requests"), - when: CONTEXT_LOG_LEVEL.isEqualTo(LogLevelToString(LogLevel.Trace)).serialize() - }); } - protected async logAndRequest(stack: string, options: IRequestOptions, request: () => Promise): Promise { - const prefix = `${stack} #${++this.counter}: ${options.url}`; - this.logger.trace(`${prefix} - begin`, options.type, new LoggableHeaders(options.headers ?? {})); + protected async logAndRequest(options: IRequestOptions, request: () => Promise): Promise { + const prefix = `[network] #${++this.counter}: ${options.url}`; + this.logService.trace(`${prefix} - begin`, options.type, new LoggableHeaders(options.headers ?? {})); try { const result = await request(); - this.logger.trace(`${prefix} - end`, options.type, result.res.statusCode, result.res.headers); + this.logService.trace(`${prefix} - end`, options.type, result.res.statusCode, result.res.headers); return result; } catch (error) { - this.logger.error(`${prefix} - error`, options.type, getErrorMessage(error)); + this.logService.error(`${prefix} - error`, options.type, getErrorMessage(error)); throw error; } } @@ -210,6 +203,12 @@ function registerProxyConfigurations(scope: ConfigurationScope): void { default: false, description: localize('systemCertificatesV2', "Controls whether experimental loading of CA certificates from the OS should be enabled. This uses a more general approach than the default implemenation."), restricted: true + }, + 'http.electronFetch': { + type: 'boolean', + default: false, + description: localize('electronFetch', "Controls whether use of Electron's fetch implementation instead of Node.js' should be enabled. All local extensions will get Electron's fetch implementation for the global fetch API."), + restricted: true } } }; diff --git a/src/vs/platform/request/common/requestIpc.ts b/src/vs/platform/request/common/requestIpc.ts index f6854f5e8..0b3aff1a8 100644 --- a/src/vs/platform/request/common/requestIpc.ts +++ b/src/vs/platform/request/common/requestIpc.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { bufferToStream, streamToBuffer, VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { AuthInfo, Credentials, IRequestService } from 'vs/platform/request/common/request'; +import { bufferToStream, streamToBuffer, VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IHeaders, IRequestContext, IRequestOptions } from '../../../base/parts/request/common/request.js'; +import { AuthInfo, Credentials, IRequestService } from './request.js'; type RequestResponse = [ { diff --git a/src/vs/platform/request/electron-main/requestMainService.ts b/src/vs/platform/request/electron-utility/requestService.ts similarity index 74% rename from src/vs/platform/request/electron-main/requestMainService.ts rename to src/vs/platform/request/electron-utility/requestService.ts index 7589efa67..f92a2450c 100644 --- a/src/vs/platform/request/electron-main/requestMainService.ts +++ b/src/vs/platform/request/electron-utility/requestService.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import { net } from 'electron'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { IRawRequestFunction, RequestService as NodeRequestService } from 'vs/platform/request/node/requestService'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IRequestContext, IRequestOptions } from '../../../base/parts/request/common/request.js'; +import { IRawRequestFunction, RequestService as NodeRequestService } from '../node/requestService.js'; function getRawRequest(options: IRequestOptions): IRawRequestFunction { return net.request as any as IRawRequestFunction; } -export class RequestMainService extends NodeRequestService { +export class RequestService extends NodeRequestService { override request(options: IRequestOptions, token: CancellationToken): Promise { return super.request({ ...(options || {}), getRawRequest, isChromiumNetwork: true }, token); diff --git a/src/vs/platform/request/node/proxy.ts b/src/vs/platform/request/node/proxy.ts index 570854b2d..5f1d40109 100644 --- a/src/vs/platform/request/node/proxy.ts +++ b/src/vs/platform/request/node/proxy.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { parse as parseUrl, Url } from 'url'; -import { isBoolean } from 'vs/base/common/types'; +import { isBoolean } from '../../../base/common/types.js'; export type Agent = any; @@ -46,18 +46,18 @@ export async function getProxyAgent(rawRequestURL: string, env: typeof process.e if (requestURL.protocol === 'http:') { // ESM-comment-begin - const mod = await import('http-proxy-agent'); + // const mod = await import('http-proxy-agent'); // ESM-comment-end // ESM-uncomment-begin - // const { default: mod } = await import('http-proxy-agent'); + const { default: mod } = await import('http-proxy-agent'); // ESM-uncomment-end return new mod.HttpProxyAgent(proxyURL, opts); } else { // ESM-comment-begin - const mod = await import('https-proxy-agent'); + // const mod = await import('https-proxy-agent'); // ESM-comment-end // ESM-uncomment-begin - // const { default: mod } = await import('https-proxy-agent'); + const { default: mod } = await import('https-proxy-agent'); // ESM-uncomment-end return new mod.HttpsProxyAgent(proxyURL, opts); } diff --git a/src/vs/platform/request/node/requestService.ts b/src/vs/platform/request/node/requestService.ts index f3c57ebbf..010acda05 100644 --- a/src/vs/platform/request/node/requestService.ts +++ b/src/vs/platform/request/node/requestService.ts @@ -6,19 +6,19 @@ import * as http from 'http'; import * as https from 'https'; import { parse as parseUrl } from 'url'; -import { Promises } from 'vs/base/common/async'; -import { streamToBufferReadableStream } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CancellationError, getErrorMessage } from 'vs/base/common/errors'; -import * as streams from 'vs/base/common/stream'; -import { isBoolean, isNumber } from 'vs/base/common/types'; -import { IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { getResolvedShellEnv } from 'vs/platform/shell/node/shellEnv'; -import { ILogService, ILoggerService } from 'vs/platform/log/common/log'; -import { AbstractRequestService, AuthInfo, Credentials, IRequestService } from 'vs/platform/request/common/request'; -import { Agent, getProxyAgent } from 'vs/platform/request/node/proxy'; +import { Promises } from '../../../base/common/async.js'; +import { streamToBufferReadableStream } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { CancellationError, getErrorMessage } from '../../../base/common/errors.js'; +import * as streams from '../../../base/common/stream.js'; +import { isBoolean, isNumber } from '../../../base/common/types.js'; +import { IRequestContext, IRequestOptions } from '../../../base/parts/request/common/request.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { getResolvedShellEnv } from '../../shell/node/shellEnv.js'; +import { ILogService } from '../../log/common/log.js'; +import { AbstractRequestService, AuthInfo, Credentials, IRequestService } from '../common/request.js'; +import { Agent, getProxyAgent } from './proxy.js'; import { createGunzip } from 'zlib'; interface IHTTPConfiguration { @@ -54,10 +54,9 @@ export class RequestService extends AbstractRequestService implements IRequestSe constructor( @IConfigurationService private readonly configurationService: IConfigurationService, @INativeEnvironmentService private readonly environmentService: INativeEnvironmentService, - @ILogService private readonly logService: ILogService, - @ILoggerService loggerService: ILoggerService + @ILogService logService: ILogService, ) { - super(loggerService); + super(logService); this.configure(); this._register(configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('http')) { @@ -103,7 +102,7 @@ export class RequestService extends AbstractRequestService implements IRequestSe }; } - return this.logAndRequest(options.isChromiumNetwork ? 'electron' : 'node', options, () => nodeRequest(options, token)); + return this.logAndRequest(options, () => nodeRequest(options, token)); } async resolveProxy(url: string): Promise { diff --git a/src/vs/platform/secrets/common/secrets.ts b/src/vs/platform/secrets/common/secrets.ts index 7bba894a9..c13e030ee 100644 --- a/src/vs/platform/secrets/common/secrets.ts +++ b/src/vs/platform/secrets/common/secrets.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SequencerByKey } from 'vs/base/common/async'; -import { IEncryptionService } from 'vs/platform/encryption/common/encryptionService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IStorageService, InMemoryStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { Emitter, Event } from 'vs/base/common/event'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { Lazy } from 'vs/base/common/lazy'; +import { SequencerByKey } from '../../../base/common/async.js'; +import { IEncryptionService } from '../../encryption/common/encryptionService.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IStorageService, InMemoryStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { ILogService } from '../../log/common/log.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { Lazy } from '../../../base/common/lazy.js'; export const ISecretStorageService = createDecorator('secretStorageService'); diff --git a/src/vs/platform/secrets/test/common/secrets.test.ts b/src/vs/platform/secrets/test/common/secrets.test.ts index 50def3a9a..e1603df79 100644 --- a/src/vs/platform/secrets/test/common/secrets.test.ts +++ b/src/vs/platform/secrets/test/common/secrets.test.ts @@ -5,11 +5,11 @@ import assert from 'assert'; import * as sinon from 'sinon'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEncryptionService, KnownStorageProvider } from 'vs/platform/encryption/common/encryptionService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { BaseSecretStorageService } from 'vs/platform/secrets/common/secrets'; -import { InMemoryStorageService } from 'vs/platform/storage/common/storage'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEncryptionService, KnownStorageProvider } from '../../../encryption/common/encryptionService.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { BaseSecretStorageService } from '../../common/secrets.js'; +import { InMemoryStorageService } from '../../../storage/common/storage.js'; class TestEncryptionService implements IEncryptionService { _serviceBrand: undefined; diff --git a/src/vs/platform/severityIcon/browser/severityIcon.ts b/src/vs/platform/severityIcon/browser/severityIcon.ts index 2ecb17404..73bfe9c2d 100644 --- a/src/vs/platform/severityIcon/browser/severityIcon.ts +++ b/src/vs/platform/severityIcon/browser/severityIcon.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/severityIcon'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import Severity from 'vs/base/common/severity'; +import './media/severityIcon.css'; +import { Codicon } from '../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import Severity from '../../../base/common/severity.js'; export namespace SeverityIcon { diff --git a/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts b/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts index 5cb80e342..054f3b741 100644 --- a/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts +++ b/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import { IpcMainEvent, MessagePortMain } from 'electron'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { Barrier, DeferredPromise } from 'vs/base/common/async'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ISharedProcessConfiguration } from 'vs/platform/sharedProcess/node/sharedProcess'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IPolicyService } from 'vs/platform/policy/common/policy'; -import { ILoggerMainService } from 'vs/platform/log/electron-main/loggerService'; -import { UtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { parseSharedProcessDebugPort } from 'vs/platform/environment/node/environmentService'; -import { assertIsDefined } from 'vs/base/common/types'; -import { SharedProcessChannelConnection, SharedProcessRawConnection, SharedProcessLifecycle } from 'vs/platform/sharedProcess/common/sharedProcess'; -import { Emitter } from 'vs/base/common/event'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { Barrier, DeferredPromise } from '../../../base/common/async.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { ISharedProcessConfiguration } from '../node/sharedProcess.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IPolicyService } from '../../policy/common/policy.js'; +import { ILoggerMainService } from '../../log/electron-main/loggerService.js'; +import { UtilityProcess } from '../../utilityProcess/electron-main/utilityProcess.js'; +import { NullTelemetryService } from '../../telemetry/common/telemetryUtils.js'; +import { parseSharedProcessDebugPort } from '../../environment/node/environmentService.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { SharedProcessChannelConnection, SharedProcessRawConnection, SharedProcessLifecycle } from '../common/sharedProcess.js'; +import { Emitter } from '../../../base/common/event.js'; export class SharedProcess extends Disposable { @@ -169,8 +169,9 @@ export class SharedProcess extends Disposable { this.utilityProcess.start({ type: 'shared-process', - entryPoint: 'vs/code/node/sharedProcess/sharedProcessMain', + entryPoint: 'vs/code/electron-utility/sharedProcess/sharedProcessMain', payload: this.createSharedProcessConfiguration(), + respondToAuthRequestsFromMainProcess: true, execArgv }); diff --git a/src/vs/platform/sharedProcess/node/sharedProcess.ts b/src/vs/platform/sharedProcess/node/sharedProcess.ts index 0c0e49c3a..d7ce3f00f 100644 --- a/src/vs/platform/sharedProcess/node/sharedProcess.ts +++ b/src/vs/platform/sharedProcess/node/sharedProcess.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { ILoggerResource, LogLevel } from 'vs/platform/log/common/log'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { PolicyDefinition, PolicyValue } from 'vs/platform/policy/common/policy'; -import { UriComponents, UriDto } from 'vs/base/common/uri'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { ILoggerResource, LogLevel } from '../../log/common/log.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { PolicyDefinition, PolicyValue } from '../../policy/common/policy.js'; +import { UriComponents, UriDto } from '../../../base/common/uri.js'; export interface ISharedProcessConfiguration { readonly machineId: string; diff --git a/src/vs/platform/shell/node/shellEnv.ts b/src/vs/platform/shell/node/shellEnv.ts index b956c37aa..2d3ef3ead 100644 --- a/src/vs/platform/shell/node/shellEnv.ts +++ b/src/vs/platform/shell/node/shellEnv.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import { spawn } from 'child_process'; -import { basename } from 'vs/base/common/path'; -import { localize } from 'vs/nls'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { CancellationError, isCancellationError } from 'vs/base/common/errors'; -import { IProcessEnvironment, isWindows, OS } from 'vs/base/common/platform'; -import { generateUuid } from 'vs/base/common/uuid'; -import { getSystemShell } from 'vs/base/node/shell'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { isLaunchedFromCli } from 'vs/platform/environment/node/argvHelper'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Promises } from 'vs/base/common/async'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { clamp } from 'vs/base/common/numbers'; +import { basename } from '../../../base/common/path.js'; +import { localize } from '../../../nls.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { CancellationError, isCancellationError } from '../../../base/common/errors.js'; +import { IProcessEnvironment, isWindows, OS } from '../../../base/common/platform.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { getSystemShell } from '../../../base/node/shell.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { isLaunchedFromCli } from '../../environment/node/argvHelper.js'; +import { ILogService } from '../../log/common/log.js'; +import { Promises } from '../../../base/common/async.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { clamp } from '../../../base/common/numbers.js'; let unixShellEnvPromise: Promise | undefined = undefined; diff --git a/src/vs/platform/sign/browser/signService.ts b/src/vs/platform/sign/browser/signService.ts index b6b08ebf4..f26215419 100644 --- a/src/vs/platform/sign/browser/signService.ts +++ b/src/vs/platform/sign/browser/signService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { importAMDNodeModule, resolveAmdNodeModulePath } from 'vs/amdX'; -import { WindowIntervalTimer } from 'vs/base/browser/dom'; -import { mainWindow } from 'vs/base/browser/window'; -import { isESM } from 'vs/base/common/amd'; -import { memoize } from 'vs/base/common/decorators'; -import { FileAccess } from 'vs/base/common/network'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { AbstractSignService, IVsdaValidator } from 'vs/platform/sign/common/abstractSignService'; -import { ISignService } from 'vs/platform/sign/common/sign'; +import { importAMDNodeModule, resolveAmdNodeModulePath } from '../../../amdX.js'; +import { WindowIntervalTimer } from '../../../base/browser/dom.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { isESM } from '../../../base/common/amd.js'; +import { memoize } from '../../../base/common/decorators.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { IProductService } from '../../product/common/productService.js'; +import { AbstractSignService, IVsdaValidator } from '../common/abstractSignService.js'; +import { ISignService } from '../common/sign.js'; declare module vsdaWeb { export function sign(salted_message: string): string; diff --git a/src/vs/platform/sign/common/abstractSignService.ts b/src/vs/platform/sign/common/abstractSignService.ts index 6f7c91ba9..b49a8ea7b 100644 --- a/src/vs/platform/sign/common/abstractSignService.ts +++ b/src/vs/platform/sign/common/abstractSignService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMessage, ISignService } from 'vs/platform/sign/common/sign'; +import { IMessage, ISignService } from './sign.js'; export interface IVsdaSigner { sign(arg: string): string; diff --git a/src/vs/platform/sign/common/sign.ts b/src/vs/platform/sign/common/sign.ts index e760b314f..c26ffad73 100644 --- a/src/vs/platform/sign/common/sign.ts +++ b/src/vs/platform/sign/common/sign.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const SIGN_SERVICE_ID = 'signService'; export const ISignService = createDecorator(SIGN_SERVICE_ID); diff --git a/src/vs/platform/sign/node/signService.ts b/src/vs/platform/sign/node/signService.ts index d1c7b1325..a89a45edc 100644 --- a/src/vs/platform/sign/node/signService.ts +++ b/src/vs/platform/sign/node/signService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { importAMDNodeModule } from 'vs/amdX'; -import { AbstractSignService, IVsdaValidator } from 'vs/platform/sign/common/abstractSignService'; -import { ISignService } from 'vs/platform/sign/common/sign'; +import { importAMDNodeModule } from '../../../amdX.js'; +import { AbstractSignService, IVsdaValidator } from '../common/abstractSignService.js'; +import { ISignService } from '../common/sign.js'; declare module vsda { // the signer is a native module that for historical reasons uses a lower case class name @@ -31,14 +31,14 @@ export class SignService extends AbstractSignService implements ISignService { private async vsda(): Promise { // ESM-uncomment-begin - // if (typeof importAMDNodeModule === 'function') { /* fixes unused import, remove me */} - // const mod = 'vsda'; - // const { default: vsda } = await import(mod); - // return vsda; + if (typeof importAMDNodeModule === 'function') { /* fixes unused import, remove me */ } + const mod = 'vsda'; + const { default: vsda } = await import(mod); + return vsda; // ESM-uncomment-end // ESM-comment-begin - return importAMDNodeModule('vsda', 'index.js'); + // return importAMDNodeModule('vsda', 'index.js'); // ESM-comment-end } } diff --git a/src/vs/platform/state/node/state.ts b/src/vs/platform/state/node/state.ts index a125c9955..d409432cf 100644 --- a/src/vs/platform/state/node/state.ts +++ b/src/vs/platform/state/node/state.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IStateReadService = createDecorator('stateReadService'); export interface IStateReadService { diff --git a/src/vs/platform/state/node/stateService.ts b/src/vs/platform/state/node/stateService.ts index 46dd2baa4..77f7c45bc 100644 --- a/src/vs/platform/state/node/stateService.ts +++ b/src/vs/platform/state/node/stateService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ThrottledDelayer } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isUndefined, isUndefinedOrNull } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateReadService, IStateService } from 'vs/platform/state/node/state'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { isUndefined, isUndefinedOrNull } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { FileOperationError, FileOperationResult, IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStateReadService, IStateService } from './state.js'; type StorageDatabase = { [key: string]: unknown }; diff --git a/src/vs/platform/state/test/node/state.test.ts b/src/vs/platform/state/test/node/state.test.ts index 4674f20a4..d9971ee56 100644 --- a/src/vs/platform/state/test/node/state.test.ts +++ b/src/vs/platform/state/test/node/state.test.ts @@ -6,18 +6,18 @@ import assert from 'assert'; import { readFileSync, promises } from 'fs'; import { tmpdir } from 'os'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { join } from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { Promises, writeFileSync } from 'vs/base/node/pfs'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { FileStorage, SaveStrategy } from 'vs/platform/state/node/stateService'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { join } from '../../../../base/common/path.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Promises, writeFileSync } from '../../../../base/node/pfs.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { flakySuite, getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../../files/node/diskFileSystemProvider.js'; +import { ILogService, NullLogService } from '../../../log/common/log.js'; +import { FileStorage, SaveStrategy } from '../../node/stateService.js'; flakySuite('StateService', () => { diff --git a/src/vs/platform/storage/common/storage.ts b/src/vs/platform/storage/common/storage.ts index fe730ff5c..b120f38a2 100644 --- a/src/vs/platform/storage/common/storage.ts +++ b/src/vs/platform/storage/common/storage.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises, RunOnceScheduler, runWhenGlobalIdle } from 'vs/base/common/async'; -import { Emitter, Event, PauseableEmitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore, dispose, MutableDisposable } from 'vs/base/common/lifecycle'; -import { mark } from 'vs/base/common/performance'; -import { isUndefinedOrNull } from 'vs/base/common/types'; -import { InMemoryStorageDatabase, IStorage, IStorageChangeEvent, Storage, StorageHint, StorageValue } from 'vs/base/parts/storage/common/storage'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { isUserDataProfile, IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Promises, RunOnceScheduler, runWhenGlobalIdle } from '../../../base/common/async.js'; +import { Emitter, Event, PauseableEmitter } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, dispose, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { mark } from '../../../base/common/performance.js'; +import { isUndefinedOrNull } from '../../../base/common/types.js'; +import { InMemoryStorageDatabase, IStorage, IStorageChangeEvent, Storage, StorageHint, StorageValue } from '../../../base/parts/storage/common/storage.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { isUserDataProfile, IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export const IS_NEW_KEY = '__$__isNewStorageMarker'; export const TARGET_KEY = '__$__targetStorageMarker'; diff --git a/src/vs/platform/storage/common/storageIpc.ts b/src/vs/platform/storage/common/storageIpc.ts index 7abbec236..117052ea2 100644 --- a/src/vs/platform/storage/common/storageIpc.ts +++ b/src/vs/platform/storage/common/storageIpc.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { UriDto } from 'vs/base/common/uri'; -import { IChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IStorageDatabase, IStorageItemsChangeEvent, IUpdateRequest } from 'vs/base/parts/storage/common/storage'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { ISerializedSingleFolderWorkspaceIdentifier, ISerializedWorkspaceIdentifier, IEmptyWorkspaceIdentifier, IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { UriDto } from '../../../base/common/uri.js'; +import { IChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IStorageDatabase, IStorageItemsChangeEvent, IUpdateRequest } from '../../../base/parts/storage/common/storage.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { ISerializedSingleFolderWorkspaceIdentifier, ISerializedWorkspaceIdentifier, IEmptyWorkspaceIdentifier, IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export type Key = string; export type Value = string; diff --git a/src/vs/platform/storage/common/storageService.ts b/src/vs/platform/storage/common/storageService.ts index 4cfe09ec6..c7181a897 100644 --- a/src/vs/platform/storage/common/storageService.ts +++ b/src/vs/platform/storage/common/storageService.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises } from 'vs/base/common/async'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { joinPath } from 'vs/base/common/resources'; -import { IStorage, Storage } from 'vs/base/parts/storage/common/storage'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IRemoteService } from 'vs/platform/ipc/common/services'; -import { AbstractStorageService, isProfileUsingDefaultStorage, StorageScope, WillSaveStateReason } from 'vs/platform/storage/common/storage'; -import { ApplicationStorageDatabaseClient, ProfileStorageDatabaseClient, WorkspaceStorageDatabaseClient } from 'vs/platform/storage/common/storageIpc'; -import { isUserDataProfile, IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Promises } from '../../../base/common/async.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { joinPath } from '../../../base/common/resources.js'; +import { IStorage, Storage } from '../../../base/parts/storage/common/storage.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IRemoteService } from '../../ipc/common/services.js'; +import { AbstractStorageService, isProfileUsingDefaultStorage, StorageScope, WillSaveStateReason } from './storage.js'; +import { ApplicationStorageDatabaseClient, ProfileStorageDatabaseClient, WorkspaceStorageDatabaseClient } from './storageIpc.js'; +import { isUserDataProfile, IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export class RemoteStorageService extends AbstractStorageService { diff --git a/src/vs/platform/storage/electron-main/storageIpc.ts b/src/vs/platform/storage/electron-main/storageIpc.ts index 95c1d083a..153856a17 100644 --- a/src/vs/platform/storage/electron-main/storageIpc.ts +++ b/src/vs/platform/storage/electron-main/storageIpc.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IBaseSerializableStorageRequest, ISerializableItemsChangeEvent, ISerializableUpdateRequest, Key, Value } from 'vs/platform/storage/common/storageIpc'; -import { IStorageChangeEvent, IStorageMain } from 'vs/platform/storage/electron-main/storageMain'; -import { IStorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { reviveIdentifier, IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ILogService } from '../../log/common/log.js'; +import { IBaseSerializableStorageRequest, ISerializableItemsChangeEvent, ISerializableUpdateRequest, Key, Value } from '../common/storageIpc.js'; +import { IStorageChangeEvent, IStorageMain } from './storageMain.js'; +import { IStorageMainService } from './storageMainService.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { reviveIdentifier, IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export class StorageDatabaseChannel extends Disposable implements IServerChannel { diff --git a/src/vs/platform/storage/electron-main/storageMain.ts b/src/vs/platform/storage/electron-main/storageMain.ts index 8d6d1b539..8c945fe60 100644 --- a/src/vs/platform/storage/electron-main/storageMain.ts +++ b/src/vs/platform/storage/electron-main/storageMain.ts @@ -4,24 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; -import { top } from 'vs/base/common/arrays'; -import { DeferredPromise } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { join } from 'vs/base/common/path'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { URI } from 'vs/base/common/uri'; -import { Promises } from 'vs/base/node/pfs'; -import { InMemoryStorageDatabase, IStorage, Storage, StorageHint, StorageState } from 'vs/base/parts/storage/common/storage'; -import { ISQLiteStorageDatabaseLoggingOptions, SQLiteStorageDatabase } from 'vs/base/parts/storage/node/storage'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService, LogLevel } from 'vs/platform/log/common/log'; -import { IS_NEW_KEY } from 'vs/platform/storage/common/storage'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { currentSessionDateStorageKey, firstSessionDateStorageKey, lastSessionDateStorageKey } from 'vs/platform/telemetry/common/telemetry'; -import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { Schemas } from 'vs/base/common/network'; +import { top } from '../../../base/common/arrays.js'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { join } from '../../../base/common/path.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { URI } from '../../../base/common/uri.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { InMemoryStorageDatabase, IStorage, Storage, StorageHint, StorageState } from '../../../base/parts/storage/common/storage.js'; +import { ISQLiteStorageDatabaseLoggingOptions, SQLiteStorageDatabase } from '../../../base/parts/storage/node/storage.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILogService, LogLevel } from '../../log/common/log.js'; +import { IS_NEW_KEY } from '../common/storage.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { currentSessionDateStorageKey, firstSessionDateStorageKey, lastSessionDateStorageKey } from '../../telemetry/common/telemetry.js'; +import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { Schemas } from '../../../base/common/network.js'; export interface IStorageMainOptions { diff --git a/src/vs/platform/storage/electron-main/storageMainService.ts b/src/vs/platform/storage/electron-main/storageMainService.ts index 569327c09..94664c7ea 100644 --- a/src/vs/platform/storage/electron-main/storageMainService.ts +++ b/src/vs/platform/storage/electron-main/storageMainService.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IStorage } from 'vs/base/parts/storage/common/storage'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AbstractStorageService, isProfileUsingDefaultStorage, IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ApplicationStorageMain, ProfileStorageMain, InMemoryStorageMain, IStorageMain, IStorageMainOptions, WorkspaceStorageMain, IStorageChangeEvent } from 'vs/platform/storage/electron-main/storageMain'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { Schemas } from 'vs/base/common/network'; +import { URI } from '../../../base/common/uri.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IStorage } from '../../../base/parts/storage/common/storage.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { AbstractStorageService, isProfileUsingDefaultStorage, IStorageService, StorageScope, StorageTarget } from '../common/storage.js'; +import { ApplicationStorageMain, ProfileStorageMain, InMemoryStorageMain, IStorageMain, IStorageMainOptions, WorkspaceStorageMain, IStorageChangeEvent } from './storageMain.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IUserDataProfilesMainService } from '../../userDataProfile/electron-main/userDataProfile.js'; +import { IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { Schemas } from '../../../base/common/network.js'; //#region Storage Main Service (intent: make application, profile and workspace storage accessible to windows from main process) diff --git a/src/vs/platform/storage/test/common/storageService.test.ts b/src/vs/platform/storage/test/common/storageService.test.ts index d781cf027..f3cb3e5c9 100644 --- a/src/vs/platform/storage/test/common/storageService.test.ts +++ b/src/vs/platform/storage/test/common/storageService.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { deepStrictEqual, ok, strictEqual } from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { InMemoryStorageService, IStorageService, IStorageTargetChangeEvent, IStorageValueChangeEvent, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { InMemoryStorageService, IStorageService, IStorageTargetChangeEvent, IStorageValueChangeEvent, StorageScope, StorageTarget } from '../../common/storage.js'; export function createSuite(params: { setup: () => Promise; teardown: (service: T) => Promise }): void { diff --git a/src/vs/platform/storage/test/electron-main/storageMainService.test.ts b/src/vs/platform/storage/test/electron-main/storageMainService.test.ts index 1455f234f..caac031d7 100644 --- a/src/vs/platform/storage/test/electron-main/storageMainService.test.ts +++ b/src/vs/platform/storage/test/electron-main/storageMainService.test.ts @@ -4,28 +4,28 @@ *--------------------------------------------------------------------------------------------*/ import { notStrictEqual, strictEqual } from 'assert'; -import { Schemas } from 'vs/base/common/network'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { SaveStrategy, StateService } from 'vs/platform/state/node/stateService'; -import { IS_NEW_KEY, StorageScope } from 'vs/platform/storage/common/storage'; -import { IStorageChangeEvent, IStorageMain, IStorageMainOptions } from 'vs/platform/storage/electron-main/storageMain'; -import { StorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { currentSessionDateStorageKey, firstSessionDateStorageKey } from 'vs/platform/telemetry/common/telemetry'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { TestLifecycleMainService } from 'vs/platform/test/electron-main/workbenchTestServices'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { Schemas } from '../../../../base/common/network.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { OPTIONS, parseArgs } from '../../../environment/node/argv.js'; +import { NativeEnvironmentService } from '../../../environment/node/environmentService.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { ILifecycleMainService } from '../../../lifecycle/electron-main/lifecycleMainService.js'; +import { NullLogService } from '../../../log/common/log.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { SaveStrategy, StateService } from '../../../state/node/stateService.js'; +import { IS_NEW_KEY, StorageScope } from '../../common/storage.js'; +import { IStorageChangeEvent, IStorageMain, IStorageMainOptions } from '../../electron-main/storageMain.js'; +import { StorageMainService } from '../../electron-main/storageMainService.js'; +import { currentSessionDateStorageKey, firstSessionDateStorageKey } from '../../../telemetry/common/telemetry.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { IUserDataProfile } from '../../../userDataProfile/common/userDataProfile.js'; +import { UserDataProfilesMainService } from '../../../userDataProfile/electron-main/userDataProfile.js'; +import { TestLifecycleMainService } from '../../../test/electron-main/workbenchTestServices.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; suite('StorageMainService', function () { diff --git a/src/vs/platform/telemetry/browser/1dsAppender.ts b/src/vs/platform/telemetry/browser/1dsAppender.ts index 2857c0308..99792303d 100644 --- a/src/vs/platform/telemetry/browser/1dsAppender.ts +++ b/src/vs/platform/telemetry/browser/1dsAppender.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AbstractOneDataSystemAppender, IAppInsightsCore } from 'vs/platform/telemetry/common/1dsAppender'; +import { AbstractOneDataSystemAppender, IAppInsightsCore } from '../common/1dsAppender.js'; export class OneDataSystemWebAppender extends AbstractOneDataSystemAppender { diff --git a/src/vs/platform/telemetry/browser/errorTelemetry.ts b/src/vs/platform/telemetry/browser/errorTelemetry.ts index 61e5836f5..964ef588d 100644 --- a/src/vs/platform/telemetry/browser/errorTelemetry.ts +++ b/src/vs/platform/telemetry/browser/errorTelemetry.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { mainWindow } from 'vs/base/browser/window'; -import { ErrorNoTelemetry } from 'vs/base/common/errors'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import BaseErrorTelemetry, { ErrorEvent } from 'vs/platform/telemetry/common/errorTelemetry'; +import { mainWindow } from '../../../base/browser/window.js'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; +import { toDisposable } from '../../../base/common/lifecycle.js'; +import BaseErrorTelemetry, { ErrorEvent } from '../common/errorTelemetry.js'; export default class ErrorTelemetry extends BaseErrorTelemetry { protected override installErrorListeners(): void { diff --git a/src/vs/platform/telemetry/common/1dsAppender.ts b/src/vs/platform/telemetry/common/1dsAppender.ts index 6585e563b..bddf9da25 100644 --- a/src/vs/platform/telemetry/common/1dsAppender.ts +++ b/src/vs/platform/telemetry/common/1dsAppender.ts @@ -5,11 +5,11 @@ import type { IExtendedConfiguration, IExtendedTelemetryItem, ITelemetryItem, ITelemetryUnloadState } from '@microsoft/1ds-core-js'; import type { IChannelConfiguration, IXHROverride, PostChannel } from '@microsoft/1ds-post-js'; -import { importAMDNodeModule } from 'vs/amdX'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { mixin } from 'vs/base/common/objects'; -import { isWeb } from 'vs/base/common/platform'; -import { ITelemetryAppender, validateTelemetryData } from 'vs/platform/telemetry/common/telemetryUtils'; +import { importAMDNodeModule } from '../../../amdX.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { mixin } from '../../../base/common/objects.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { ITelemetryAppender, validateTelemetryData } from './telemetryUtils.js'; // Interface type which is a subset of @microsoft/1ds-core-js AppInsightsCore. // Allows us to more easily build mock objects for testing as the interface is quite large and we only need a few properties. @@ -24,15 +24,15 @@ const endpointHealthUrl = 'https://mobile.events.data.microsoft.com/ping'; async function getClient(instrumentationKey: string, addInternalFlag?: boolean, xhrOverride?: IXHROverride): Promise { // ESM-comment-begin - if (isWeb) { /* fix the import warning */ } - const oneDs = await importAMDNodeModule('@microsoft/1ds-core-js', 'dist/ms.core.js'); - const postPlugin = await importAMDNodeModule('@microsoft/1ds-post-js', 'dist/ms.post.js'); + // if (isWeb) { /* fix the import warning */ } + // const oneDs = await importAMDNodeModule('@microsoft/1ds-core-js', 'dist/ms.core.js'); + // const postPlugin = await importAMDNodeModule('@microsoft/1ds-post-js', 'dist/ms.post.js'); // ESM-comment-end // ESM-uncomment-begin - // // eslint-disable-next-line local/code-amd-node-module - // const oneDs = isWeb ? await importAMDNodeModule('@microsoft/1ds-core-js', 'bundle/ms.core.min.js') : await import('@microsoft/1ds-core-js'); - // // eslint-disable-next-line local/code-amd-node-module - // const postPlugin = isWeb ? await importAMDNodeModule('@microsoft/1ds-post-js', 'bundle/ms.post.min.js'): await import('@microsoft/1ds-post-js'); + // eslint-disable-next-line local/code-amd-node-module + const oneDs = isWeb ? await importAMDNodeModule('@microsoft/1ds-core-js', 'bundle/ms.core.min.js') : await import('@microsoft/1ds-core-js'); + // eslint-disable-next-line local/code-amd-node-module + const postPlugin = isWeb ? await importAMDNodeModule('@microsoft/1ds-post-js', 'bundle/ms.post.min.js') : await import('@microsoft/1ds-post-js'); // ESM-uncomment-end const appInsightsCore = new oneDs.AppInsightsCore(); @@ -151,7 +151,7 @@ export abstract class AbstractOneDataSystemAppender implements ITelemetryAppende } catch { } } - flush(): Promise { + flush(): Promise { if (this._aiCoreOrKey) { return new Promise(resolve => { this._withAIClient((aiClient) => { diff --git a/src/vs/platform/telemetry/common/commonProperties.ts b/src/vs/platform/telemetry/common/commonProperties.ts index b649cb807..4ec0cf870 100644 --- a/src/vs/platform/telemetry/common/commonProperties.ts +++ b/src/vs/platform/telemetry/common/commonProperties.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isLinuxSnap, platform, Platform, PlatformToString } from 'vs/base/common/platform'; -import { env, platform as nodePlatform } from 'vs/base/common/process'; -import { generateUuid } from 'vs/base/common/uuid'; -import { ICommonProperties } from 'vs/platform/telemetry/common/telemetry'; +import { isLinuxSnap, platform, Platform, PlatformToString } from '../../../base/common/platform.js'; +import { env, platform as nodePlatform } from '../../../base/common/process.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { ICommonProperties } from './telemetry.js'; function getPlatformDetail(hostname: string): string | undefined { if (platform === Platform.Linux && /^penguin(\.|$)/i.test(hostname)) { diff --git a/src/vs/platform/telemetry/common/errorTelemetry.ts b/src/vs/platform/telemetry/common/errorTelemetry.ts index a872cbb4d..93216349c 100644 --- a/src/vs/platform/telemetry/common/errorTelemetry.ts +++ b/src/vs/platform/telemetry/common/errorTelemetry.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { binarySearch } from 'vs/base/common/arrays'; -import { errorHandler, ErrorNoTelemetry } from 'vs/base/common/errors'; -import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { safeStringify } from 'vs/base/common/objects'; -import { FileOperationError } from 'vs/platform/files/common/files'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { binarySearch } from '../../../base/common/arrays.js'; +import { errorHandler, ErrorNoTelemetry } from '../../../base/common/errors.js'; +import { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { safeStringify } from '../../../base/common/objects.js'; +import { FileOperationError } from '../../files/common/files.js'; +import { ITelemetryService } from './telemetry.js'; type ErrorEventFragment = { owner: 'lramos15, sbatten'; diff --git a/src/vs/platform/telemetry/common/remoteTelemetryChannel.ts b/src/vs/platform/telemetry/common/remoteTelemetryChannel.ts index 97fb3ec49..8f6e27e28 100644 --- a/src/vs/platform/telemetry/common/remoteTelemetryChannel.ts +++ b/src/vs/platform/telemetry/common/remoteTelemetryChannel.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IServerTelemetryService } from 'vs/platform/telemetry/common/serverTelemetryService'; +import { Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { TelemetryLevel } from './telemetry.js'; +import { ITelemetryAppender } from './telemetryUtils.js'; +import { IServerTelemetryService } from './serverTelemetryService.js'; export class ServerTelemetryChannel extends Disposable implements IServerChannel { constructor( diff --git a/src/vs/platform/telemetry/common/serverTelemetryService.ts b/src/vs/platform/telemetry/common/serverTelemetryService.ts index 9581af7e0..f6fc225ab 100644 --- a/src/vs/platform/telemetry/common/serverTelemetryService.ts +++ b/src/vs/platform/telemetry/common/serverTelemetryService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; -import { ITelemetryData, ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; -import { NullTelemetryServiceShape } from 'vs/platform/telemetry/common/telemetryUtils'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { refineServiceDecorator } from '../../instantiation/common/instantiation.js'; +import { IProductService } from '../../product/common/productService.js'; +import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from './gdprTypings.js'; +import { ITelemetryData, ITelemetryService, TelemetryLevel } from './telemetry.js'; +import { ITelemetryServiceConfig, TelemetryService } from './telemetryService.js'; +import { NullTelemetryServiceShape } from './telemetryUtils.js'; export interface IServerTelemetryService extends ITelemetryService { updateInjectedTelemetryLevel(telemetryLevel: TelemetryLevel): Promise; diff --git a/src/vs/platform/telemetry/common/telemetry.ts b/src/vs/platform/telemetry/common/telemetry.ts index d6b4179b7..6bfcb9159 100644 --- a/src/vs/platform/telemetry/common/telemetry.ts +++ b/src/vs/platform/telemetry/common/telemetry.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from './gdprTypings.js'; export const ITelemetryService = createDecorator('telemetryService'); diff --git a/src/vs/platform/telemetry/common/telemetryIpc.ts b/src/vs/platform/telemetry/common/telemetryIpc.ts index 2c4b9b875..64eaed7d2 100644 --- a/src/vs/platform/telemetry/common/telemetryIpc.ts +++ b/src/vs/platform/telemetry/common/telemetryIpc.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils'; +import { Event } from '../../../base/common/event.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ITelemetryAppender } from './telemetryUtils.js'; export interface ITelemetryLog { eventName: string; diff --git a/src/vs/platform/telemetry/common/telemetryLogAppender.ts b/src/vs/platform/telemetry/common/telemetryLogAppender.ts index ba49e5a64..f4a194726 100644 --- a/src/vs/platform/telemetry/common/telemetryLogAppender.ts +++ b/src/vs/platform/telemetry/common/telemetryLogAppender.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService, ILogger, ILoggerService, LogLevel } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ITelemetryAppender, isLoggingOnly, supportsTelemetry, telemetryLogId, validateTelemetryData } from 'vs/platform/telemetry/common/telemetryUtils'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { ILogService, ILogger, ILoggerService, LogLevel } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { ITelemetryAppender, isLoggingOnly, supportsTelemetry, telemetryLogId, validateTelemetryData } from './telemetryUtils.js'; export class TelemetryLogAppender extends Disposable implements ITelemetryAppender { @@ -38,8 +38,8 @@ export class TelemetryLogAppender extends Disposable implements ITelemetryAppend } } - flush(): Promise { - return Promise.resolve(undefined); + flush(): Promise { + return Promise.resolve(); } log(eventName: string, data: any): void { diff --git a/src/vs/platform/telemetry/common/telemetryService.ts b/src/vs/platform/telemetry/common/telemetryService.ts index 245bb41b5..51fbb8fa7 100644 --- a/src/vs/platform/telemetry/common/telemetryService.ts +++ b/src/vs/platform/telemetry/common/telemetryService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { mixin } from 'vs/base/common/objects'; -import { isWeb } from 'vs/base/common/platform'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; -import { ITelemetryData, ITelemetryService, TelemetryConfiguration, TelemetryLevel, TELEMETRY_CRASH_REPORTER_SETTING_ID, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SECTION_ID, TELEMETRY_SETTING_ID, ICommonProperties } from 'vs/platform/telemetry/common/telemetry'; -import { cleanData, getTelemetryLevel, ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { mixin } from '../../../base/common/objects.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { escapeRegExpCharacters } from '../../../base/common/strings.js'; +import { localize } from '../../../nls.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { ConfigurationScope, Extensions, IConfigurationRegistry } from '../../configuration/common/configurationRegistry.js'; +import product from '../../product/common/product.js'; +import { IProductService } from '../../product/common/productService.js'; +import { Registry } from '../../registry/common/platform.js'; +import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from './gdprTypings.js'; +import { ITelemetryData, ITelemetryService, TelemetryConfiguration, TelemetryLevel, TELEMETRY_CRASH_REPORTER_SETTING_ID, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SECTION_ID, TELEMETRY_SETTING_ID, ICommonProperties } from './telemetry.js'; +import { cleanData, getTelemetryLevel, ITelemetryAppender } from './telemetryUtils.js'; export interface ITelemetryServiceConfig { appenders: ITelemetryAppender[]; diff --git a/src/vs/platform/telemetry/common/telemetryUtils.ts b/src/vs/platform/telemetry/common/telemetryUtils.ts index ec72e1a08..05ca34c08 100644 --- a/src/vs/platform/telemetry/common/telemetryUtils.ts +++ b/src/vs/platform/telemetry/common/telemetryUtils.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { cloneAndChange, safeStringify } from 'vs/base/common/objects'; -import { isObject } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { getRemoteName } from 'vs/platform/remote/common/remoteHosts'; -import { verifyMicrosoftInternalDomain } from 'vs/platform/telemetry/common/commonProperties'; -import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryService, TelemetryConfiguration, TelemetryLevel, TELEMETRY_CRASH_REPORTER_SETTING_ID, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry'; +import { cloneAndChange, safeStringify } from '../../../base/common/objects.js'; +import { isObject } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IProductService } from '../../product/common/productService.js'; +import { getRemoteName } from '../../remote/common/remoteHosts.js'; +import { verifyMicrosoftInternalDomain } from './commonProperties.js'; +import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryService, TelemetryConfiguration, TelemetryLevel, TELEMETRY_CRASH_REPORTER_SETTING_ID, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SETTING_ID } from './telemetry.js'; /** * A special class used to denoting a telemetry value which should not be clean. @@ -59,10 +59,10 @@ export const extensionTelemetryLogChannelId = 'extensionTelemetryLog'; export interface ITelemetryAppender { log(eventName: string, data: any): void; - flush(): Promise; + flush(): Promise; } -export const NullAppender: ITelemetryAppender = { log: () => null, flush: () => Promise.resolve(null) }; +export const NullAppender: ITelemetryAppender = { log: () => null, flush: () => Promise.resolve(undefined) }; /* __GDPR__FRAGMENT__ diff --git a/src/vs/platform/telemetry/electron-main/telemetryUtils.ts b/src/vs/platform/telemetry/electron-main/telemetryUtils.ts index 95e993f84..bf16f18b9 100644 --- a/src/vs/platform/telemetry/electron-main/telemetryUtils.ts +++ b/src/vs/platform/telemetry/electron-main/telemetryUtils.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateService } from 'vs/platform/state/node/state'; -import { machineIdKey, sqmIdKey, devDeviceIdKey } from 'vs/platform/telemetry/common/telemetry'; -import { resolveMachineId as resolveNodeMachineId, resolveSqmId as resolveNodeSqmId, resolvedevDeviceId as resolveNodedevDeviceId } from 'vs/platform/telemetry/node/telemetryUtils'; +import { ILogService } from '../../log/common/log.js'; +import { IStateService } from '../../state/node/state.js'; +import { machineIdKey, sqmIdKey, devDeviceIdKey } from '../common/telemetry.js'; +import { resolveMachineId as resolveNodeMachineId, resolveSqmId as resolveNodeSqmId, resolvedevDeviceId as resolveNodedevDeviceId } from '../node/telemetryUtils.js'; export async function resolveMachineId(stateService: IStateService, logService: ILogService): Promise { // Call the node layers implementation to avoid code duplication diff --git a/src/vs/platform/telemetry/electron-sandbox/customEndpointTelemetryService.ts b/src/vs/platform/telemetry/electron-sandbox/customEndpointTelemetryService.ts index a54bbdf69..97a41b21d 100644 --- a/src/vs/platform/telemetry/electron-sandbox/customEndpointTelemetryService.ts +++ b/src/vs/platform/telemetry/electron-sandbox/customEndpointTelemetryService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerSharedProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; -import { ICustomEndpointTelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { registerSharedProcessRemoteService } from '../../ipc/electron-sandbox/services.js'; +import { ICustomEndpointTelemetryService } from '../common/telemetry.js'; registerSharedProcessRemoteService(ICustomEndpointTelemetryService, 'customEndpointTelemetry'); diff --git a/src/vs/platform/telemetry/node/1dsAppender.ts b/src/vs/platform/telemetry/node/1dsAppender.ts index 63805143d..08be57db2 100644 --- a/src/vs/platform/telemetry/node/1dsAppender.ts +++ b/src/vs/platform/telemetry/node/1dsAppender.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import type { IPayloadData, IXHROverride } from '@microsoft/1ds-post-js'; -import { streamToBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IRequestOptions } from 'vs/base/parts/request/common/request'; -import { IRequestService } from 'vs/platform/request/common/request'; +import { streamToBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IRequestOptions } from '../../../base/parts/request/common/request.js'; +import { IRequestService } from '../../request/common/request.js'; import * as https from 'https'; -import { AbstractOneDataSystemAppender, IAppInsightsCore } from 'vs/platform/telemetry/common/1dsAppender'; +import { AbstractOneDataSystemAppender, IAppInsightsCore } from '../common/1dsAppender.js'; type OnCompleteFunc = (status: number, headers: { [headerName: string]: string }, response?: string) => void; diff --git a/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts b/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts index d697c46cb..894ff8cca 100644 --- a/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts +++ b/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FileAccess } from 'vs/base/common/network'; -import { Client as TelemetryClient } from 'vs/base/parts/ipc/node/ipc.cp'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ILogService, ILoggerService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc'; -import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender'; -import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; +import { FileAccess } from '../../../base/common/network.js'; +import { Client as TelemetryClient } from '../../../base/parts/ipc/node/ipc.cp.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { ILogService, ILoggerService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryService } from '../common/telemetry.js'; +import { TelemetryAppenderClient } from '../common/telemetryIpc.js'; +import { TelemetryLogAppender } from '../common/telemetryLogAppender.js'; +import { TelemetryService } from '../common/telemetryService.js'; export class CustomEndpointTelemetryService implements ICustomEndpointTelemetryService { declare readonly _serviceBrand: undefined; diff --git a/src/vs/platform/telemetry/node/errorTelemetry.ts b/src/vs/platform/telemetry/node/errorTelemetry.ts index 756481431..933182f0d 100644 --- a/src/vs/platform/telemetry/node/errorTelemetry.ts +++ b/src/vs/platform/telemetry/node/errorTelemetry.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isCancellationError, isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import BaseErrorTelemetry from 'vs/platform/telemetry/common/errorTelemetry'; +import { isCancellationError, isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from '../../../base/common/errors.js'; +import BaseErrorTelemetry from '../common/errorTelemetry.js'; export default class ErrorTelemetry extends BaseErrorTelemetry { protected override installErrorListeners(): void { diff --git a/src/vs/platform/telemetry/node/telemetry.ts b/src/vs/platform/telemetry/node/telemetry.ts index d1770958d..21fc5856d 100644 --- a/src/vs/platform/telemetry/node/telemetry.ts +++ b/src/vs/platform/telemetry/node/telemetry.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; -import { join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; +import { join } from '../../../base/common/path.js'; +import { Promises } from '../../../base/node/pfs.js'; export async function buildTelemetryMessage(appRoot: string, extensionsPath?: string): Promise { const mergedTelemetry = Object.create(null); diff --git a/src/vs/platform/telemetry/node/telemetryUtils.ts b/src/vs/platform/telemetry/node/telemetryUtils.ts index 4f8fa8c8a..faca66149 100644 --- a/src/vs/platform/telemetry/node/telemetryUtils.ts +++ b/src/vs/platform/telemetry/node/telemetryUtils.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isMacintosh } from 'vs/base/common/platform'; -import { getMachineId, getSqmMachineId, getdevDeviceId } from 'vs/base/node/id'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateReadService } from 'vs/platform/state/node/state'; -import { machineIdKey, sqmIdKey, devDeviceIdKey } from 'vs/platform/telemetry/common/telemetry'; +import { isMacintosh } from '../../../base/common/platform.js'; +import { getMachineId, getSqmMachineId, getdevDeviceId } from '../../../base/node/id.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStateReadService } from '../../state/node/state.js'; +import { machineIdKey, sqmIdKey, devDeviceIdKey } from '../common/telemetry.js'; export async function resolveMachineId(stateService: IStateReadService, logService: ILogService): Promise { diff --git a/src/vs/platform/telemetry/test/browser/1dsAppender.test.ts b/src/vs/platform/telemetry/test/browser/1dsAppender.test.ts index 33a22c391..29acc962b 100644 --- a/src/vs/platform/telemetry/test/browser/1dsAppender.test.ts +++ b/src/vs/platform/telemetry/test/browser/1dsAppender.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import type { ITelemetryItem, ITelemetryUnloadState } from '@microsoft/1ds-core-js'; import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { OneDataSystemWebAppender } from 'vs/platform/telemetry/browser/1dsAppender'; -import { IAppInsightsCore } from 'vs/platform/telemetry/common/1dsAppender'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { OneDataSystemWebAppender } from '../../browser/1dsAppender.js'; +import { IAppInsightsCore } from '../../common/1dsAppender.js'; class AppInsightsCoreMock implements IAppInsightsCore { pluginVersionString: string = 'Test Runner'; diff --git a/src/vs/platform/telemetry/test/browser/telemetryService.test.ts b/src/vs/platform/telemetry/test/browser/telemetryService.test.ts index bc75667e9..08c430e02 100644 --- a/src/vs/platform/telemetry/test/browser/telemetryService.test.ts +++ b/src/vs/platform/telemetry/test/browser/telemetryService.test.ts @@ -5,17 +5,17 @@ import assert from 'assert'; import * as sinon from 'sinon'; import sinonTest from 'sinon-test'; -import { mainWindow } from 'vs/base/browser/window'; -import * as Errors from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import ErrorTelemetry from 'vs/platform/telemetry/browser/errorTelemetry'; -import { TelemetryConfiguration, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; -import { ITelemetryAppender, NullAppender } from 'vs/platform/telemetry/common/telemetryUtils'; +import { mainWindow } from '../../../../base/browser/window.js'; +import * as Errors from '../../../../base/common/errors.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TestConfigurationService } from '../../../configuration/test/common/testConfigurationService.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; +import ErrorTelemetry from '../../browser/errorTelemetry.js'; +import { TelemetryConfiguration, TelemetryLevel } from '../../common/telemetry.js'; +import { ITelemetryServiceConfig, TelemetryService } from '../../common/telemetryService.js'; +import { ITelemetryAppender, NullAppender } from '../../common/telemetryUtils.js'; const sinonTestFn = sinonTest(sinon); diff --git a/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts b/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts index 2fe9b7a64..91721dc7b 100644 --- a/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts +++ b/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Event } from 'vs/base/common/event'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { AbstractLogger, DEFAULT_LOG_LEVEL, ILogger, ILoggerService, LogLevel, NullLogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender'; +import { Event } from '../../../../base/common/event.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { AbstractLogger, DEFAULT_LOG_LEVEL, ILogger, ILoggerService, LogLevel, NullLogService } from '../../../log/common/log.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { TelemetryLogAppender } from '../../common/telemetryLogAppender.js'; class TestTelemetryLogger extends AbstractLogger implements ILogger { diff --git a/src/vs/platform/terminal/common/capabilities/bufferMarkCapability.ts b/src/vs/platform/terminal/common/capabilities/bufferMarkCapability.ts index 64399227a..dc2c88191 100644 --- a/src/vs/platform/terminal/common/capabilities/bufferMarkCapability.ts +++ b/src/vs/platform/terminal/common/capabilities/bufferMarkCapability.ts @@ -3,11 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IBufferMarkCapability, TerminalCapability, IMarkProperties } from 'vs/platform/terminal/common/capabilities/capabilities'; -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IBufferMarkCapability, TerminalCapability, IMarkProperties } from './capabilities.js'; import type { IMarker, Terminal } from '@xterm/headless'; /** diff --git a/src/vs/platform/terminal/common/capabilities/capabilities.ts b/src/vs/platform/terminal/common/capabilities/capabilities.ts index 5cd3d9be9..b6d91be14 100644 --- a/src/vs/platform/terminal/common/capabilities/capabilities.ts +++ b/src/vs/platform/terminal/common/capabilities/capabilities.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import type { IPromptInputModel, ISerializedPromptInputModel } from 'vs/platform/terminal/common/capabilities/commandDetection/promptInputModel'; -import { ICurrentPartialCommand } from 'vs/platform/terminal/common/capabilities/commandDetection/terminalCommand'; -import { ITerminalOutputMatch, ITerminalOutputMatcher } from 'vs/platform/terminal/common/terminal'; -import { ReplayEntry } from 'vs/platform/terminal/common/terminalProcess'; +import { Event } from '../../../../base/common/event.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import type { IPromptInputModel, ISerializedPromptInputModel } from './commandDetection/promptInputModel.js'; +import { ICurrentPartialCommand } from './commandDetection/terminalCommand.js'; +import { ITerminalOutputMatch, ITerminalOutputMatcher } from '../terminal.js'; +import { ReplayEntry } from '../terminalProcess.js'; interface IEvent { (listener: (arg1: T, arg2: U) => any): IDisposable; diff --git a/src/vs/platform/terminal/common/capabilities/commandDetection/promptInputModel.ts b/src/vs/platform/terminal/common/capabilities/commandDetection/promptInputModel.ts index 9e7c183bb..50ff706be 100644 --- a/src/vs/platform/terminal/common/capabilities/commandDetection/promptInputModel.ts +++ b/src/vs/platform/terminal/common/capabilities/commandDetection/promptInputModel.ts @@ -3,14 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILogService, LogLevel } from 'vs/platform/log/common/log'; -import type { ITerminalCommand } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { throttle } from 'vs/base/common/decorators'; - -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ILogService, LogLevel } from '../../../../log/common/log.js'; +import type { ITerminalCommand } from '../capabilities.js'; +import { throttle } from '../../../../../base/common/decorators.js'; + import type { Terminal, IMarker, IBufferCell, IBufferLine, IBuffer } from '@xterm/headless'; const enum PromptInputState { diff --git a/src/vs/platform/terminal/common/capabilities/commandDetection/terminalCommand.ts b/src/vs/platform/terminal/common/capabilities/commandDetection/terminalCommand.ts index b0ecb4081..fc8c7655d 100644 --- a/src/vs/platform/terminal/common/capabilities/commandDetection/terminalCommand.ts +++ b/src/vs/platform/terminal/common/capabilities/commandDetection/terminalCommand.ts @@ -3,11 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMarkProperties, IMarker, ISerializedTerminalCommand, ITerminalCommand, IXtermMarker } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { ITerminalOutputMatcher, ITerminalOutputMatch } from 'vs/platform/terminal/common/terminal'; - -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns +import { IMarkProperties, IMarker, ISerializedTerminalCommand, ITerminalCommand, IXtermMarker } from '../capabilities.js'; +import { ITerminalOutputMatcher, ITerminalOutputMatch } from '../../terminal.js'; import type { IBuffer, IBufferLine, Terminal } from '@xterm/headless'; export interface ITerminalCommandProperties { diff --git a/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.ts b/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.ts index b48cf6306..fa4f13707 100644 --- a/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.ts +++ b/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.ts @@ -3,18 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { debounce } from 'vs/base/common/decorators'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, MandatoryMutableDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { ILogService } from 'vs/platform/log/common/log'; -import { CommandInvalidationReason, ICommandDetectionCapability, ICommandInvalidationRequest, IHandleCommandOptions, ISerializedCommandDetectionCapability, ISerializedTerminalCommand, ITerminalCommand, IXtermMarker, TerminalCapability } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { ITerminalOutputMatcher } from 'vs/platform/terminal/common/terminal'; -import { ICurrentPartialCommand, PartialTerminalCommand, TerminalCommand } from 'vs/platform/terminal/common/capabilities/commandDetection/terminalCommand'; -import { PromptInputModel, type IPromptInputModel } from 'vs/platform/terminal/common/capabilities/commandDetection/promptInputModel'; - -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { debounce } from '../../../../base/common/decorators.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable, MandatoryMutableDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { ILogService } from '../../../log/common/log.js'; +import { CommandInvalidationReason, ICommandDetectionCapability, ICommandInvalidationRequest, IHandleCommandOptions, ISerializedCommandDetectionCapability, ISerializedTerminalCommand, ITerminalCommand, IXtermMarker, TerminalCapability } from './capabilities.js'; +import { ITerminalOutputMatcher } from '../terminal.js'; +import { ICurrentPartialCommand, PartialTerminalCommand, TerminalCommand } from './commandDetection/terminalCommand.js'; +import { PromptInputModel, type IPromptInputModel } from './commandDetection/promptInputModel.js'; import type { IBuffer, IDisposable, IMarker, Terminal } from '@xterm/headless'; interface ITerminalDimensions { diff --git a/src/vs/platform/terminal/common/capabilities/cwdDetectionCapability.ts b/src/vs/platform/terminal/common/capabilities/cwdDetectionCapability.ts index 96417aca6..56f52a430 100644 --- a/src/vs/platform/terminal/common/capabilities/cwdDetectionCapability.ts +++ b/src/vs/platform/terminal/common/capabilities/cwdDetectionCapability.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ICwdDetectionCapability, TerminalCapability } from 'vs/platform/terminal/common/capabilities/capabilities'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ICwdDetectionCapability, TerminalCapability } from './capabilities.js'; export class CwdDetectionCapability extends Disposable implements ICwdDetectionCapability { readonly type = TerminalCapability.CwdDetection; diff --git a/src/vs/platform/terminal/common/capabilities/naiveCwdDetectionCapability.ts b/src/vs/platform/terminal/common/capabilities/naiveCwdDetectionCapability.ts index daab3687d..1bb91995c 100644 --- a/src/vs/platform/terminal/common/capabilities/naiveCwdDetectionCapability.ts +++ b/src/vs/platform/terminal/common/capabilities/naiveCwdDetectionCapability.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { ITerminalChildProcess } from 'vs/platform/terminal/common/terminal'; -import { TerminalCapability, INaiveCwdDetectionCapability } from 'vs/platform/terminal/common/capabilities/capabilities'; +import { Emitter } from '../../../../base/common/event.js'; +import { ITerminalChildProcess } from '../terminal.js'; +import { TerminalCapability, INaiveCwdDetectionCapability } from './capabilities.js'; export class NaiveCwdDetectionCapability implements INaiveCwdDetectionCapability { constructor(private readonly _process: ITerminalChildProcess) { } diff --git a/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.ts b/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.ts index 07e2ad6b2..6c5399225 100644 --- a/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.ts +++ b/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.ts @@ -3,11 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IPartialCommandDetectionCapability, TerminalCapability } from 'vs/platform/terminal/common/capabilities/capabilities'; -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns +import { Emitter } from '../../../../base/common/event.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IPartialCommandDetectionCapability, TerminalCapability } from './capabilities.js'; import type { IMarker, Terminal } from '@xterm/headless'; const enum Constants { diff --git a/src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts b/src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts index 501ce1a78..dfa008c06 100644 --- a/src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts +++ b/src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ITerminalCapabilityImplMap, ITerminalCapabilityStore, TerminalCapability, TerminalCapabilityChangeEvent } from 'vs/platform/terminal/common/capabilities/capabilities'; +import { Emitter } from '../../../../base/common/event.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { ITerminalCapabilityImplMap, ITerminalCapabilityStore, TerminalCapability, TerminalCapabilityChangeEvent } from './capabilities.js'; export class TerminalCapabilityStore extends Disposable implements ITerminalCapabilityStore { private _map: Map = new Map(); diff --git a/src/vs/platform/terminal/common/environmentVariable.ts b/src/vs/platform/terminal/common/environmentVariable.ts index 919c5c7b0..7db558bc4 100644 --- a/src/vs/platform/terminal/common/environmentVariable.ts +++ b/src/vs/platform/terminal/common/environmentVariable.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IProcessEnvironment } from 'vs/base/common/platform'; -import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace'; +import { IProcessEnvironment } from '../../../base/common/platform.js'; +import { IWorkspaceFolderData } from '../../workspace/common/workspace.js'; export enum EnvironmentVariableMutatorType { Replace = 1, diff --git a/src/vs/platform/terminal/common/environmentVariableCollection.ts b/src/vs/platform/terminal/common/environmentVariableCollection.ts index c9dcd52c1..66115b569 100644 --- a/src/vs/platform/terminal/common/environmentVariableCollection.ts +++ b/src/vs/platform/terminal/common/environmentVariableCollection.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IProcessEnvironment, isWindows } from 'vs/base/common/platform'; -import { EnvironmentVariableMutatorType, EnvironmentVariableScope, IEnvironmentVariableCollection, IExtensionOwnedEnvironmentDescriptionMutator, IExtensionOwnedEnvironmentVariableMutator, IMergedEnvironmentVariableCollection, IMergedEnvironmentVariableCollectionDiff } from 'vs/platform/terminal/common/environmentVariable'; +import { IProcessEnvironment, isWindows } from '../../../base/common/platform.js'; +import { EnvironmentVariableMutatorType, EnvironmentVariableScope, IEnvironmentVariableCollection, IExtensionOwnedEnvironmentDescriptionMutator, IExtensionOwnedEnvironmentVariableMutator, IMergedEnvironmentVariableCollection, IMergedEnvironmentVariableCollectionDiff } from './environmentVariable.js'; type VariableResolver = (str: string) => Promise; diff --git a/src/vs/platform/terminal/common/environmentVariableShared.ts b/src/vs/platform/terminal/common/environmentVariableShared.ts index 8d9ea66fe..d782d50f3 100644 --- a/src/vs/platform/terminal/common/environmentVariableShared.ts +++ b/src/vs/platform/terminal/common/environmentVariableShared.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEnvironmentVariableCollectionDescription, IEnvironmentVariableCollection, IEnvironmentVariableMutator, ISerializableEnvironmentDescriptionMap as ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection, ISerializableEnvironmentVariableCollections } from 'vs/platform/terminal/common/environmentVariable'; +import { IEnvironmentVariableCollectionDescription, IEnvironmentVariableCollection, IEnvironmentVariableMutator, ISerializableEnvironmentDescriptionMap as ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection, ISerializableEnvironmentVariableCollections } from './environmentVariable.js'; // This file is shared between the renderer and extension host diff --git a/src/vs/platform/terminal/common/requestStore.ts b/src/vs/platform/terminal/common/requestStore.ts index 62ad1c641..d3ad4f6b6 100644 --- a/src/vs/platform/terminal/common/requestStore.ts +++ b/src/vs/platform/terminal/common/requestStore.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ILogService } from 'vs/platform/log/common/log'; +import { timeout } from '../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ILogService } from '../../log/common/log.js'; /** * A helper class to track requests that have replies. Using this it's easy to implement an event diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 62a129b80..a821d8419 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IProcessEnvironment, OperatingSystem } from 'vs/base/common/platform'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IPtyHostProcessReplayEvent, ISerializedCommandDetectionCapability, ITerminalCapabilityStore } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { ISerializableEnvironmentVariableCollections } from 'vs/platform/terminal/common/environmentVariable'; -import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { Registry } from 'vs/platform/registry/common/platform'; -import type * as performance from 'vs/base/common/performance'; -import { ILogService } from 'vs/platform/log/common/log'; +import { Event } from '../../../base/common/event.js'; +import { IProcessEnvironment, OperatingSystem } from '../../../base/common/platform.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IPtyHostProcessReplayEvent, ISerializedCommandDetectionCapability, ITerminalCapabilityStore } from './capabilities/capabilities.js'; +import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from './terminalProcess.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { ISerializableEnvironmentVariableCollections } from './environmentVariable.js'; +import { RawContextKey } from '../../contextkey/common/contextkey.js'; +import { IWorkspaceFolder } from '../../workspace/common/workspace.js'; +import { Registry } from '../../registry/common/platform.js'; +import type * as performance from '../../../base/common/performance.js'; +import { ILogService } from '../../log/common/log.js'; export const terminalTabFocusModeContextKey = new RawContextKey('terminalTabFocusMode', false, true); diff --git a/src/vs/platform/terminal/common/terminalAutoResponder.ts b/src/vs/platform/terminal/common/terminalAutoResponder.ts index 51c801d96..c8429ae4c 100644 --- a/src/vs/platform/terminal/common/terminalAutoResponder.ts +++ b/src/vs/platform/terminal/common/terminalAutoResponder.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isWindows } from 'vs/base/common/platform'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ITerminalChildProcess } from 'vs/platform/terminal/common/terminal'; +import { timeout } from '../../../base/common/async.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { isWindows } from '../../../base/common/platform.js'; +import { ILogService } from '../../log/common/log.js'; +import { ITerminalChildProcess } from './terminal.js'; /** * Tracks a terminal process's data stream and responds immediately when a matching string is diff --git a/src/vs/platform/terminal/common/terminalDataBuffering.ts b/src/vs/platform/terminal/common/terminalDataBuffering.ts index 276b01c54..980edce5d 100644 --- a/src/vs/platform/terminal/common/terminalDataBuffering.ts +++ b/src/vs/platform/terminal/common/terminalDataBuffering.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IProcessDataEvent } from 'vs/platform/terminal/common/terminal'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { IProcessDataEvent } from './terminal.js'; interface TerminalDataBuffer extends IDisposable { data: string[]; diff --git a/src/vs/platform/terminal/common/terminalEnvironment.ts b/src/vs/platform/terminal/common/terminalEnvironment.ts index 5ddf2aa71..dbc6de1d0 100644 --- a/src/vs/platform/terminal/common/terminalEnvironment.ts +++ b/src/vs/platform/terminal/common/terminalEnvironment.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OperatingSystem, OS } from 'vs/base/common/platform'; -import type { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal'; +import { OperatingSystem, OS } from '../../../base/common/platform.js'; +import type { IShellLaunchConfig } from './terminal.js'; /** * Aggressively escape non-windows paths to prepare for being sent to a shell. This will do some diff --git a/src/vs/platform/terminal/common/terminalLogService.ts b/src/vs/platform/terminal/common/terminalLogService.ts index fe5e621ff..c536b0845 100644 --- a/src/vs/platform/terminal/common/terminalLogService.ts +++ b/src/vs/platform/terminal/common/terminalLogService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; -import { localize } from 'vs/nls'; -import { ILogger, ILoggerService, LogLevel } from 'vs/platform/log/common/log'; -import { ITerminalLogService } from 'vs/platform/terminal/common/terminal'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { joinPath } from 'vs/base/common/resources'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Event } from '../../../base/common/event.js'; +import { localize } from '../../../nls.js'; +import { ILogger, ILoggerService, LogLevel } from '../../log/common/log.js'; +import { ITerminalLogService } from './terminal.js'; +import { IWorkspaceContextService } from '../../workspace/common/workspace.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { joinPath } from '../../../base/common/resources.js'; export class TerminalLogService extends Disposable implements ITerminalLogService { declare _serviceBrand: undefined; diff --git a/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts b/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts index 2c15a0964..7d8d78ba4 100644 --- a/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts +++ b/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getAllCodicons } from 'vs/base/common/codicons'; -import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; -import { OperatingSystem, Platform, PlatformToString } from 'vs/base/common/platform'; -import { localize } from 'vs/nls'; -import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IExtensionTerminalProfile, ITerminalProfile, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { createProfileSchemaEnums } from 'vs/platform/terminal/common/terminalProfiles'; +import { getAllCodicons } from '../../../base/common/codicons.js'; +import { IJSONSchema, IJSONSchemaMap } from '../../../base/common/jsonSchema.js'; +import { OperatingSystem, Platform, PlatformToString } from '../../../base/common/platform.js'; +import { localize } from '../../../nls.js'; +import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationRegistry } from '../../configuration/common/configurationRegistry.js'; +import { Registry } from '../../registry/common/platform.js'; +import { IExtensionTerminalProfile, ITerminalProfile, TerminalSettingId } from './terminal.js'; +import { createProfileSchemaEnums } from './terminalProfiles.js'; export const terminalColorSchema: IJSONSchema = { type: ['string', 'null'], diff --git a/src/vs/platform/terminal/common/terminalProcess.ts b/src/vs/platform/terminal/common/terminalProcess.ts index a56d78ee9..cb8f03bc2 100644 --- a/src/vs/platform/terminal/common/terminalProcess.ts +++ b/src/vs/platform/terminal/common/terminalProcess.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { UriComponents } from 'vs/base/common/uri'; -import { ISerializableEnvironmentVariableCollection, ISerializableEnvironmentVariableCollections } from 'vs/platform/terminal/common/environmentVariable'; -import { IFixedTerminalDimensions, IRawTerminalTabLayoutInfo, IReconnectionProperties, ITerminalEnvironment, ITerminalTabLayoutInfoById, TerminalIcon, TerminalType, TitleEventSource, WaitOnExitValue } from 'vs/platform/terminal/common/terminal'; +import { UriComponents } from '../../../base/common/uri.js'; +import { ISerializableEnvironmentVariableCollection, ISerializableEnvironmentVariableCollections } from './environmentVariable.js'; +import { IFixedTerminalDimensions, IRawTerminalTabLayoutInfo, IReconnectionProperties, ITerminalEnvironment, ITerminalTabLayoutInfoById, TerminalIcon, TerminalType, TitleEventSource, WaitOnExitValue } from './terminal.js'; export interface ISingleTerminalConfiguration { userValue: T | undefined; diff --git a/src/vs/platform/terminal/common/terminalProfiles.ts b/src/vs/platform/terminal/common/terminalProfiles.ts index 45e838f35..a41257542 100644 --- a/src/vs/platform/terminal/common/terminalProfiles.ts +++ b/src/vs/platform/terminal/common/terminalProfiles.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IExtensionTerminalProfile, ITerminalProfile, TerminalIcon } from 'vs/platform/terminal/common/terminal'; -import { ThemeIcon } from 'vs/base/common/themables'; +import { Codicon } from '../../../base/common/codicons.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IExtensionTerminalProfile, ITerminalProfile, TerminalIcon } from './terminal.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; export function createProfileSchemaEnums(detectedProfiles: ITerminalProfile[], extensionProfiles?: readonly IExtensionTerminalProfile[]): { values: (string | null)[] | undefined; diff --git a/src/vs/platform/terminal/common/terminalRecorder.ts b/src/vs/platform/terminal/common/terminalRecorder.ts index 417527a97..18026ca1a 100644 --- a/src/vs/platform/terminal/common/terminalRecorder.ts +++ b/src/vs/platform/terminal/common/terminalRecorder.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPtyHostProcessReplayEvent } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { ReplayEntry } from 'vs/platform/terminal/common/terminalProcess'; +import { IPtyHostProcessReplayEvent } from './capabilities/capabilities.js'; +import { ReplayEntry } from './terminalProcess.js'; const enum Constants { MaxRecorderDataSize = 10 * 1024 * 1024 // 10MB diff --git a/src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts b/src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts index d335e2c27..8221ad5c2 100644 --- a/src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts +++ b/src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts @@ -3,25 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IShellIntegration, ShellIntegrationStatus } from 'vs/platform/terminal/common/terminal'; -import { Disposable, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { TerminalCapabilityStore } from 'vs/platform/terminal/common/capabilities/terminalCapabilityStore'; -import { CommandDetectionCapability } from 'vs/platform/terminal/common/capabilities/commandDetectionCapability'; -import { CwdDetectionCapability } from 'vs/platform/terminal/common/capabilities/cwdDetectionCapability'; -import { IBufferMarkCapability, ICommandDetectionCapability, ICwdDetectionCapability, ISerializedCommandDetectionCapability, TerminalCapability } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { PartialCommandDetectionCapability } from 'vs/platform/terminal/common/capabilities/partialCommandDetectionCapability'; -import { ILogService } from 'vs/platform/log/common/log'; -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { Emitter } from 'vs/base/common/event'; -import { BufferMarkCapability } from 'vs/platform/terminal/common/capabilities/bufferMarkCapability'; -// Importing types is safe in any layer -// eslint-disable-next-line local/code-import-patterns +import { IShellIntegration, ShellIntegrationStatus } from '../terminal.js'; +import { Disposable, dispose, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { TerminalCapabilityStore } from '../capabilities/terminalCapabilityStore.js'; +import { CommandDetectionCapability } from '../capabilities/commandDetectionCapability.js'; +import { CwdDetectionCapability } from '../capabilities/cwdDetectionCapability.js'; +import { IBufferMarkCapability, ICommandDetectionCapability, ICwdDetectionCapability, ISerializedCommandDetectionCapability, TerminalCapability } from '../capabilities/capabilities.js'; +import { PartialCommandDetectionCapability } from '../capabilities/partialCommandDetectionCapability.js'; +import { ILogService } from '../../../log/common/log.js'; +import { ITelemetryService } from '../../../telemetry/common/telemetry.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { BufferMarkCapability } from '../capabilities/bufferMarkCapability.js'; import type { ITerminalAddon, Terminal } from '@xterm/headless'; -import { URI } from 'vs/base/common/uri'; -import { sanitizeCwd } from 'vs/platform/terminal/common/terminalEnvironment'; -import { removeAnsiEscapeCodesFromPrompt } from 'vs/base/common/strings'; +import { URI } from '../../../../base/common/uri.js'; +import { sanitizeCwd } from '../terminalEnvironment.js'; +import { removeAnsiEscapeCodesFromPrompt } from '../../../../base/common/strings.js'; /** diff --git a/src/vs/platform/terminal/electron-main/electronPtyHostStarter.ts b/src/vs/platform/terminal/electron-main/electronPtyHostStarter.ts index ebd033169..607bd9b3a 100644 --- a/src/vs/platform/terminal/electron-main/electronPtyHostStarter.ts +++ b/src/vs/platform/terminal/electron-main/electronPtyHostStarter.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { parsePtyHostDebugPort } from 'vs/platform/environment/node/environmentService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IReconnectConstants, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { IPtyHostConnection, IPtyHostStarter } from 'vs/platform/terminal/node/ptyHost'; -import { UtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; -import { Client as MessagePortClient } from 'vs/base/parts/ipc/electron-main/ipc.mp'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { parsePtyHostDebugPort } from '../../environment/node/environmentService.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { NullTelemetryService } from '../../telemetry/common/telemetryUtils.js'; +import { IReconnectConstants, TerminalSettingId } from '../common/terminal.js'; +import { IPtyHostConnection, IPtyHostStarter } from '../node/ptyHost.js'; +import { UtilityProcess } from '../../utilityProcess/electron-main/utilityProcess.js'; +import { Client as MessagePortClient } from '../../../base/parts/ipc/electron-main/ipc.mp.js'; import { IpcMainEvent } from 'electron'; -import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { Emitter } from 'vs/base/common/event'; -import { deepClone } from 'vs/base/common/objects'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { Schemas } from 'vs/base/common/network'; +import { validatedIpcMain } from '../../../base/parts/ipc/electron-main/ipcMain.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { Emitter } from '../../../base/common/event.js'; +import { deepClone } from '../../../base/common/objects.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { Schemas } from '../../../base/common/network.js'; export class ElectronPtyHostStarter extends Disposable implements IPtyHostStarter { diff --git a/src/vs/platform/terminal/node/childProcessMonitor.ts b/src/vs/platform/terminal/node/childProcessMonitor.ts index 9586353a9..40ac2d230 100644 --- a/src/vs/platform/terminal/node/childProcessMonitor.ts +++ b/src/vs/platform/terminal/node/childProcessMonitor.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { parse } from 'vs/base/common/path'; -import { debounce, throttle } from 'vs/base/common/decorators'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ProcessItem } from 'vs/base/common/processes'; -import { listProcesses } from 'vs/base/node/ps'; -import { ILogService } from 'vs/platform/log/common/log'; +import { parse } from '../../../base/common/path.js'; +import { debounce, throttle } from '../../../base/common/decorators.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ProcessItem } from '../../../base/common/processes.js'; +import { listProcesses } from '../../../base/node/ps.js'; +import { ILogService } from '../../log/common/log.js'; const enum Constants { /** diff --git a/src/vs/platform/terminal/node/heartbeatService.ts b/src/vs/platform/terminal/node/heartbeatService.ts index 3a414958a..0aa17838c 100644 --- a/src/vs/platform/terminal/node/heartbeatService.ts +++ b/src/vs/platform/terminal/node/heartbeatService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { HeartbeatConstants, IHeartbeatService } from 'vs/platform/terminal/common/terminal'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { HeartbeatConstants, IHeartbeatService } from '../common/terminal.js'; export class HeartbeatService extends Disposable implements IHeartbeatService { private readonly _onBeat = this._register(new Emitter()); diff --git a/src/vs/platform/terminal/node/nodePtyHostStarter.ts b/src/vs/platform/terminal/node/nodePtyHostStarter.ts index d5a1a4372..bc78aa5d8 100644 --- a/src/vs/platform/terminal/node/nodePtyHostStarter.ts +++ b/src/vs/platform/terminal/node/nodePtyHostStarter.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { Client, IIPCOptions } from 'vs/base/parts/ipc/node/ipc.cp'; -import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { parsePtyHostDebugPort } from 'vs/platform/environment/node/environmentService'; -import { IReconnectConstants } from 'vs/platform/terminal/common/terminal'; -import { IPtyHostConnection, IPtyHostStarter } from 'vs/platform/terminal/node/ptyHost'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { FileAccess, Schemas } from '../../../base/common/network.js'; +import { Client, IIPCOptions } from '../../../base/parts/ipc/node/ipc.cp.js'; +import { IEnvironmentService, INativeEnvironmentService } from '../../environment/common/environment.js'; +import { parsePtyHostDebugPort } from '../../environment/node/environmentService.js'; +import { IReconnectConstants } from '../common/terminal.js'; +import { IPtyHostConnection, IPtyHostStarter } from './ptyHost.js'; export class NodePtyHostStarter extends Disposable implements IPtyHostStarter { constructor( diff --git a/src/vs/platform/terminal/node/ptyHost.ts b/src/vs/platform/terminal/node/ptyHost.ts index 7c8b7318a..7900f8c8e 100644 --- a/src/vs/platform/terminal/node/ptyHost.ts +++ b/src/vs/platform/terminal/node/ptyHost.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IChannelClient } from 'vs/base/parts/ipc/common/ipc'; +import { Event } from '../../../base/common/event.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { IChannelClient } from '../../../base/parts/ipc/common/ipc.js'; export interface IPtyHostConnection { readonly client: IChannelClient; diff --git a/src/vs/platform/terminal/node/ptyHostMain.ts b/src/vs/platform/terminal/node/ptyHostMain.ts index f3693acbd..0a1d14ea0 100644 --- a/src/vs/platform/terminal/node/ptyHostMain.ts +++ b/src/vs/platform/terminal/node/ptyHostMain.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DefaultURITransformer } from 'vs/base/common/uriIpc'; -import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { Server as ChildProcessServer } from 'vs/base/parts/ipc/node/ipc.cp'; -import { Server as UtilityProcessServer } from 'vs/base/parts/ipc/node/ipc.mp'; -import { localize } from 'vs/nls'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { getLogLevel } from 'vs/platform/log/common/log'; -import { LoggerChannel } from 'vs/platform/log/common/logIpc'; -import { LogService } from 'vs/platform/log/common/logService'; -import { LoggerService } from 'vs/platform/log/node/loggerService'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IReconnectConstants, TerminalIpcChannels } from 'vs/platform/terminal/common/terminal'; -import { HeartbeatService } from 'vs/platform/terminal/node/heartbeatService'; -import { PtyService } from 'vs/platform/terminal/node/ptyService'; -import { isUtilityProcess } from 'vs/base/parts/sandbox/node/electronTypes'; -import { timeout } from 'vs/base/common/async'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { DefaultURITransformer } from '../../../base/common/uriIpc.js'; +import { ProxyChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { Server as ChildProcessServer } from '../../../base/parts/ipc/node/ipc.cp.js'; +import { Server as UtilityProcessServer } from '../../../base/parts/ipc/node/ipc.mp.js'; +import { localize } from '../../../nls.js'; +import { OPTIONS, parseArgs } from '../../environment/node/argv.js'; +import { NativeEnvironmentService } from '../../environment/node/environmentService.js'; +import { getLogLevel } from '../../log/common/log.js'; +import { LoggerChannel } from '../../log/common/logIpc.js'; +import { LogService } from '../../log/common/logService.js'; +import { LoggerService } from '../../log/node/loggerService.js'; +import product from '../../product/common/product.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IReconnectConstants, TerminalIpcChannels } from '../common/terminal.js'; +import { HeartbeatService } from './heartbeatService.js'; +import { PtyService } from './ptyService.js'; +import { isUtilityProcess } from '../../../base/parts/sandbox/node/electronTypes.js'; +import { timeout } from '../../../base/common/async.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; startPtyHost(); diff --git a/src/vs/platform/terminal/node/ptyHostService.ts b/src/vs/platform/terminal/node/ptyHostService.ts index 402dcc7b7..2c3617de9 100644 --- a/src/vs/platform/terminal/node/ptyHostService.ts +++ b/src/vs/platform/terminal/node/ptyHostService.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IProcessEnvironment, OS, OperatingSystem, isWindows } from 'vs/base/common/platform'; -import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService, ILoggerService, LogLevel } from 'vs/platform/log/common/log'; -import { RemoteLoggerChannelClient } from 'vs/platform/log/common/logIpc'; -import { getResolvedShellEnv } from 'vs/platform/shell/node/shellEnv'; -import { IPtyHostProcessReplayEvent } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { RequestStore } from 'vs/platform/terminal/common/requestStore'; -import { HeartbeatConstants, IHeartbeatService, IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IProcessReadyEvent, IPtyHostLatencyMeasurement, IPtyHostService, IPtyService, IRequestResolveVariablesEvent, ISerializedTerminalState, IShellLaunchConfig, ITerminalLaunchError, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ProcessPropertyType, TerminalIcon, TerminalIpcChannels, TerminalSettingId, TitleEventSource } from 'vs/platform/terminal/common/terminal'; -import { registerTerminalPlatformConfiguration } from 'vs/platform/terminal/common/terminalPlatformConfiguration'; -import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess'; -import { IPtyHostConnection, IPtyHostStarter } from 'vs/platform/terminal/node/ptyHost'; -import { detectAvailableProfiles } from 'vs/platform/terminal/node/terminalProfiles'; -import * as performance from 'vs/base/common/performance'; -import { getSystemShell } from 'vs/base/node/shell'; -import { StopWatch } from 'vs/base/common/stopwatch'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IProcessEnvironment, OS, OperatingSystem, isWindows } from '../../../base/common/platform.js'; +import { ProxyChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { ILogService, ILoggerService, LogLevel } from '../../log/common/log.js'; +import { RemoteLoggerChannelClient } from '../../log/common/logIpc.js'; +import { getResolvedShellEnv } from '../../shell/node/shellEnv.js'; +import { IPtyHostProcessReplayEvent } from '../common/capabilities/capabilities.js'; +import { RequestStore } from '../common/requestStore.js'; +import { HeartbeatConstants, IHeartbeatService, IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IProcessReadyEvent, IPtyHostLatencyMeasurement, IPtyHostService, IPtyService, IRequestResolveVariablesEvent, ISerializedTerminalState, IShellLaunchConfig, ITerminalLaunchError, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ProcessPropertyType, TerminalIcon, TerminalIpcChannels, TerminalSettingId, TitleEventSource } from '../common/terminal.js'; +import { registerTerminalPlatformConfiguration } from '../common/terminalPlatformConfiguration.js'; +import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from '../common/terminalProcess.js'; +import { IPtyHostConnection, IPtyHostStarter } from './ptyHost.js'; +import { detectAvailableProfiles } from './terminalProfiles.js'; +import * as performance from '../../../base/common/performance.js'; +import { getSystemShell } from '../../../base/node/shell.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; enum Constants { MaxRestarts = 5 diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index f72956370..53dcb6871 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -4,40 +4,40 @@ *--------------------------------------------------------------------------------------------*/ import { execFile, exec } from 'child_process'; -import { AutoOpenBarrier, ProcessTimeRunOnceScheduler, Promises, Queue, timeout } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IProcessEnvironment, isWindows, OperatingSystem, OS } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { getSystemShell } from 'vs/base/node/shell'; -import { ILogService, LogLevel } from 'vs/platform/log/common/log'; -import { RequestStore } from 'vs/platform/terminal/common/requestStore'; -import { IProcessDataEvent, IProcessReadyEvent, IPtyService, IRawTerminalInstanceLayoutInfo, IReconnectConstants, IShellLaunchConfig, ITerminalInstanceLayoutInfoById, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalTabLayoutInfoById, TerminalIcon, IProcessProperty, TitleEventSource, ProcessPropertyType, IProcessPropertyMap, IFixedTerminalDimensions, IPersistentTerminalProcessLaunchConfig, ICrossVersionSerializedTerminalState, ISerializedTerminalState, ITerminalProcessOptions, IPtyHostLatencyMeasurement } from 'vs/platform/terminal/common/terminal'; -import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; -import { escapeNonWindowsPath } from 'vs/platform/terminal/common/terminalEnvironment'; +import { AutoOpenBarrier, ProcessTimeRunOnceScheduler, Promises, Queue, timeout } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IProcessEnvironment, isWindows, OperatingSystem, OS } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { getSystemShell } from '../../../base/node/shell.js'; +import { ILogService, LogLevel } from '../../log/common/log.js'; +import { RequestStore } from '../common/requestStore.js'; +import { IProcessDataEvent, IProcessReadyEvent, IPtyService, IRawTerminalInstanceLayoutInfo, IReconnectConstants, IShellLaunchConfig, ITerminalInstanceLayoutInfoById, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalTabLayoutInfoById, TerminalIcon, IProcessProperty, TitleEventSource, ProcessPropertyType, IProcessPropertyMap, IFixedTerminalDimensions, IPersistentTerminalProcessLaunchConfig, ICrossVersionSerializedTerminalState, ISerializedTerminalState, ITerminalProcessOptions, IPtyHostLatencyMeasurement } from '../common/terminal.js'; +import { TerminalDataBufferer } from '../common/terminalDataBuffering.js'; +import { escapeNonWindowsPath } from '../common/terminalEnvironment.js'; import type { ISerializeOptions, SerializeAddon as XtermSerializeAddon } from '@xterm/addon-serialize'; import type { Unicode11Addon as XtermUnicode11Addon } from '@xterm/addon-unicode11'; -import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs, ITerminalTabLayoutInfoDto } from 'vs/platform/terminal/common/terminalProcess'; -import { getWindowsBuildNumber } from 'vs/platform/terminal/node/terminalEnvironment'; -import { TerminalProcess } from 'vs/platform/terminal/node/terminalProcess'; -import { localize } from 'vs/nls'; -import { ignoreProcessNames } from 'vs/platform/terminal/node/childProcessMonitor'; -import { TerminalAutoResponder } from 'vs/platform/terminal/common/terminalAutoResponder'; -import { ErrorNoTelemetry } from 'vs/base/common/errors'; -import { ShellIntegrationAddon } from 'vs/platform/terminal/common/xterm/shellIntegrationAddon'; -import { formatMessageForTerminal } from 'vs/platform/terminal/common/terminalStrings'; -import { IPtyHostProcessReplayEvent } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { IProductService } from 'vs/platform/product/common/productService'; +import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs, ITerminalTabLayoutInfoDto } from '../common/terminalProcess.js'; +import { getWindowsBuildNumber } from './terminalEnvironment.js'; +import { TerminalProcess } from './terminalProcess.js'; +import { localize } from '../../../nls.js'; +import { ignoreProcessNames } from './childProcessMonitor.js'; +import { TerminalAutoResponder } from '../common/terminalAutoResponder.js'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; +import { ShellIntegrationAddon } from '../common/xterm/shellIntegrationAddon.js'; +import { formatMessageForTerminal } from '../common/terminalStrings.js'; +import { IPtyHostProcessReplayEvent } from '../common/capabilities/capabilities.js'; +import { IProductService } from '../../product/common/productService.js'; import { join } from 'path'; -import { memoize } from 'vs/base/common/decorators'; -import * as performance from 'vs/base/common/performance'; +import { memoize } from '../../../base/common/decorators.js'; +import * as performance from '../../../base/common/performance.js'; // ESM-comment-begin -import { Terminal as XtermTerminal } from '@xterm/headless'; +// import { Terminal as XtermTerminal } from '@xterm/headless'; // ESM-comment-end // ESM-uncomment-begin -// import pkg from '@xterm/headless'; -// type XtermTerminal = pkg.Terminal; -// const { Terminal: XtermTerminal } = pkg; +import pkg from '@xterm/headless'; +type XtermTerminal = pkg.Terminal; +const { Terminal: XtermTerminal } = pkg; // ESM-uncomment-end export function traceRpc(_target: any, key: string, descriptor: any) { @@ -607,7 +607,7 @@ export class PtyService extends Disposable implements IPtyService { private _throwIfNoPty(id: number): PersistentTerminalProcess { const pty = this._ptys.get(id); if (!pty) { - throw new ErrorNoTelemetry(`Could not find pty on pty host`); + throw new ErrorNoTelemetry(`Could not find pty ${id} on pty host`); } return pty; } diff --git a/src/vs/platform/terminal/node/terminalEnvironment.ts b/src/vs/platform/terminal/node/terminalEnvironment.ts index 7349ac1e9..500d52700 100644 --- a/src/vs/platform/terminal/node/terminalEnvironment.ts +++ b/src/vs/platform/terminal/node/terminalEnvironment.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import * as os from 'os'; -import { FileAccess } from 'vs/base/common/network'; -import { getCaseInsensitive } from 'vs/base/common/objects'; -import * as path from 'vs/base/common/path'; -import { IProcessEnvironment, isMacintosh, isWindows } from 'vs/base/common/platform'; -import * as process from 'vs/base/common/process'; -import { format } from 'vs/base/common/strings'; -import { isString } from 'vs/base/common/types'; -import * as pfs from 'vs/base/node/pfs'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IShellLaunchConfig, ITerminalEnvironment, ITerminalProcessOptions } from 'vs/platform/terminal/common/terminal'; -import { EnvironmentVariableMutatorType } from 'vs/platform/terminal/common/environmentVariable'; -import { deserializeEnvironmentVariableCollections } from 'vs/platform/terminal/common/environmentVariableShared'; -import { MergedEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariableCollection'; +import { FileAccess } from '../../../base/common/network.js'; +import { getCaseInsensitive } from '../../../base/common/objects.js'; +import * as path from '../../../base/common/path.js'; +import { IProcessEnvironment, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import * as process from '../../../base/common/process.js'; +import { format } from '../../../base/common/strings.js'; +import { isString } from '../../../base/common/types.js'; +import * as pfs from '../../../base/node/pfs.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IShellLaunchConfig, ITerminalEnvironment, ITerminalProcessOptions } from '../common/terminal.js'; +import { EnvironmentVariableMutatorType } from '../common/environmentVariable.js'; +import { deserializeEnvironmentVariableCollections } from '../common/environmentVariableShared.js'; +import { MergedEnvironmentVariableCollection } from '../common/environmentVariableCollection.js'; export function getWindowsBuildNumber(): number { const osVersion = (/(\d+)\.(\d+)\.(\d+)/g).exec(os.release()); @@ -204,7 +204,7 @@ export function getShellIntegrationInjection( // The injection mechanism used for fish is to add a custom dir to $XDG_DATA_DIRS which // is similar to $ZDOTDIR in zsh but contains a list of directories to run from. const oldDataDirs = env?.XDG_DATA_DIRS ?? '/usr/local/share:/usr/share'; - const newDataDir = path.join(appRoot, 'out/vs/workbench/contrib/terminal/browser/media/fish_xdg_data'); + const newDataDir = path.join(appRoot, 'out/vs/workbench/contrib/terminal/common/scripts/fish_xdg_data'); envMixin['XDG_DATA_DIRS'] = `${oldDataDirs}:${newDataDir}`; addEnvMixinPathPrefix(options, envMixin); return { newArgs: undefined, envMixin }; @@ -254,19 +254,19 @@ export function getShellIntegrationInjection( envMixin['USER_ZDOTDIR'] = userZdotdir; const filesToCopy: IShellIntegrationConfigInjection['filesToCopy'] = []; filesToCopy.push({ - source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh'), + source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh'), dest: path.join(zdotdir, '.zshrc') }); filesToCopy.push({ - source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh'), + source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-profile.zsh'), dest: path.join(zdotdir, '.zprofile') }); filesToCopy.push({ - source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh'), + source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-env.zsh'), dest: path.join(zdotdir, '.zshenv') }); filesToCopy.push({ - source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh'), + source: path.join(appRoot, 'out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-login.zsh'), dest: path.join(zdotdir, '.zlogin') }); return { newArgs, envMixin, filesToCopy }; @@ -321,13 +321,13 @@ enum ShellIntegrationExecutable { const shellIntegrationArgs: Map = new Map(); // The try catch swallows execution policy errors in the case of the archive distributable -shellIntegrationArgs.set(ShellIntegrationExecutable.WindowsPwsh, ['-noexit', '-command', 'try { . \"{0}\\out\\vs\\workbench\\contrib\\terminal\\browser\\media\\shellIntegration.ps1\" } catch {}{1}']); -shellIntegrationArgs.set(ShellIntegrationExecutable.WindowsPwshLogin, ['-l', '-noexit', '-command', 'try { . \"{0}\\out\\vs\\workbench\\contrib\\terminal\\browser\\media\\shellIntegration.ps1\" } catch {}{1}']); -shellIntegrationArgs.set(ShellIntegrationExecutable.Pwsh, ['-noexit', '-command', '. "{0}/out/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1"{1}']); -shellIntegrationArgs.set(ShellIntegrationExecutable.PwshLogin, ['-l', '-noexit', '-command', '. "{0}/out/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1"']); +shellIntegrationArgs.set(ShellIntegrationExecutable.WindowsPwsh, ['-noexit', '-command', 'try { . \"{0}\\out\\vs\\workbench\\contrib\\terminal\\common\\scripts\\shellIntegration.ps1\" } catch {}{1}']); +shellIntegrationArgs.set(ShellIntegrationExecutable.WindowsPwshLogin, ['-l', '-noexit', '-command', 'try { . \"{0}\\out\\vs\\workbench\\contrib\\terminal\\common\\scripts\\shellIntegration.ps1\" } catch {}{1}']); +shellIntegrationArgs.set(ShellIntegrationExecutable.Pwsh, ['-noexit', '-command', '. "{0}/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1"{1}']); +shellIntegrationArgs.set(ShellIntegrationExecutable.PwshLogin, ['-l', '-noexit', '-command', '. "{0}/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1"']); shellIntegrationArgs.set(ShellIntegrationExecutable.Zsh, ['-i']); shellIntegrationArgs.set(ShellIntegrationExecutable.ZshLogin, ['-il']); -shellIntegrationArgs.set(ShellIntegrationExecutable.Bash, ['--init-file', '{0}/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh']); +shellIntegrationArgs.set(ShellIntegrationExecutable.Bash, ['--init-file', '{0}/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh']); const pwshLoginArgs = ['-login', '-l']; const shLoginArgs = ['--login', '-l']; const shInteractiveArgs = ['-i', '--interactive']; diff --git a/src/vs/platform/terminal/node/terminalProcess.ts b/src/vs/platform/terminal/node/terminalProcess.ts index acd296dfc..3435742e5 100644 --- a/src/vs/platform/terminal/node/terminalProcess.ts +++ b/src/vs/platform/terminal/node/terminalProcess.ts @@ -5,21 +5,21 @@ import * as fs from 'fs'; import { exec } from 'child_process'; -import { timeout } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import * as path from 'vs/base/common/path'; -import { IProcessEnvironment, isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ILogService, LogLevel } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { FlowControlConstants, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, IProcessProperty, IProcessPropertyMap as IProcessPropertyMap, ProcessPropertyType, TerminalShellType, IProcessReadyEvent, ITerminalProcessOptions, PosixShellType, IProcessReadyWindowsPty, GeneralShellType } from 'vs/platform/terminal/common/terminal'; -import { ChildProcessMonitor } from 'vs/platform/terminal/node/childProcessMonitor'; -import { findExecutable, getShellIntegrationInjection, getWindowsBuildNumber, IShellIntegrationConfigInjection } from 'vs/platform/terminal/node/terminalEnvironment'; -import { WindowsShellHelper } from 'vs/platform/terminal/node/windowsShellHelper'; +import { timeout } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import * as path from '../../../base/common/path.js'; +import { IProcessEnvironment, isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ILogService, LogLevel } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { FlowControlConstants, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, IProcessProperty, IProcessPropertyMap as IProcessPropertyMap, ProcessPropertyType, TerminalShellType, IProcessReadyEvent, ITerminalProcessOptions, PosixShellType, IProcessReadyWindowsPty, GeneralShellType } from '../common/terminal.js'; +import { ChildProcessMonitor } from './childProcessMonitor.js'; +import { findExecutable, getShellIntegrationInjection, getWindowsBuildNumber, IShellIntegrationConfigInjection } from './terminalEnvironment.js'; +import { WindowsShellHelper } from './windowsShellHelper.js'; import { IPty, IPtyForkOptions, IWindowsPtyForkOptions, spawn } from 'node-pty'; -import { chunkInput } from 'vs/platform/terminal/common/terminalProcess'; +import { chunkInput } from '../common/terminalProcess.js'; const enum ShutdownConstants { /** diff --git a/src/vs/platform/terminal/node/terminalProfiles.ts b/src/vs/platform/terminal/node/terminalProfiles.ts index 97a85375c..76e77d917 100644 --- a/src/vs/platform/terminal/node/terminalProfiles.ts +++ b/src/vs/platform/terminal/node/terminalProfiles.ts @@ -5,18 +5,18 @@ import * as fs from 'fs'; import * as cp from 'child_process'; -import { Codicon } from 'vs/base/common/codicons'; -import { basename, delimiter, normalize } from 'vs/base/common/path'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { isString } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import * as pfs from 'vs/base/node/pfs'; -import { enumeratePowerShellInstallations } from 'vs/base/node/powershell'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ITerminalEnvironment, ITerminalExecutable, ITerminalProfile, ITerminalProfileSource, ITerminalUnsafePath, ProfileSource, TerminalIcon, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { findExecutable, getWindowsBuildNumber } from 'vs/platform/terminal/node/terminalEnvironment'; -import { ThemeIcon } from 'vs/base/common/themables'; +import { Codicon } from '../../../base/common/codicons.js'; +import { basename, delimiter, normalize } from '../../../base/common/path.js'; +import { isLinux, isWindows } from '../../../base/common/platform.js'; +import { isString } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import * as pfs from '../../../base/node/pfs.js'; +import { enumeratePowerShellInstallations } from '../../../base/node/powershell.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { ILogService } from '../../log/common/log.js'; +import { ITerminalEnvironment, ITerminalExecutable, ITerminalProfile, ITerminalProfileSource, ITerminalUnsafePath, ProfileSource, TerminalIcon, TerminalSettingId } from '../common/terminal.js'; +import { findExecutable, getWindowsBuildNumber } from './terminalEnvironment.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; import { dirname, resolve } from 'path'; const enum Constants { diff --git a/src/vs/platform/terminal/node/windowsShellHelper.ts b/src/vs/platform/terminal/node/windowsShellHelper.ts index 8768ee754..2d63433bb 100644 --- a/src/vs/platform/terminal/node/windowsShellHelper.ts +++ b/src/vs/platform/terminal/node/windowsShellHelper.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { debounce } from 'vs/base/common/decorators'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { isWindows, platform } from 'vs/base/common/platform'; -import { GeneralShellType, TerminalShellType, WindowsShellType } from 'vs/platform/terminal/common/terminal'; +import { timeout } from '../../../base/common/async.js'; +import { debounce } from '../../../base/common/decorators.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { isWindows, platform } from '../../../base/common/platform.js'; +import { GeneralShellType, TerminalShellType, WindowsShellType } from '../common/terminal.js'; import type * as WindowsProcessTreeType from '@vscode/windows-process-tree'; export interface IWindowsShellHelper extends IDisposable { @@ -143,7 +143,7 @@ export class WindowsShellHelper extends Disposable implements IWindowsShellHelpe case 'bash.exe': case 'git-cmd.exe': return WindowsShellType.GitBash; - case 'julia.exe:': + case 'julialauncher.exe': return GeneralShellType.Julia; case 'nu.exe': return GeneralShellType.NuShell; diff --git a/src/vs/platform/terminal/test/common/capabilities/commandDetection/promptInputModel.test.ts b/src/vs/platform/terminal/test/common/capabilities/commandDetection/promptInputModel.test.ts index 667442dd8..4b7b06f41 100644 --- a/src/vs/platform/terminal/test/common/capabilities/commandDetection/promptInputModel.test.ts +++ b/src/vs/platform/terminal/test/common/capabilities/commandDetection/promptInputModel.test.ts @@ -5,14 +5,14 @@ /* eslint-disable local/code-import-patterns */ import type { Terminal } from '@xterm/xterm'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { PromptInputModel, type IPromptInputModelState } from 'vs/platform/terminal/common/capabilities/commandDetection/promptInputModel'; -import { Emitter } from 'vs/base/common/event'; -import type { ITerminalCommand } from 'vs/platform/terminal/common/capabilities/capabilities'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../../../log/common/log.js'; +import { PromptInputModel, type IPromptInputModelState } from '../../../../common/capabilities/commandDetection/promptInputModel.js'; +import { Emitter } from '../../../../../../base/common/event.js'; +import type { ITerminalCommand } from '../../../../common/capabilities/capabilities.js'; import { notDeepStrictEqual, strictEqual } from 'assert'; -import { timeout } from 'vs/base/common/async'; -import { importAMDNodeModule } from 'vs/amdX'; +import { timeout } from '../../../../../../base/common/async.js'; +import { importAMDNodeModule } from '../../../../../../amdX.js'; suite('PromptInputModel', () => { const store = ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/platform/terminal/test/common/requestStore.test.ts b/src/vs/platform/terminal/test/common/requestStore.test.ts index 7488c32cd..2431a6285 100644 --- a/src/vs/platform/terminal/test/common/requestStore.test.ts +++ b/src/vs/platform/terminal/test/common/requestStore.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { fail, strictEqual } from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ConsoleLogger, ILogService } from 'vs/platform/log/common/log'; -import { LogService } from 'vs/platform/log/common/logService'; -import { RequestStore } from 'vs/platform/terminal/common/requestStore'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { ConsoleLogger, ILogService } from '../../../log/common/log.js'; +import { LogService } from '../../../log/common/logService.js'; +import { RequestStore } from '../../common/requestStore.js'; suite('RequestStore', () => { let instantiationService: TestInstantiationService; diff --git a/src/vs/platform/terminal/test/common/terminalEnvironment.test.ts b/src/vs/platform/terminal/test/common/terminalEnvironment.test.ts index a6e8eb4f9..7effc77a2 100644 --- a/src/vs/platform/terminal/test/common/terminalEnvironment.test.ts +++ b/src/vs/platform/terminal/test/common/terminalEnvironment.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { strictEqual } from 'assert'; -import { OperatingSystem, OS } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { collapseTildePath, sanitizeCwd } from 'vs/platform/terminal/common/terminalEnvironment'; +import { OperatingSystem, OS } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { collapseTildePath, sanitizeCwd } from '../../common/terminalEnvironment.js'; suite('terminalEnvironment', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/platform/terminal/test/common/terminalProcess.test.ts b/src/vs/platform/terminal/test/common/terminalProcess.test.ts index e408d1a0d..4d4ef9770 100644 --- a/src/vs/platform/terminal/test/common/terminalProcess.test.ts +++ b/src/vs/platform/terminal/test/common/terminalProcess.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { deepStrictEqual } from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { chunkInput } from 'vs/platform/terminal/common/terminalProcess'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { chunkInput } from '../../common/terminalProcess.js'; suite('platform - terminalProcess', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/platform/terminal/test/common/terminalProfiles.test.ts b/src/vs/platform/terminal/test/common/terminalProfiles.test.ts index 789fe9821..036f9fe4b 100644 --- a/src/vs/platform/terminal/test/common/terminalProfiles.test.ts +++ b/src/vs/platform/terminal/test/common/terminalProfiles.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { deepStrictEqual } from 'assert'; -import { Codicon } from 'vs/base/common/codicons'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ITerminalProfile } from 'vs/platform/terminal/common/terminal'; -import { createProfileSchemaEnums } from 'vs/platform/terminal/common/terminalProfiles'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ITerminalProfile } from '../../common/terminal.js'; +import { createProfileSchemaEnums } from '../../common/terminalProfiles.js'; suite('terminalProfiles', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/platform/terminal/test/common/terminalRecorder.test.ts b/src/vs/platform/terminal/test/common/terminalRecorder.test.ts index 66b317c46..b8aa1203f 100644 --- a/src/vs/platform/terminal/test/common/terminalRecorder.test.ts +++ b/src/vs/platform/terminal/test/common/terminalRecorder.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ReplayEntry } from 'vs/platform/terminal/common/terminalProcess'; -import { TerminalRecorder } from 'vs/platform/terminal/common/terminalRecorder'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ReplayEntry } from '../../common/terminalProcess.js'; +import { TerminalRecorder } from '../../common/terminalRecorder.js'; async function eventsEqual(recorder: TerminalRecorder, expected: ReplayEntry[]) { const actual = (await recorder.generateReplayEvent()).events; diff --git a/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts b/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts index 06f8aeed6..6248f8300 100644 --- a/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts +++ b/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts @@ -5,12 +5,12 @@ import { deepStrictEqual, ok, strictEqual } from 'assert'; import { homedir, userInfo } from 'os'; -import { isWindows } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ITerminalProcessOptions } from 'vs/platform/terminal/common/terminal'; -import { getShellIntegrationInjection, getWindowsBuildNumber, IShellIntegrationConfigInjection } from 'vs/platform/terminal/node/terminalEnvironment'; +import { isWindows } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { ITerminalProcessOptions } from '../../common/terminal.js'; +import { getShellIntegrationInjection, getWindowsBuildNumber, IShellIntegrationConfigInjection } from '../../node/terminalEnvironment.js'; const enabledProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: true, suggestEnabled: false, nonce: '' }, windowsEnableConpty: true, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined }; const disabledProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: false, suggestEnabled: false, nonce: '' }, windowsEnableConpty: true, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined }; @@ -21,6 +21,13 @@ const logService = new NullLogService(); const productService = { applicationName: 'vscode' } as IProductService; const defaultEnvironment = {}; +function deepStrictEqualIgnoreStableVar(actual: IShellIntegrationConfigInjection | undefined, expected: IShellIntegrationConfigInjection) { + if (actual?.envMixin) { + delete actual.envMixin['VSCODE_STABLE']; + } + deepStrictEqual(actual, expected); +} + suite('platform - terminalEnvironment', () => { ensureNoDisposablesAreLeakedInTestSuite(); suite('getShellIntegrationInjection', () => { @@ -40,8 +47,8 @@ suite('platform - terminalEnvironment', () => { // These tests are only expected to work on Windows 10 build 18309 and above (getWindowsBuildNumber() < 18309 ? suite.skip : suite)('pwsh', () => { const expectedPs1 = process.platform === 'win32' - ? `try { . "${repoRoot}\\out\\vs\\workbench\\contrib\\terminal\\browser\\media\\shellIntegration.ps1" } catch {}` - : `. "${repoRoot}/out/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1"`; + ? `try { . "${repoRoot}\\out\\vs\\workbench\\contrib\\terminal\\common\\scripts\\shellIntegration.ps1" } catch {}` + : `. "${repoRoot}/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1"`; suite('should override args', () => { const enabledExpectedResult = Object.freeze({ newArgs: [ @@ -54,21 +61,21 @@ suite('platform - terminalEnvironment', () => { } }); test('when undefined, []', () => { - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: [] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: undefined }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: [] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: undefined }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); suite('when no logo', () => { test('array - case insensitive', () => { - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: ['-NoLogo'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: ['-NOLOGO'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: ['-nol'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: ['-NOL'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: ['-NoLogo'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: ['-NOLOGO'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: ['-nol'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: ['-NOL'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); test('string - case insensitive', () => { - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: '-NoLogo' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: '-NOLOGO' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: '-nol' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: '-NOL' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: '-NoLogo' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: '-NOLOGO' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: '-nol' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: '-NOL' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); }); }); @@ -85,10 +92,10 @@ suite('platform - terminalEnvironment', () => { } }); test('when array contains no logo and login', () => { - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: ['-l', '-NoLogo'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: ['-l', '-NoLogo'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); test('when string', () => { - deepStrictEqual(getShellIntegrationInjection({ executable: pwshExe, args: '-l' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: pwshExe, args: '-l' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); }); suite('should not modify args', () => { @@ -119,10 +126,10 @@ suite('platform - terminalEnvironment', () => { new RegExp(`.+\\/${username}-vscode-zsh\\/\\.zlogin`) ]; const expectedSources = [ - /.+\/out\/vs\/workbench\/contrib\/terminal\/browser\/media\/shellIntegration-rc.zsh/, - /.+\/out\/vs\/workbench\/contrib\/terminal\/browser\/media\/shellIntegration-profile.zsh/, - /.+\/out\/vs\/workbench\/contrib\/terminal\/browser\/media\/shellIntegration-env.zsh/, - /.+\/out\/vs\/workbench\/contrib\/terminal\/browser\/media\/shellIntegration-login.zsh/ + /.+\/out\/vs\/workbench\/contrib\/terminal\/common\/scripts\/shellIntegration-rc.zsh/, + /.+\/out\/vs\/workbench\/contrib\/terminal\/common\/scripts\/shellIntegration-profile.zsh/, + /.+\/out\/vs\/workbench\/contrib\/terminal\/common\/scripts\/shellIntegration-env.zsh/, + /.+\/out\/vs\/workbench\/contrib\/terminal\/common\/scripts\/shellIntegration-login.zsh/ ]; function assertIsEnabled(result: IShellIntegrationConfigInjection, globalZdotdir = homedir()) { strictEqual(Object.keys(result.envMixin!).length, 3); @@ -183,31 +190,29 @@ suite('platform - terminalEnvironment', () => { const enabledExpectedResult = Object.freeze({ newArgs: [ '--init-file', - `${repoRoot}/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh` + `${repoRoot}/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh` ], envMixin: { - VSCODE_INJECTION: '1', - VSCODE_STABLE: '0' + VSCODE_INJECTION: '1' } }); - deepStrictEqual(getShellIntegrationInjection({ executable: 'bash', args: [] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: 'bash', args: '' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); - deepStrictEqual(getShellIntegrationInjection({ executable: 'bash', args: undefined }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: 'bash', args: [] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: 'bash', args: '' }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: 'bash', args: undefined }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); suite('should set login env variable and not modify args', () => { const enabledExpectedResult = Object.freeze({ newArgs: [ '--init-file', - `${repoRoot}/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh` + `${repoRoot}/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh` ], envMixin: { VSCODE_INJECTION: '1', - VSCODE_SHELL_LOGIN: '1', - VSCODE_STABLE: '0' + VSCODE_SHELL_LOGIN: '1' } }); test('when array', () => { - deepStrictEqual(getShellIntegrationInjection({ executable: 'bash', args: ['-l'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); + deepStrictEqualIgnoreStableVar(getShellIntegrationInjection({ executable: 'bash', args: ['-l'] }, enabledProcessOptions, defaultEnvironment, logService, productService), enabledExpectedResult); }); }); suite('should not modify args', () => { diff --git a/src/vs/platform/test/electron-main/workbenchTestServices.ts b/src/vs/platform/test/electron-main/workbenchTestServices.ts index 65beabd3b..1a56d22f0 100644 --- a/src/vs/platform/test/electron-main/workbenchTestServices.ts +++ b/src/vs/platform/test/electron-main/workbenchTestServices.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises } from 'vs/base/common/async'; -import { Event, Emitter } from 'vs/base/common/event'; -import { IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { ILifecycleMainService, IRelaunchHandler, LifecycleMainPhase, ShutdownEvent, ShutdownReason } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { IStateService } from 'vs/platform/state/node/state'; -import { ICodeWindow, UnloadReason } from 'vs/platform/window/electron-main/window'; +import { Promises } from '../../../base/common/async.js'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { IAuxiliaryWindow } from '../../auxiliaryWindow/electron-main/auxiliaryWindow.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { ILifecycleMainService, IRelaunchHandler, LifecycleMainPhase, ShutdownEvent, ShutdownReason } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { IStateService } from '../../state/node/state.js'; +import { ICodeWindow, UnloadReason } from '../../window/electron-main/window.js'; export class TestLifecycleMainService implements ILifecycleMainService { diff --git a/src/vs/platform/theme/browser/defaultStyles.ts b/src/vs/platform/theme/browser/defaultStyles.ts index 68d93cbc2..33ee6b363 100644 --- a/src/vs/platform/theme/browser/defaultStyles.ts +++ b/src/vs/platform/theme/browser/defaultStyles.ts @@ -2,27 +2,27 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IButtonStyles } from 'vs/base/browser/ui/button/button'; -import { IKeybindingLabelStyles } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { ColorIdentifier, keybindingLabelBackground, keybindingLabelBorder, keybindingLabelBottomBorder, keybindingLabelForeground, asCssVariable, widgetShadow, buttonForeground, buttonSeparator, buttonBackground, buttonHoverBackground, buttonSecondaryForeground, buttonSecondaryBackground, buttonSecondaryHoverBackground, buttonBorder, progressBarBackground, inputActiveOptionBorder, inputActiveOptionForeground, inputActiveOptionBackground, editorWidgetBackground, editorWidgetForeground, contrastBorder, checkboxBorder, checkboxBackground, checkboxForeground, problemsErrorIconForeground, problemsWarningIconForeground, problemsInfoIconForeground, inputBackground, inputForeground, inputBorder, textLinkForeground, inputValidationInfoBorder, inputValidationInfoBackground, inputValidationInfoForeground, inputValidationWarningBorder, inputValidationWarningBackground, inputValidationWarningForeground, inputValidationErrorBorder, inputValidationErrorBackground, inputValidationErrorForeground, listFilterWidgetBackground, listFilterWidgetNoMatchesOutline, listFilterWidgetOutline, listFilterWidgetShadow, badgeBackground, badgeForeground, breadcrumbsBackground, breadcrumbsForeground, breadcrumbsFocusForeground, breadcrumbsActiveSelectionForeground, activeContrastBorder, listActiveSelectionBackground, listActiveSelectionForeground, listActiveSelectionIconForeground, listDropOverBackground, listFocusAndSelectionOutline, listFocusBackground, listFocusForeground, listFocusOutline, listHoverBackground, listHoverForeground, listInactiveFocusBackground, listInactiveFocusOutline, listInactiveSelectionBackground, listInactiveSelectionForeground, listInactiveSelectionIconForeground, tableColumnsBorder, tableOddRowsBackgroundColor, treeIndentGuidesStroke, asCssVariableWithDefault, editorWidgetBorder, focusBorder, pickerGroupForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, selectBackground, selectBorder, selectForeground, selectListBackground, treeInactiveIndentGuidesStroke, menuBorder, menuForeground, menuBackground, menuSelectionForeground, menuSelectionBackground, menuSelectionBorder, menuSeparatorBackground, scrollbarShadow, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, listDropBetweenBackground, radioActiveBackground, radioActiveForeground, radioInactiveBackground, radioInactiveForeground, radioInactiveBorder, radioInactiveHoverBackground, radioActiveBorder } from 'vs/platform/theme/common/colorRegistry'; -import { IProgressBarStyles } from 'vs/base/browser/ui/progressbar/progressbar'; -import { ICheckboxStyles, IToggleStyles } from 'vs/base/browser/ui/toggle/toggle'; -import { IDialogStyles } from 'vs/base/browser/ui/dialog/dialog'; -import { IInputBoxStyles } from 'vs/base/browser/ui/inputbox/inputBox'; -import { IFindWidgetStyles } from 'vs/base/browser/ui/tree/abstractTree'; -import { ICountBadgeStyles } from 'vs/base/browser/ui/countBadge/countBadge'; -import { IBreadcrumbsWidgetStyles } from 'vs/base/browser/ui/breadcrumbs/breadcrumbsWidget'; -import { IListStyles } from 'vs/base/browser/ui/list/listWidget'; -import { ISelectBoxStyles } from 'vs/base/browser/ui/selectBox/selectBox'; -import { Color } from 'vs/base/common/color'; -import { IMenuStyles } from 'vs/base/browser/ui/menu/menu'; -import { IRadioStyles } from 'vs/base/browser/ui/radio/radio'; +import { IButtonStyles } from '../../../base/browser/ui/button/button.js'; +import { IKeybindingLabelStyles } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { ColorIdentifier, keybindingLabelBackground, keybindingLabelBorder, keybindingLabelBottomBorder, keybindingLabelForeground, asCssVariable, widgetShadow, buttonForeground, buttonSeparator, buttonBackground, buttonHoverBackground, buttonSecondaryForeground, buttonSecondaryBackground, buttonSecondaryHoverBackground, buttonBorder, progressBarBackground, inputActiveOptionBorder, inputActiveOptionForeground, inputActiveOptionBackground, editorWidgetBackground, editorWidgetForeground, contrastBorder, checkboxBorder, checkboxBackground, checkboxForeground, problemsErrorIconForeground, problemsWarningIconForeground, problemsInfoIconForeground, inputBackground, inputForeground, inputBorder, textLinkForeground, inputValidationInfoBorder, inputValidationInfoBackground, inputValidationInfoForeground, inputValidationWarningBorder, inputValidationWarningBackground, inputValidationWarningForeground, inputValidationErrorBorder, inputValidationErrorBackground, inputValidationErrorForeground, listFilterWidgetBackground, listFilterWidgetNoMatchesOutline, listFilterWidgetOutline, listFilterWidgetShadow, badgeBackground, badgeForeground, breadcrumbsBackground, breadcrumbsForeground, breadcrumbsFocusForeground, breadcrumbsActiveSelectionForeground, activeContrastBorder, listActiveSelectionBackground, listActiveSelectionForeground, listActiveSelectionIconForeground, listDropOverBackground, listFocusAndSelectionOutline, listFocusBackground, listFocusForeground, listFocusOutline, listHoverBackground, listHoverForeground, listInactiveFocusBackground, listInactiveFocusOutline, listInactiveSelectionBackground, listInactiveSelectionForeground, listInactiveSelectionIconForeground, tableColumnsBorder, tableOddRowsBackgroundColor, treeIndentGuidesStroke, asCssVariableWithDefault, editorWidgetBorder, focusBorder, pickerGroupForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, selectBackground, selectBorder, selectForeground, selectListBackground, treeInactiveIndentGuidesStroke, menuBorder, menuForeground, menuBackground, menuSelectionForeground, menuSelectionBackground, menuSelectionBorder, menuSeparatorBackground, scrollbarShadow, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, listDropBetweenBackground, radioActiveBackground, radioActiveForeground, radioInactiveBackground, radioInactiveForeground, radioInactiveBorder, radioInactiveHoverBackground, radioActiveBorder } from '../common/colorRegistry.js'; +import { IProgressBarStyles } from '../../../base/browser/ui/progressbar/progressbar.js'; +import { ICheckboxStyles, IToggleStyles } from '../../../base/browser/ui/toggle/toggle.js'; +import { IDialogStyles } from '../../../base/browser/ui/dialog/dialog.js'; +import { IInputBoxStyles } from '../../../base/browser/ui/inputbox/inputBox.js'; +import { IFindWidgetStyles } from '../../../base/browser/ui/tree/abstractTree.js'; +import { ICountBadgeStyles } from '../../../base/browser/ui/countBadge/countBadge.js'; +import { IBreadcrumbsWidgetStyles } from '../../../base/browser/ui/breadcrumbs/breadcrumbsWidget.js'; +import { IListStyles } from '../../../base/browser/ui/list/listWidget.js'; +import { ISelectBoxStyles } from '../../../base/browser/ui/selectBox/selectBox.js'; +import { Color } from '../../../base/common/color.js'; +import { IMenuStyles } from '../../../base/browser/ui/menu/menu.js'; +import { IRadioStyles } from '../../../base/browser/ui/radio/radio.js'; export type IStyleOverride = { [P in keyof T]?: ColorIdentifier | undefined; }; -function overrideStyles(override: IStyleOverride, styles: T): any { +function overrideStyles(override: IStyleOverride, styles: T) { const result: { [P in keyof T]: string | undefined } = { ...styles }; for (const key in override) { const val = override[key]; diff --git a/src/vs/platform/theme/browser/iconsStyleSheet.ts b/src/vs/platform/theme/browser/iconsStyleSheet.ts index 96ec62103..6cc55b3b1 100644 --- a/src/vs/platform/theme/browser/iconsStyleSheet.ts +++ b/src/vs/platform/theme/browser/iconsStyleSheet.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asCSSPropertyValue, asCSSUrl } from 'vs/base/browser/dom'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { getIconRegistry, IconContribution, IconFontDefinition } from 'vs/platform/theme/common/iconRegistry'; -import { IProductIconTheme, IThemeService } from 'vs/platform/theme/common/themeService'; +import { asCSSPropertyValue, asCSSUrl } from '../../../base/browser/dom.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { getIconRegistry, IconContribution, IconFontDefinition } from '../common/iconRegistry.js'; +import { IProductIconTheme, IThemeService } from '../common/themeService.js'; export interface IIconsStyleSheet extends IDisposable { getCSS(): string; diff --git a/src/vs/platform/theme/common/colorRegistry.ts b/src/vs/platform/theme/common/colorRegistry.ts index 82b65f7a7..bc0b044b5 100644 --- a/src/vs/platform/theme/common/colorRegistry.ts +++ b/src/vs/platform/theme/common/colorRegistry.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export * from 'vs/platform/theme/common/colorUtils'; +export * from './colorUtils.js'; // Make sure all color files are exported -export * from 'vs/platform/theme/common/colors/baseColors'; -export * from 'vs/platform/theme/common/colors/chartsColors'; -export * from 'vs/platform/theme/common/colors/editorColors'; -export * from 'vs/platform/theme/common/colors/inputColors'; -export * from 'vs/platform/theme/common/colors/listColors'; -export * from 'vs/platform/theme/common/colors/menuColors'; -export * from 'vs/platform/theme/common/colors/minimapColors'; -export * from 'vs/platform/theme/common/colors/miscColors'; -export * from 'vs/platform/theme/common/colors/quickpickColors'; -export * from 'vs/platform/theme/common/colors/searchColors'; +export * from './colors/baseColors.js'; +export * from './colors/chartsColors.js'; +export * from './colors/editorColors.js'; +export * from './colors/inputColors.js'; +export * from './colors/listColors.js'; +export * from './colors/menuColors.js'; +export * from './colors/minimapColors.js'; +export * from './colors/miscColors.js'; +export * from './colors/quickpickColors.js'; +export * from './colors/searchColors.js'; diff --git a/src/vs/platform/theme/common/colorUtils.ts b/src/vs/platform/theme/common/colorUtils.ts index 14ceea884..684be5f3d 100644 --- a/src/vs/platform/theme/common/colorUtils.ts +++ b/src/vs/platform/theme/common/colorUtils.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assertNever } from 'vs/base/common/assert'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IJSONSchema, IJSONSchemaSnippet } from 'vs/base/common/jsonSchema'; -import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; -import * as platform from 'vs/platform/registry/common/platform'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import * as nls from 'vs/nls'; +import { assertNever } from '../../../base/common/assert.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { Color } from '../../../base/common/color.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IJSONSchema, IJSONSchemaSnippet } from '../../../base/common/jsonSchema.js'; +import { IJSONContributionRegistry, Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js'; +import * as platform from '../../registry/common/platform.js'; +import { IColorTheme } from './themeService.js'; +import * as nls from '../../../nls.js'; // ------ API types @@ -159,7 +159,7 @@ class ColorRegistry implements IColorRegistry { public registerColor(id: string, defaults: ColorDefaults | ColorValue | null, description: string, needsTransparency = false, deprecationMessage?: string): ColorIdentifier { const colorContribution: ColorContribution = { id, description, defaults, needsTransparency, deprecationMessage }; this.colorsById[id] = colorContribution; - const propertySchema: IJSONSchemaWithSnippets = { type: 'string', description, format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] }; + const propertySchema: IJSONSchemaWithSnippets = { type: 'string', format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] }; if (deprecationMessage) { propertySchema.deprecationMessage = deprecationMessage; } @@ -168,6 +168,7 @@ class ColorRegistry implements IColorRegistry { propertySchema.patternErrorMessage = nls.localize('transparecyRequired', 'This color must be transparent or it will obscure content'); } this.colorSchema.properties[id] = { + description, oneOf: [ propertySchema, { type: 'string', const: DEFAULT_COLOR_CONFIG_VALUE, description: nls.localize('useDefault', 'Use the default color.') } diff --git a/src/vs/platform/theme/common/colors/baseColors.ts b/src/vs/platform/theme/common/colors/baseColors.ts index baf6b86f2..514fdc8a4 100644 --- a/src/vs/platform/theme/common/colors/baseColors.ts +++ b/src/vs/platform/theme/common/colors/baseColors.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color } from 'vs/base/common/color'; -import { registerColor, transparent } from 'vs/platform/theme/common/colorUtils'; +import { Color } from '../../../../base/common/color.js'; +import { registerColor, transparent } from '../colorUtils.js'; export const foreground = registerColor('foreground', diff --git a/src/vs/platform/theme/common/colors/chartsColors.ts b/src/vs/platform/theme/common/colors/chartsColors.ts index a35e296d2..c12b947e7 100644 --- a/src/vs/platform/theme/common/colors/chartsColors.ts +++ b/src/vs/platform/theme/common/colors/chartsColors.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { registerColor, transparent } from 'vs/platform/theme/common/colorUtils'; +import * as nls from '../../../../nls.js'; +import { registerColor, transparent } from '../colorUtils.js'; -import { foreground } from 'vs/platform/theme/common/colors/baseColors'; -import { editorErrorForeground, editorInfoForeground, editorWarningForeground } from 'vs/platform/theme/common/colors/editorColors'; -import { minimapFindMatch } from 'vs/platform/theme/common/colors/minimapColors'; +import { foreground } from './baseColors.js'; +import { editorErrorForeground, editorInfoForeground, editorWarningForeground } from './editorColors.js'; +import { minimapFindMatch } from './minimapColors.js'; export const chartsForeground = registerColor('charts.foreground', diff --git a/src/vs/platform/theme/common/colors/editorColors.ts b/src/vs/platform/theme/common/colors/editorColors.ts index cebf9ba8f..567343b00 100644 --- a/src/vs/platform/theme/common/colors/editorColors.ts +++ b/src/vs/platform/theme/common/colors/editorColors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color, RGBA } from 'vs/base/common/color'; -import { registerColor, transparent, lessProminent, darken, lighten } from 'vs/platform/theme/common/colorUtils'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { registerColor, transparent, lessProminent, darken, lighten } from '../colorUtils.js'; // Import the colors we need -import { foreground, contrastBorder, activeContrastBorder } from 'vs/platform/theme/common/colors/baseColors'; -import { scrollbarShadow, badgeBackground } from 'vs/platform/theme/common/colors/miscColors'; +import { foreground, contrastBorder, activeContrastBorder } from './baseColors.js'; +import { scrollbarShadow, badgeBackground } from './miscColors.js'; // ----- editor diff --git a/src/vs/platform/theme/common/colors/inputColors.ts b/src/vs/platform/theme/common/colors/inputColors.ts index f31b804f7..1cf5a83e8 100644 --- a/src/vs/platform/theme/common/colors/inputColors.ts +++ b/src/vs/platform/theme/common/colors/inputColors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color, RGBA } from 'vs/base/common/color'; -import { registerColor, transparent, lighten, darken } from 'vs/platform/theme/common/colorUtils'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { registerColor, transparent, lighten, darken } from '../colorUtils.js'; // Import the colors we need -import { foreground, contrastBorder, focusBorder, iconForeground } from 'vs/platform/theme/common/colors/baseColors'; -import { editorWidgetBackground } from 'vs/platform/theme/common/colors/editorColors'; +import { foreground, contrastBorder, focusBorder, iconForeground } from './baseColors.js'; +import { editorWidgetBackground } from './editorColors.js'; // ----- input diff --git a/src/vs/platform/theme/common/colors/listColors.ts b/src/vs/platform/theme/common/colors/listColors.ts index 8fb7c4a78..8e345ded0 100644 --- a/src/vs/platform/theme/common/colors/listColors.ts +++ b/src/vs/platform/theme/common/colors/listColors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color } from 'vs/base/common/color'; -import { registerColor, darken, lighten, transparent, ifDefinedThenElse } from 'vs/platform/theme/common/colorUtils'; +import { Color } from '../../../../base/common/color.js'; +import { registerColor, darken, lighten, transparent, ifDefinedThenElse } from '../colorUtils.js'; // Import the colors we need -import { foreground, contrastBorder, activeContrastBorder, focusBorder, iconForeground } from 'vs/platform/theme/common/colors/baseColors'; -import { editorWidgetBackground, editorFindMatchHighlightBorder, editorFindMatchHighlight, widgetShadow, editorWidgetForeground } from 'vs/platform/theme/common/colors/editorColors'; +import { foreground, contrastBorder, activeContrastBorder, focusBorder, iconForeground } from './baseColors.js'; +import { editorWidgetBackground, editorFindMatchHighlightBorder, editorFindMatchHighlight, widgetShadow, editorWidgetForeground } from './editorColors.js'; export const listFocusBackground = registerColor('list.focusBackground', diff --git a/src/vs/platform/theme/common/colors/menuColors.ts b/src/vs/platform/theme/common/colors/menuColors.ts index 05bf54919..116a293aa 100644 --- a/src/vs/platform/theme/common/colors/menuColors.ts +++ b/src/vs/platform/theme/common/colors/menuColors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { registerColor } from 'vs/platform/theme/common/colorUtils'; +import { registerColor } from '../colorUtils.js'; // Import the colors we need -import { contrastBorder, activeContrastBorder } from 'vs/platform/theme/common/colors/baseColors'; -import { selectForeground, selectBackground } from 'vs/platform/theme/common/colors/inputColors'; -import { listActiveSelectionBackground, listActiveSelectionForeground } from 'vs/platform/theme/common/colors/listColors'; +import { contrastBorder, activeContrastBorder } from './baseColors.js'; +import { selectForeground, selectBackground } from './inputColors.js'; +import { listActiveSelectionBackground, listActiveSelectionForeground } from './listColors.js'; export const menuBorder = registerColor('menu.border', diff --git a/src/vs/platform/theme/common/colors/minimapColors.ts b/src/vs/platform/theme/common/colors/minimapColors.ts index ade38578c..3ac339977 100644 --- a/src/vs/platform/theme/common/colors/minimapColors.ts +++ b/src/vs/platform/theme/common/colors/minimapColors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color, RGBA } from 'vs/base/common/color'; -import { registerColor, transparent } from 'vs/platform/theme/common/colorUtils'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { registerColor, transparent } from '../colorUtils.js'; // Import the colors we need -import { editorInfoForeground, editorWarningForeground, editorWarningBorder, editorInfoBorder } from 'vs/platform/theme/common/colors/editorColors'; -import { scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground } from 'vs/platform/theme/common/colors/miscColors'; +import { editorInfoForeground, editorWarningForeground, editorWarningBorder, editorInfoBorder } from './editorColors.js'; +import { scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground } from './miscColors.js'; export const minimapFindMatch = registerColor('minimap.findMatchHighlight', diff --git a/src/vs/platform/theme/common/colors/miscColors.ts b/src/vs/platform/theme/common/colors/miscColors.ts index 42a00e23e..7be17f5c4 100644 --- a/src/vs/platform/theme/common/colors/miscColors.ts +++ b/src/vs/platform/theme/common/colors/miscColors.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color } from 'vs/base/common/color'; -import { registerColor, transparent } from 'vs/platform/theme/common/colorUtils'; +import { Color } from '../../../../base/common/color.js'; +import { registerColor, transparent } from '../colorUtils.js'; // Import the colors we need -import { contrastBorder, focusBorder } from 'vs/platform/theme/common/colors/baseColors'; +import { contrastBorder, focusBorder } from './baseColors.js'; // ----- sash diff --git a/src/vs/platform/theme/common/colors/quickpickColors.ts b/src/vs/platform/theme/common/colors/quickpickColors.ts index 3b109a218..96e9b2a1f 100644 --- a/src/vs/platform/theme/common/colors/quickpickColors.ts +++ b/src/vs/platform/theme/common/colors/quickpickColors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { Color, RGBA } from 'vs/base/common/color'; -import { registerColor, oneOf } from 'vs/platform/theme/common/colorUtils'; +import { Color, RGBA } from '../../../../base/common/color.js'; +import { registerColor, oneOf } from '../colorUtils.js'; // Import the colors we need -import { editorWidgetBackground, editorWidgetForeground } from 'vs/platform/theme/common/colors/editorColors'; -import { listActiveSelectionBackground, listActiveSelectionForeground, listActiveSelectionIconForeground } from 'vs/platform/theme/common/colors/listColors'; +import { editorWidgetBackground, editorWidgetForeground } from './editorColors.js'; +import { listActiveSelectionBackground, listActiveSelectionForeground, listActiveSelectionIconForeground } from './listColors.js'; export const quickInputBackground = registerColor('quickInput.background', diff --git a/src/vs/platform/theme/common/colors/searchColors.ts b/src/vs/platform/theme/common/colors/searchColors.ts index 8f10c53ab..7937f76d0 100644 --- a/src/vs/platform/theme/common/colors/searchColors.ts +++ b/src/vs/platform/theme/common/colors/searchColors.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; // Import the effects we need -import { registerColor, transparent } from 'vs/platform/theme/common/colorUtils'; +import { registerColor, transparent } from '../colorUtils.js'; // Import the colors we need -import { foreground } from 'vs/platform/theme/common/colors/baseColors'; -import { editorFindMatchHighlight, editorFindMatchHighlightBorder } from 'vs/platform/theme/common/colors/editorColors'; +import { foreground } from './baseColors.js'; +import { editorFindMatchHighlight, editorFindMatchHighlightBorder } from './editorColors.js'; export const searchResultsInfoForeground = registerColor('search.resultsInfoForeground', diff --git a/src/vs/platform/theme/common/iconRegistry.ts b/src/vs/platform/theme/common/iconRegistry.ts index 214f4846d..279b30ba1 100644 --- a/src/vs/platform/theme/common/iconRegistry.ts +++ b/src/vs/platform/theme/common/iconRegistry.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Codicon } from 'vs/base/common/codicons'; -import { getCodiconFontCharacters } from 'vs/base/common/codiconsUtil'; -import { ThemeIcon, IconIdentifier } from 'vs/base/common/themables'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; -import { isString } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { Extensions as JSONExtensions, IJSONContributionRegistry } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; -import * as platform from 'vs/platform/registry/common/platform'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { getCodiconFontCharacters } from '../../../base/common/codiconsUtil.js'; +import { ThemeIcon, IconIdentifier } from '../../../base/common/themables.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IJSONSchema, IJSONSchemaMap } from '../../../base/common/jsonSchema.js'; +import { isString } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { Extensions as JSONExtensions, IJSONContributionRegistry } from '../../jsonschemas/common/jsonContributionRegistry.js'; +import * as platform from '../../registry/common/platform.js'; // ------ API types diff --git a/src/vs/platform/theme/common/themeService.ts b/src/vs/platform/theme/common/themeService.ts index f89940c9f..cf850e772 100644 --- a/src/vs/platform/theme/common/themeService.ts +++ b/src/vs/platform/theme/common/themeService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import * as platform from 'vs/platform/registry/common/platform'; -import { ColorIdentifier } from 'vs/platform/theme/common/colorRegistry'; -import { IconContribution, IconDefinition } from 'vs/platform/theme/common/iconRegistry'; -import { ColorScheme } from 'vs/platform/theme/common/theme'; +import { Codicon } from '../../../base/common/codicons.js'; +import { Color } from '../../../base/common/color.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import * as platform from '../../registry/common/platform.js'; +import { ColorIdentifier } from './colorRegistry.js'; +import { IconContribution, IconDefinition } from './iconRegistry.js'; +import { ColorScheme } from './theme.js'; export const IThemeService = createDecorator('themeService'); @@ -214,9 +214,13 @@ export interface IPartsSplash { foreground: string | undefined; editorBackground: string | undefined; titleBarBackground: string | undefined; + titleBarBorder: string | undefined; activityBarBackground: string | undefined; + activityBarBorder: string | undefined; sideBarBackground: string | undefined; + sideBarBorder: string | undefined; statusBarBackground: string | undefined; + statusBarBorder: string | undefined; statusBarNoFolderBackground: string | undefined; windowBorder: string | undefined; }; diff --git a/src/vs/platform/theme/common/tokenClassificationRegistry.ts b/src/vs/platform/theme/common/tokenClassificationRegistry.ts index b95a89a14..6b7e07ce8 100644 --- a/src/vs/platform/theme/common/tokenClassificationRegistry.ts +++ b/src/vs/platform/theme/common/tokenClassificationRegistry.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; -import * as nls from 'vs/nls'; -import { Extensions as JSONExtensions, IJSONContributionRegistry } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; -import * as platform from 'vs/platform/registry/common/platform'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { Color } from '../../../base/common/color.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IJSONSchema, IJSONSchemaMap } from '../../../base/common/jsonSchema.js'; +import * as nls from '../../../nls.js'; +import { Extensions as JSONExtensions, IJSONContributionRegistry } from '../../jsonschemas/common/jsonContributionRegistry.js'; +import * as platform from '../../registry/common/platform.js'; +import { IColorTheme } from './themeService.js'; const TOKEN_TYPE_WILDCARD = '*'; const TOKEN_CLASSIFIER_LANGUAGE_SEPARATOR = ':'; diff --git a/src/vs/platform/theme/electron-main/themeMainService.ts b/src/vs/platform/theme/electron-main/themeMainService.ts index e332feed2..aea7ebbb8 100644 --- a/src/vs/platform/theme/electron-main/themeMainService.ts +++ b/src/vs/platform/theme/electron-main/themeMainService.ts @@ -4,17 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import electron from 'electron'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IStateService } from 'vs/platform/state/node/state'; -import { IPartsSplash } from 'vs/platform/theme/common/themeService'; -import { IColorScheme } from 'vs/platform/window/common/window'; - +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IStateService } from '../../state/node/state.js'; +import { IPartsSplash } from '../common/themeService.js'; +import { IColorScheme } from '../../window/common/window.js'; + +// These default colors match our default themes +// editor background color ("Dark Modern", etc...) const DEFAULT_BG_LIGHT = '#FFFFFF'; -const DEFAULT_BG_DARK = '#1E1E1E'; +const DEFAULT_BG_DARK = '#1F1F1F'; const DEFAULT_BG_HC_BLACK = '#000000'; const DEFAULT_BG_HC_LIGHT = '#FFFFFF'; @@ -134,10 +136,6 @@ export class ThemeMainService extends Disposable implements IThemeMainService { } } - if (isMacintosh && background.toUpperCase() === DEFAULT_BG_DARK) { - background = '#171717'; // https://github.com/electron/electron/issues/5150 - } - return background; } diff --git a/src/vs/platform/theme/test/common/testThemeService.ts b/src/vs/platform/theme/test/common/testThemeService.ts index 5109b055e..8ee388d4d 100644 --- a/src/vs/platform/theme/test/common/testThemeService.ts +++ b/src/vs/platform/theme/test/common/testThemeService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IconContribution } from 'vs/platform/theme/common/iconRegistry'; -import { ColorScheme } from 'vs/platform/theme/common/theme'; -import { IColorTheme, IFileIconTheme, IProductIconTheme, IThemeService, ITokenStyle } from 'vs/platform/theme/common/themeService'; +import { Color } from '../../../../base/common/color.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IconContribution } from '../../common/iconRegistry.js'; +import { ColorScheme } from '../../common/theme.js'; +import { IColorTheme, IFileIconTheme, IProductIconTheme, IThemeService, ITokenStyle } from '../../common/themeService.js'; export class TestColorTheme implements IColorTheme { diff --git a/src/vs/platform/tunnel/common/tunnel.ts b/src/vs/platform/tunnel/common/tunnel.ts index b1433f2e7..1b0592103 100644 --- a/src/vs/platform/tunnel/common/tunnel.ts +++ b/src/vs/platform/tunnel/common/tunnel.ts @@ -3,16 +3,16 @@ * 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 { IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { OperatingSystem } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IAddressProvider } from 'vs/platform/remote/common/remoteAgentConnection'; -import { TunnelPrivacy } from 'vs/platform/remote/common/remoteAuthorityResolver'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IDisposable, Disposable } from '../../../base/common/lifecycle.js'; +import { OperatingSystem } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IAddressProvider } from '../../remote/common/remoteAgentConnection.js'; +import { TunnelPrivacy } from '../../remote/common/remoteAuthorityResolver.js'; export const ITunnelService = createDecorator('tunnelService'); export const ISharedTunnelsService = createDecorator('sharedTunnelsService'); diff --git a/src/vs/platform/tunnel/node/sharedProcessTunnelService.ts b/src/vs/platform/tunnel/node/sharedProcessTunnelService.ts index 4dbb881b3..46500cf66 100644 --- a/src/vs/platform/tunnel/node/sharedProcessTunnelService.ts +++ b/src/vs/platform/tunnel/node/sharedProcessTunnelService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogService } from 'vs/platform/log/common/log'; -import { ISharedProcessTunnel, ISharedProcessTunnelService } from 'vs/platform/remote/common/sharedProcessTunnelService'; -import { ISharedTunnelsService, RemoteTunnel } from 'vs/platform/tunnel/common/tunnel'; -import { IAddress, IAddressProvider } from 'vs/platform/remote/common/remoteAgentConnection'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { canceled } from 'vs/base/common/errors'; -import { DeferredPromise } from 'vs/base/common/async'; +import { ILogService } from '../../log/common/log.js'; +import { ISharedProcessTunnel, ISharedProcessTunnelService } from '../../remote/common/sharedProcessTunnelService.js'; +import { ISharedTunnelsService, RemoteTunnel } from '../common/tunnel.js'; +import { IAddress, IAddressProvider } from '../../remote/common/remoteAgentConnection.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { canceled } from '../../../base/common/errors.js'; +import { DeferredPromise } from '../../../base/common/async.js'; class TunnelData extends Disposable implements IAddressProvider { diff --git a/src/vs/platform/tunnel/node/tunnelService.ts b/src/vs/platform/tunnel/node/tunnelService.ts index f28dc9e22..3554ea785 100644 --- a/src/vs/platform/tunnel/node/tunnelService.ts +++ b/src/vs/platform/tunnel/node/tunnelService.ts @@ -5,21 +5,21 @@ import * as net from 'net'; import * as os from 'os'; -import { BROWSER_RESTRICTED_PORTS, findFreePortFaster } from 'vs/base/node/ports'; -import { NodeSocket } from 'vs/base/parts/ipc/node/ipc.net'; - -import { Barrier } from 'vs/base/common/async'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { OS } from 'vs/base/common/platform'; -import { ISocket } from 'vs/base/parts/ipc/common/ipc.net'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IAddressProvider, IConnectionOptions, connectRemoteAgentTunnel } from 'vs/platform/remote/common/remoteAgentConnection'; -import { IRemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { AbstractTunnelService, ISharedTunnelsService, ITunnelProvider, ITunnelService, RemoteTunnel, TunnelPrivacyId, isAllInterfaces, isLocalhost, isPortPrivileged, isTunnelProvider } from 'vs/platform/tunnel/common/tunnel'; -import { VSBuffer } from 'vs/base/common/buffer'; +import { BROWSER_RESTRICTED_PORTS, findFreePortFaster } from '../../../base/node/ports.js'; +import { NodeSocket } from '../../../base/parts/ipc/node/ipc.net.js'; + +import { Barrier } from '../../../base/common/async.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { OS } from '../../../base/common/platform.js'; +import { ISocket } from '../../../base/parts/ipc/common/ipc.net.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IAddressProvider, IConnectionOptions, connectRemoteAgentTunnel } from '../../remote/common/remoteAgentConnection.js'; +import { IRemoteSocketFactoryService } from '../../remote/common/remoteSocketFactoryService.js'; +import { ISignService } from '../../sign/common/sign.js'; +import { AbstractTunnelService, ISharedTunnelsService, ITunnelProvider, ITunnelService, RemoteTunnel, TunnelPrivacyId, isAllInterfaces, isLocalhost, isPortPrivileged, isTunnelProvider } from '../common/tunnel.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; async function createRemoteTunnel(options: IConnectionOptions, defaultTunnelHost: string, tunnelRemoteHost: string, tunnelRemotePort: number, tunnelLocalPort?: number): Promise { let readyTunnel: NodeRemoteTunnel | undefined; diff --git a/src/vs/platform/tunnel/test/common/tunnel.test.ts b/src/vs/platform/tunnel/test/common/tunnel.test.ts index ae32707eb..2a243f48e 100644 --- a/src/vs/platform/tunnel/test/common/tunnel.test.ts +++ b/src/vs/platform/tunnel/test/common/tunnel.test.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; +import { URI } from '../../../../base/common/uri.js'; import { extractLocalHostUriMetaDataForPortMapping, extractQueryLocalHostUriMetaDataForPortMapping -} from 'vs/platform/tunnel/common/tunnel'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +} from '../../common/tunnel.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('Tunnel', () => { diff --git a/src/vs/platform/undoRedo/common/undoRedo.ts b/src/vs/platform/undoRedo/common/undoRedo.ts index a667ae9f8..bff14d68a 100644 --- a/src/vs/platform/undoRedo/common/undoRedo.ts +++ b/src/vs/platform/undoRedo/common/undoRedo.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IUndoRedoService = createDecorator('undoRedoService'); diff --git a/src/vs/platform/undoRedo/common/undoRedoService.ts b/src/vs/platform/undoRedo/common/undoRedoService.ts index 2fc976167..52be006cc 100644 --- a/src/vs/platform/undoRedo/common/undoRedoService.ts +++ b/src/vs/platform/undoRedo/common/undoRedoService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable, IDisposable, isDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import * as nls from 'vs/nls'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IPastFutureElements, IResourceUndoRedoElement, IUndoRedoElement, IUndoRedoService, IWorkspaceUndoRedoElement, ResourceEditStackSnapshot, UndoRedoElementType, UndoRedoGroup, UndoRedoSource, UriComparisonKeyComputer } from 'vs/platform/undoRedo/common/undoRedo'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { Disposable, IDisposable, isDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import * as nls from '../../../nls.js'; +import { IDialogService } from '../../dialogs/common/dialogs.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { INotificationService } from '../../notification/common/notification.js'; +import { IPastFutureElements, IResourceUndoRedoElement, IUndoRedoElement, IUndoRedoService, IWorkspaceUndoRedoElement, ResourceEditStackSnapshot, UndoRedoElementType, UndoRedoGroup, UndoRedoSource, UriComparisonKeyComputer } from './undoRedo.js'; const DEBUG = false; diff --git a/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts b/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts index 32d33a7d2..534838727 100644 --- a/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts +++ b/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IDialogService, IPrompt } from 'vs/platform/dialogs/common/dialogs'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { IUndoRedoElement, UndoRedoElementType, UndoRedoGroup } from 'vs/platform/undoRedo/common/undoRedo'; -import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IDialogService, IPrompt } from '../../../dialogs/common/dialogs.js'; +import { TestDialogService } from '../../../dialogs/test/common/testDialogService.js'; +import { TestNotificationService } from '../../../notification/test/common/testNotificationService.js'; +import { IUndoRedoElement, UndoRedoElementType, UndoRedoGroup } from '../../common/undoRedo.js'; +import { UndoRedoService } from '../../common/undoRedoService.js'; suite('UndoRedoService', () => { diff --git a/src/vs/platform/update/common/update.config.contribution.ts b/src/vs/platform/update/common/update.config.contribution.ts index 4134233de..d96926b55 100644 --- a/src/vs/platform/update/common/update.config.contribution.ts +++ b/src/vs/platform/update/common/update.config.contribution.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isWeb, isWindows } from 'vs/base/common/platform'; -import { localize } from 'vs/nls'; -import { ConfigurationScope, Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; +import { isWeb, isWindows } from '../../../base/common/platform.js'; +import { localize } from '../../../nls.js'; +import { ConfigurationScope, Extensions as ConfigurationExtensions, IConfigurationRegistry } from '../../configuration/common/configurationRegistry.js'; +import { Registry } from '../../registry/common/platform.js'; const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); configurationRegistry.registerConfiguration({ diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts index 18cafc919..2b0253285 100644 --- a/src/vs/platform/update/common/update.ts +++ b/src/vs/platform/update/common/update.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export interface IUpdate { // Windows and Linux: 9a19815253d91900be5ec1016e0ecc7cc9a6950 (Commit Hash). Mac: 1.54.0 (Product Version) diff --git a/src/vs/platform/update/common/updateIpc.ts b/src/vs/platform/update/common/updateIpc.ts index 735ea9526..1c9490312 100644 --- a/src/vs/platform/update/common/updateIpc.ts +++ b/src/vs/platform/update/common/updateIpc.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IUpdateService, State } from 'vs/platform/update/common/update'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IUpdateService, State } from './update.js'; export class UpdateChannel implements IServerChannel { diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts index ea18f4ab5..48638aa12 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { AvailableForDownload, DisablementReason, IUpdateService, State, StateType, UpdateType } from 'vs/platform/update/common/update'; +import { timeout } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService, LifecycleMainPhase } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IRequestService } from '../../request/common/request.js'; +import { AvailableForDownload, DisablementReason, IUpdateService, State, StateType, UpdateType } from '../common/update.js'; export function createUpdateURL(platform: string, quality: string, productService: IProductService): string { return `${productService.updateUrl}/api/update/${platform}/${quality}/${productService.commit}`; diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts index 183c69da9..d3f27d371 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import * as electron from 'electron'; -import { memoize } from 'vs/base/common/decorators'; -import { Event } from 'vs/base/common/event'; -import { hash } from 'vs/base/common/hash'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService, IRelaunchHandler, IRelaunchOptions } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUpdate, State, StateType, UpdateType } from 'vs/platform/update/common/update'; -import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification, UpdateNotAvailableClassification } from 'vs/platform/update/electron-main/abstractUpdateService'; +import { memoize } from '../../../base/common/decorators.js'; +import { Event } from '../../../base/common/event.js'; +import { hash } from '../../../base/common/hash.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService, IRelaunchHandler, IRelaunchOptions } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IRequestService } from '../../request/common/request.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUpdate, State, StateType, UpdateType } from '../common/update.js'; +import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification, UpdateNotAvailableClassification } from './abstractUpdateService.js'; export class DarwinUpdateService extends AbstractUpdateService implements IRelaunchHandler { diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts index c0f18ba9a..6e076c72e 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { asJson, IRequestService } from 'vs/platform/request/common/request'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { AvailableForDownload, IUpdate, State, UpdateType } from 'vs/platform/update/common/update'; -import { AbstractUpdateService, createUpdateURL, UpdateNotAvailableClassification } from 'vs/platform/update/electron-main/abstractUpdateService'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { INativeHostMainService } from '../../native/electron-main/nativeHostMainService.js'; +import { IProductService } from '../../product/common/productService.js'; +import { asJson, IRequestService } from '../../request/common/request.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { AvailableForDownload, IUpdate, State, UpdateType } from '../common/update.js'; +import { AbstractUpdateService, createUpdateURL, UpdateNotAvailableClassification } from './abstractUpdateService.js'; export class LinuxUpdateService extends AbstractUpdateService { diff --git a/src/vs/platform/update/electron-main/updateService.snap.ts b/src/vs/platform/update/electron-main/updateService.snap.ts index c20ce198e..78bcf9d7a 100644 --- a/src/vs/platform/update/electron-main/updateService.snap.ts +++ b/src/vs/platform/update/electron-main/updateService.snap.ts @@ -5,15 +5,15 @@ import { spawn } from 'child_process'; import { realpath, watch } from 'fs'; -import { timeout } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import * as path from 'vs/base/common/path'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { AvailableForDownload, IUpdateService, State, StateType, UpdateType } from 'vs/platform/update/common/update'; -import { UpdateNotAvailableClassification } from 'vs/platform/update/electron-main/abstractUpdateService'; +import { timeout } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import * as path from '../../../base/common/path.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { AvailableForDownload, IUpdateService, State, StateType, UpdateType } from '../common/update.js'; +import { UpdateNotAvailableClassification } from './abstractUpdateService.js'; abstract class AbstractUpdateService implements IUpdateService { diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts index a2561be0c..61109e547 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -6,25 +6,25 @@ import { spawn } from 'child_process'; import * as fs from 'fs'; import { tmpdir } from 'os'; -import { timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { memoize } from 'vs/base/common/decorators'; -import { hash } from 'vs/base/common/hash'; -import * as path from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { checksum } from 'vs/base/node/crypto'; -import * as pfs from 'vs/base/node/pfs'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILifecycleMainService, IRelaunchHandler, IRelaunchOptions } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { asJson, IRequestService } from 'vs/platform/request/common/request'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from 'vs/platform/update/common/update'; -import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification, UpdateNotAvailableClassification } from 'vs/platform/update/electron-main/abstractUpdateService'; +import { timeout } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { memoize } from '../../../base/common/decorators.js'; +import { hash } from '../../../base/common/hash.js'; +import * as path from '../../../base/common/path.js'; +import { URI } from '../../../base/common/uri.js'; +import { checksum } from '../../../base/node/crypto.js'; +import * as pfs from '../../../base/node/pfs.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILifecycleMainService, IRelaunchHandler, IRelaunchOptions } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { INativeHostMainService } from '../../native/electron-main/nativeHostMainService.js'; +import { IProductService } from '../../product/common/productService.js'; +import { asJson, IRequestService } from '../../request/common/request.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from '../common/update.js'; +import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification, UpdateNotAvailableClassification } from './abstractUpdateService.js'; async function pollUntil(fn: () => boolean, millis = 1000): Promise { while (!fn()) { @@ -189,7 +189,7 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun return path.join(cachePath, `CodeSetup-${this.productService.quality}-${version}.exe`); } - private async cleanup(exceptVersion: string | null = null): Promise { + private async cleanup(exceptVersion: string | null = null): Promise { const filter = exceptVersion ? (one: string) => !(new RegExp(`${this.productService.quality}-${exceptVersion}\\.exe$`).test(one)) : () => true; const cachePath = await this.cachePath; diff --git a/src/vs/platform/uriIdentity/common/uriIdentity.ts b/src/vs/platform/uriIdentity/common/uriIdentity.ts index f01d6ccf0..8bd6be7df 100644 --- a/src/vs/platform/uriIdentity/common/uriIdentity.ts +++ b/src/vs/platform/uriIdentity/common/uriIdentity.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtUri } from 'vs/base/common/resources'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IExtUri } from '../../../base/common/resources.js'; export const IUriIdentityService = createDecorator('IUriIdentityService'); diff --git a/src/vs/platform/uriIdentity/common/uriIdentityService.ts b/src/vs/platform/uriIdentity/common/uriIdentityService.ts index c9ffebe31..ba9ca5b7a 100644 --- a/src/vs/platform/uriIdentity/common/uriIdentityService.ts +++ b/src/vs/platform/uriIdentity/common/uriIdentityService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { URI } from 'vs/base/common/uri'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IFileService, FileSystemProviderCapabilities, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent } from 'vs/platform/files/common/files'; -import { ExtUri, IExtUri, normalizePath } from 'vs/base/common/resources'; -import { SkipList } from 'vs/base/common/skipList'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { IUriIdentityService } from './uriIdentity.js'; +import { URI } from '../../../base/common/uri.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { IFileService, FileSystemProviderCapabilities, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent } from '../../files/common/files.js'; +import { ExtUri, IExtUri, normalizePath } from '../../../base/common/resources.js'; +import { SkipList } from '../../../base/common/skipList.js'; +import { Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; class Entry { static _clock = 0; diff --git a/src/vs/platform/uriIdentity/test/common/uriIdentityService.test.ts b/src/vs/platform/uriIdentity/test/common/uriIdentityService.test.ts index 339e86bf9..bb0a791f3 100644 --- a/src/vs/platform/uriIdentity/test/common/uriIdentityService.test.ts +++ b/src/vs/platform/uriIdentity/test/common/uriIdentityService.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { mock } from 'vs/base/test/common/mock'; -import { IFileService, FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; -import { URI } from 'vs/base/common/uri'; -import { Event } from 'vs/base/common/event'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { UriIdentityService } from '../../common/uriIdentityService.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IFileService, FileSystemProviderCapabilities } from '../../../files/common/files.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Event } from '../../../../base/common/event.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('URI Identity', function () { diff --git a/src/vs/platform/url/common/url.ts b/src/vs/platform/url/common/url.ts index b5079b04c..e5e95a109 100644 --- a/src/vs/platform/url/common/url.ts +++ b/src/vs/platform/url/common/url.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IURLService = createDecorator('urlService'); diff --git a/src/vs/platform/url/common/urlIpc.ts b/src/vs/platform/url/common/urlIpc.ts index aac9e6324..812191885 100644 --- a/src/vs/platform/url/common/urlIpc.ts +++ b/src/vs/platform/url/common/urlIpc.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { Client, IChannel, IClientRouter, IConnectionHub, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IOpenURLOptions, IURLHandler } from 'vs/platform/url/common/url'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { Client, IChannel, IClientRouter, IConnectionHub, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ILogService } from '../../log/common/log.js'; +import { IOpenURLOptions, IURLHandler } from './url.js'; export class URLHandlerChannel implements IServerChannel { diff --git a/src/vs/platform/url/common/urlService.ts b/src/vs/platform/url/common/urlService.ts index fcc833bf0..12d980e22 100644 --- a/src/vs/platform/url/common/urlService.ts +++ b/src/vs/platform/url/common/urlService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { first } from 'vs/base/common/async'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IOpenURLOptions, IURLHandler, IURLService } from 'vs/platform/url/common/url'; +import { first } from '../../../base/common/async.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IOpenURLOptions, IURLHandler, IURLService } from './url.js'; export abstract class AbstractURLService extends Disposable implements IURLService { diff --git a/src/vs/platform/url/electron-main/electronUrlListener.ts b/src/vs/platform/url/electron-main/electronUrlListener.ts index ffe2f5bb1..ece5401dd 100644 --- a/src/vs/platform/url/electron-main/electronUrlListener.ts +++ b/src/vs/platform/url/electron-main/electronUrlListener.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import { app, Event as ElectronEvent } from 'electron'; -import { disposableTimeout } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IURLService } from 'vs/platform/url/common/url'; -import { IProtocolUrl } from 'vs/platform/url/electron-main/url'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; +import { disposableTimeout } from '../../../base/common/async.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { isWindows } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IURLService } from '../common/url.js'; +import { IProtocolUrl } from './url.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; /** * A listener for URLs that are opened from the OS and handled by VSCode. diff --git a/src/vs/platform/url/electron-main/url.ts b/src/vs/platform/url/electron-main/url.ts index 56ac7aa64..e287787b6 100644 --- a/src/vs/platform/url/electron-main/url.ts +++ b/src/vs/platform/url/electron-main/url.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IWindowOpenable } from 'vs/platform/window/common/window'; +import { URI } from '../../../base/common/uri.js'; +import { IWindowOpenable } from '../../window/common/window.js'; export interface IProtocolUrl { diff --git a/src/vs/platform/userData/common/fileUserDataProvider.ts b/src/vs/platform/userData/common/fileUserDataProvider.ts index eaded2a09..1cfd07ec0 100644 --- a/src/vs/platform/userData/common/fileUserDataProvider.ts +++ b/src/vs/platform/userData/common/fileUserDataProvider.ts @@ -2,17 +2,17 @@ * 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 { 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 { URI } from 'vs/base/common/uri'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ReadableStreamEvents } from 'vs/base/common/stream'; -import { ILogService } from 'vs/platform/log/common/log'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { ResourceSet } from 'vs/base/common/map'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IFileSystemProviderWithFileReadWriteCapability, IFileChange, IWatchOptions, IStat, IFileOverwriteOptions, FileType, IFileWriteOptions, IFileDeleteOptions, FileSystemProviderCapabilities, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions, IFileSystemProviderWithFileAtomicReadCapability, hasFileFolderCopyCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileCloneCapability, hasFileCloneCapability, IFileAtomicReadOptions, IFileAtomicOptions } from '../../files/common/files.js'; +import { URI } from '../../../base/common/uri.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { ReadableStreamEvents } from '../../../base/common/stream.js'; +import { ILogService } from '../../log/common/log.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { ResourceSet } from '../../../base/common/map.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; /** * This is a wrapper on top of the local filesystem provider which will diff --git a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts index 8f0c5641d..44877acd4 100644 --- a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts +++ b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts @@ -4,25 +4,25 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { dirname, isEqual, joinPath } from 'vs/base/common/resources'; -import { ReadableStreamEvents } from 'vs/base/common/stream'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { AbstractNativeEnvironmentService } from 'vs/platform/environment/common/environmentService'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { FileChangeType, FileSystemProviderCapabilities, FileType, IFileChange, IFileOpenOptions, IFileReadStreamOptions, IFileService, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IStat } from 'vs/platform/files/common/files'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { NullLogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; -import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { dirname, isEqual, joinPath } from '../../../../base/common/resources.js'; +import { ReadableStreamEvents } from '../../../../base/common/stream.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { AbstractNativeEnvironmentService } from '../../../environment/common/environmentService.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { FileChangeType, FileSystemProviderCapabilities, FileType, IFileChange, IFileOpenOptions, IFileReadStreamOptions, IFileService, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IStat } from '../../../files/common/files.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { NullLogService } from '../../../log/common/log.js'; +import product from '../../../product/common/product.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { FileUserDataProvider } from '../../common/fileUserDataProvider.js'; +import { IUserDataProfilesService, UserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); diff --git a/src/vs/platform/userDataProfile/browser/userDataProfile.ts b/src/vs/platform/userDataProfile/browser/userDataProfile.ts index 7af957185..f5da3f21f 100644 --- a/src/vs/platform/userDataProfile/browser/userDataProfile.ts +++ b/src/vs/platform/userDataProfile/browser/userDataProfile.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BroadcastDataChannel } from 'vs/base/browser/broadcast'; -import { revive } from 'vs/base/common/marshalling'; -import { UriDto } from 'vs/base/common/uri'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { DidChangeProfilesEvent, IUserDataProfile, IUserDataProfilesService, reviveProfile, StoredProfileAssociations, StoredUserDataProfile, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { BroadcastDataChannel } from '../../../base/browser/broadcast.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { UriDto } from '../../../base/common/uri.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { DidChangeProfilesEvent, IUserDataProfile, IUserDataProfilesService, reviveProfile, StoredProfileAssociations, StoredUserDataProfile, UserDataProfilesService } from '../common/userDataProfile.js'; type BroadcastedProfileChanges = UriDto>; diff --git a/src/vs/platform/userDataProfile/common/userDataProfile.ts b/src/vs/platform/userDataProfile/common/userDataProfile.ts index f18ae0970..61cec7bcf 100644 --- a/src/vs/platform/userDataProfile/common/userDataProfile.ts +++ b/src/vs/platform/userDataProfile/common/userDataProfile.ts @@ -3,24 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { hash } from 'vs/base/common/hash'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { basename, joinPath } from 'vs/base/common/resources'; -import { URI, UriDto } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IAnyWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { ResourceMap } from 'vs/base/common/map'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { Promises } from 'vs/base/common/async'; -import { generateUuid } from 'vs/base/common/uuid'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { isString } from 'vs/base/common/types'; +import { hash } from '../../../base/common/hash.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { basename, joinPath } from '../../../base/common/resources.js'; +import { URI, UriDto } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { FileOperationResult, IFileService, toFileOperationResult } from '../../files/common/files.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IAnyWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { Promises } from '../../../base/common/async.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { escapeRegExpCharacters } from '../../../base/common/strings.js'; +import { isString, Mutable } from '../../../base/common/types.js'; export const enum ProfileResourceType { Settings = 'settings', @@ -53,6 +52,7 @@ export interface IUserDataProfile { readonly cacheHome: URI; readonly useDefaultFlags?: UseDefaultProfileFlags; readonly isTransient?: boolean; + readonly workspaces?: readonly URI[]; } export function isUserDataProfile(thing: unknown): thing is IUserDataProfile { @@ -89,6 +89,7 @@ export interface IUserDataProfileOptions { readonly icon?: string; readonly useDefaultFlags?: UseDefaultProfileFlags; readonly transient?: boolean; + readonly workspaces?: readonly URI[]; } export interface IUserDataProfileUpdateOptions extends Omit { @@ -139,6 +140,7 @@ export function reviveProfile(profile: UriDto, scheme: string) cacheHome: URI.revive(profile.cacheHome).with({ scheme }), useDefaultFlags: profile.useDefaultFlags, isTransient: profile.isTransient, + workspaces: profile.workspaces?.map(w => URI.revive(w)), }; } @@ -158,20 +160,16 @@ export function toUserDataProfile(id: string, name: string, location: URI, profi extensionsResource: defaultProfile && options?.useDefaultFlags?.extensions ? defaultProfile.extensionsResource : joinPath(location, 'extensions.json'), cacheHome: joinPath(profilesCacheHome, id), useDefaultFlags: options?.useDefaultFlags, - isTransient: options?.transient + isTransient: options?.transient, + workspaces: options?.workspaces, }; } export type UserDataProfilesObject = { profiles: IUserDataProfile[]; - workspaces: ResourceMap; emptyWindows: Map; }; -type TransientUserDataProfilesObject = UserDataProfilesObject & { - folders: ResourceMap; -}; - export type StoredUserDataProfile = { name: string; location: URI; @@ -213,10 +211,8 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf private profileCreationPromises = new Map>(); - protected readonly transientProfilesObject: TransientUserDataProfilesObject = { + protected readonly transientProfilesObject: UserDataProfilesObject = { profiles: [], - folders: new ResourceMap(), - workspaces: new ResourceMap(), emptyWindows: new Map() }; @@ -250,7 +246,7 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf protected get profilesObject(): UserDataProfilesObject { if (!this._profilesObject) { const defaultProfile = this.createDefaultProfile(); - const profiles = [defaultProfile]; + const profiles: Array> = [defaultProfile]; if (this.enabled) { try { for (const storedProfile of this.getStoredProfiles()) { @@ -264,7 +260,6 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf this.logService.error(error); } } - const workspaces = new ResourceMap(); const emptyWindows = new Map(); if (profiles.length) { try { @@ -274,7 +269,9 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf const workspace = URI.parse(workspacePath); const profile = profiles.find(p => p.id === profileId); if (profile) { - workspaces.set(workspace, profile); + const workspaces = profile.workspaces ? profile.workspaces.slice(0) : []; + workspaces.push(workspace); + profile.workspaces = workspaces; } } } @@ -290,7 +287,7 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf this.logService.error(error); } } - this._profilesObject = { profiles, workspaces, emptyWindows }; + this._profilesObject = { profiles, emptyWindows }; } return this._profilesObject; } @@ -322,28 +319,29 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf throw new Error(`Profiles are disabled in the current environment.`); } - const profile = await this.doCreateProfile(id, name, options); - - if (workspaceIdentifier) { - await this.setProfileForWorkspace(workspaceIdentifier, profile); - } + const profile = await this.doCreateProfile(id, name, options, workspaceIdentifier); return profile; } - private async doCreateProfile(id: string, name: string, options?: IUserDataProfileOptions): Promise { + private async doCreateProfile(id: string, name: string, options?: IUserDataProfileOptions, workspaceIdentifier?: IAnyWorkspaceIdentifier): Promise { if (!isString(name) || !name) { throw new Error('Name of the profile is mandatory and must be of type `string`'); } + let profileCreationPromise = this.profileCreationPromises.get(name); if (!profileCreationPromise) { profileCreationPromise = (async () => { try { - const existing = this.profiles.find(p => p.name === name || p.id === id); + const existing = this.profiles.find(p => p.id === id || (!p.isTransient && !options?.transient && p.name === name)); if (existing) { throw new Error(`Profile with ${name} name already exists`); } + const workspace = workspaceIdentifier ? this.getWorkspace(workspaceIdentifier) : undefined; + if (URI.isUri(workspace)) { + options = { ...options, workspaces: [workspace] }; + } const profile = toUserDataProfile(id, name, joinPath(this.profilesHome, id), this.profilesCacheHome, options, this.defaultProfile); await this.fileService.createFolder(profile.location); @@ -356,6 +354,9 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf }); await Promises.settled(joiners); + if (workspace && !URI.isUri(workspace)) { + this.updateEmptyWindowAssociation(workspace, profile, !!profile.isTransient); + } this.updateProfiles([profile], [], []); return profile; } finally { @@ -367,25 +368,58 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf return profileCreationPromise; } - async updateProfile(profileToUpdate: IUserDataProfile, options: IUserDataProfileUpdateOptions): Promise { + async updateProfile(profile: IUserDataProfile, options: IUserDataProfileUpdateOptions): Promise { if (!this.enabled) { throw new Error(`Profiles are disabled in the current environment.`); } - let profile = this.profiles.find(p => p.id === profileToUpdate.id); - if (!profile) { - throw new Error(`Profile '${profileToUpdate.name}' does not exist`); + const profilesToUpdate: IUserDataProfile[] = []; + for (const existing of this.profiles) { + let profileToUpdate: Mutable | undefined; + + if (profile.id === existing.id) { + if (!existing.isDefault) { + profileToUpdate = toUserDataProfile(existing.id, options.name ?? existing.name, existing.location, this.profilesCacheHome, { + shortName: options.shortName ?? existing.shortName, + icon: options.icon === null ? undefined : options.icon ?? existing.icon, + transient: options.transient ?? existing.isTransient, + useDefaultFlags: options.useDefaultFlags ?? existing.useDefaultFlags, + workspaces: options.workspaces ?? existing.workspaces, + }, this.defaultProfile); + } else if (options.workspaces) { + profileToUpdate = existing; + profileToUpdate.workspaces = options.workspaces; + } + } + + else if (options.workspaces) { + const workspaces = existing.workspaces?.filter(w1 => !options.workspaces?.some(w2 => this.uriIdentityService.extUri.isEqual(w1, w2))); + if (existing.workspaces?.length !== workspaces?.length) { + profileToUpdate = existing; + profileToUpdate.workspaces = workspaces; + } + } + + if (profileToUpdate) { + profilesToUpdate.push(profileToUpdate); + } } - profile = toUserDataProfile(profile.id, options.name ?? profile.name, profile.location, this.profilesCacheHome, { - shortName: options.shortName ?? profile.shortName, - icon: options.icon === null ? undefined : options.icon ?? profile.icon, - transient: options.transient ?? profile.isTransient, - useDefaultFlags: options.useDefaultFlags ?? profile.useDefaultFlags - }, this.defaultProfile); - this.updateProfiles([], [], [profile]); + if (!profilesToUpdate.length) { + if (profile.isDefault) { + throw new Error('Cannot update default profile'); + } + throw new Error(`Profile '${profile.name}' does not exist`); + } - return profile; + this.updateProfiles([], [], profilesToUpdate); + + const updatedProfile = this.profiles.find(p => p.id === profile.id); + if (!updatedProfile) { + throw new Error(`Profile '${profile.name}' was not updated`); + } + + return updatedProfile; } async removeProfile(profileToRemove: IUserDataProfile): Promise { @@ -414,18 +448,6 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf this.logService.error(error); } - for (const windowId of [...this.profilesObject.emptyWindows.keys()]) { - if (profile.id === this.profilesObject.emptyWindows.get(windowId)?.id) { - this.profilesObject.emptyWindows.delete(windowId); - } - } - for (const workspace of [...this.profilesObject.workspaces.keys()]) { - if (profile.id === this.profilesObject.workspaces.get(workspace)?.id) { - this.profilesObject.workspaces.delete(workspace); - } - } - this.updateStoredProfileAssociations(); - this.updateProfiles([], [profile], []); try { @@ -447,24 +469,43 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf throw new Error(`Profile '${profileToSet.name}' does not exist`); } - this.updateWorkspaceAssociation(workspaceIdentifier, profile); + const workspace = this.getWorkspace(workspaceIdentifier); + if (URI.isUri(workspace)) { + const workspaces = profile.workspaces ? [...profile.workspaces] : []; + if (!workspaces.some(w => this.uriIdentityService.extUri.isEqual(w, workspace))) { + workspaces.push(workspace); + await this.updateProfile(profile, { workspaces }); + } + } else { + this.updateEmptyWindowAssociation(workspace, profile, false); + this.updateStoredProfiles(this.profiles); + } } - unsetWorkspace(workspaceIdentifier: IAnyWorkspaceIdentifier, transient?: boolean): void { + unsetWorkspace(workspaceIdentifier: IAnyWorkspaceIdentifier, transient: boolean = false): void { if (!this.enabled) { throw new Error(`Profiles are disabled in the current environment.`); } - this.updateWorkspaceAssociation(workspaceIdentifier, undefined, transient); + const workspace = this.getWorkspace(workspaceIdentifier); + if (URI.isUri(workspace)) { + const currentlyAssociatedProfile = this.getProfileForWorkspace(workspaceIdentifier); + if (currentlyAssociatedProfile) { + this.updateProfile(currentlyAssociatedProfile, { workspaces: currentlyAssociatedProfile.workspaces?.filter(w => !this.uriIdentityService.extUri.isEqual(w, workspace)) }); + } + } else { + this.updateEmptyWindowAssociation(workspace, undefined, transient); + this.updateStoredProfiles(this.profiles); + } } async resetWorkspaces(): Promise { - this.transientProfilesObject.folders.clear(); - this.transientProfilesObject.workspaces.clear(); this.transientProfilesObject.emptyWindows.clear(); - this.profilesObject.workspaces.clear(); this.profilesObject.emptyWindows.clear(); - this.updateStoredProfileAssociations(); + for (const profile of this.profiles) { + (>profile).workspaces = undefined; + } + this.updateProfiles([], [], this.profiles); this._onDidResetWorkspaces.fire(); } @@ -490,17 +531,9 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf getProfileForWorkspace(workspaceIdentifier: IAnyWorkspaceIdentifier): IUserDataProfile | undefined { const workspace = this.getWorkspace(workspaceIdentifier); - const profile = URI.isUri(workspace) ? this.profilesObject.workspaces.get(workspace) : this.profilesObject.emptyWindows.get(workspace); - if (profile) { - return profile; - } - if (isSingleFolderWorkspaceIdentifier(workspaceIdentifier)) { - return this.transientProfilesObject.folders.get(workspaceIdentifier.uri); - } - if (isWorkspaceIdentifier(workspaceIdentifier)) { - return this.transientProfilesObject.workspaces.get(workspaceIdentifier.configPath); - } - return this.transientProfilesObject.emptyWindows.get(workspaceIdentifier.id); + return URI.isUri(workspace) + ? this.profiles.find(p => p.workspaces?.some(w => this.uriIdentityService.extUri.isEqual(w, workspace))) + : (this.profilesObject.emptyWindows.get(workspace) ?? this.transientProfilesObject.emptyWindows.get(workspace)); } protected getWorkspace(workspaceIdentifier: IAnyWorkspaceIdentifier): URI | string { @@ -514,66 +547,64 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf } private isProfileAssociatedToWorkspace(profile: IUserDataProfile): boolean { - if ([...this.profilesObject.emptyWindows.values()].some(windowProfile => this.uriIdentityService.extUri.isEqual(windowProfile.location, profile.location))) { + if (profile.workspaces?.length) { return true; } - if ([...this.profilesObject.workspaces.values()].some(workspaceProfile => this.uriIdentityService.extUri.isEqual(workspaceProfile.location, profile.location))) { + if ([...this.profilesObject.emptyWindows.values()].some(windowProfile => this.uriIdentityService.extUri.isEqual(windowProfile.location, profile.location))) { return true; } if ([...this.transientProfilesObject.emptyWindows.values()].some(windowProfile => this.uriIdentityService.extUri.isEqual(windowProfile.location, profile.location))) { return true; } - if ([...this.transientProfilesObject.workspaces.values()].some(workspaceProfile => this.uriIdentityService.extUri.isEqual(workspaceProfile.location, profile.location))) { - return true; - } - if ([...this.transientProfilesObject.folders.values()].some(workspaceProfile => this.uriIdentityService.extUri.isEqual(workspaceProfile.location, profile.location))) { - return true; - } return false; } private updateProfiles(added: IUserDataProfile[], removed: IUserDataProfile[], updated: IUserDataProfile[]): void { - const allProfiles = [...this.profiles, ...added]; - const storedProfiles: StoredUserDataProfile[] = []; + const allProfiles: Mutable[] = [...this.profiles, ...added]; + const transientProfiles = this.transientProfilesObject.profiles; this.transientProfilesObject.profiles = []; + + const profiles: IUserDataProfile[] = []; + for (let profile of allProfiles) { - if (profile.isDefault) { - continue; - } + // removed if (removed.some(p => profile.id === p.id)) { + for (const windowId of [...this.profilesObject.emptyWindows.keys()]) { + if (profile.id === this.profilesObject.emptyWindows.get(windowId)?.id) { + this.profilesObject.emptyWindows.delete(windowId); + } + } continue; } - profile = updated.find(p => profile.id === p.id) ?? profile; - const transientProfile = transientProfiles.find(p => profile.id === p.id); - if (profile.isTransient) { - this.transientProfilesObject.profiles.push(profile); - } else { - if (transientProfile) { - for (const [windowId, p] of this.transientProfilesObject.emptyWindows.entries()) { - if (profile.id === p.id) { - this.updateWorkspaceAssociation({ id: windowId }, profile); - break; - } - } - for (const [workspace, p] of this.transientProfilesObject.workspaces.entries()) { - if (profile.id === p.id) { - this.updateWorkspaceAssociation({ id: '', configPath: workspace }, profile); - break; - } - } - for (const [folder, p] of this.transientProfilesObject.folders.entries()) { - if (profile.id === p.id) { - this.updateWorkspaceAssociation({ id: '', uri: folder }, profile); - break; + + if (!profile.isDefault) { + profile = updated.find(p => profile.id === p.id) ?? profile; + const transientProfile = transientProfiles.find(p => profile.id === p.id); + if (profile.isTransient) { + this.transientProfilesObject.profiles.push(profile); + } else { + if (transientProfile) { + // Move the empty window associations from the transient profile to the persisted profile + for (const [windowId, p] of this.transientProfilesObject.emptyWindows.entries()) { + if (profile.id === p.id) { + this.transientProfilesObject.emptyWindows.delete(windowId); + this.profilesObject.emptyWindows.set(windowId, profile); + break; + } } } } - storedProfiles.push({ location: profile.location, name: profile.name, shortName: profile.shortName, icon: profile.icon, useDefaultFlags: profile.useDefaultFlags }); } + + if (profile.workspaces?.length === 0) { + profile.workspaces = undefined; + } + + profiles.push(profile); } - this.saveStoredProfiles(storedProfiles); - this._profilesObject = undefined; + + this.updateStoredProfiles(profiles); this.triggerProfilesChanges(added, removed, updated); } @@ -581,66 +612,54 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf this._onDidChangeProfiles.fire({ added, removed, updated, all: this.profiles }); } - private updateWorkspaceAssociation(workspaceIdentifier: IAnyWorkspaceIdentifier, newProfile?: IUserDataProfile, transient?: boolean): void { + private updateEmptyWindowAssociation(windowId: string, newProfile: IUserDataProfile | undefined, transient: boolean): void { // Force transient if the new profile to associate is transient transient = newProfile?.isTransient ? true : transient; if (transient) { - if (isSingleFolderWorkspaceIdentifier(workspaceIdentifier)) { - this.transientProfilesObject.folders.delete(workspaceIdentifier.uri); - if (newProfile) { - this.transientProfilesObject.folders.set(workspaceIdentifier.uri, newProfile); - } - } - - else if (isWorkspaceIdentifier(workspaceIdentifier)) { - this.transientProfilesObject.workspaces.delete(workspaceIdentifier.configPath); - if (newProfile) { - this.transientProfilesObject.workspaces.set(workspaceIdentifier.configPath, newProfile); - } - } - - else { - this.transientProfilesObject.emptyWindows.delete(workspaceIdentifier.id); - if (newProfile) { - this.transientProfilesObject.emptyWindows.set(workspaceIdentifier.id, newProfile); - } + if (newProfile) { + this.transientProfilesObject.emptyWindows.set(windowId, newProfile); + } else { + this.transientProfilesObject.emptyWindows.delete(windowId); } } else { - // Unset the transiet workspace association if any - this.updateWorkspaceAssociation(workspaceIdentifier, undefined, true); - const workspace = this.getWorkspace(workspaceIdentifier); - - // Folder or Multiroot workspace - if (URI.isUri(workspace)) { - this.profilesObject.workspaces.delete(workspace); - if (newProfile) { - this.profilesObject.workspaces.set(workspace, newProfile); - } - } - // Empty Window - else { - this.profilesObject.emptyWindows.delete(workspace); - if (newProfile) { - this.profilesObject.emptyWindows.set(workspace, newProfile); - } + // Unset the transiet association if any + this.transientProfilesObject.emptyWindows.delete(windowId); + if (newProfile) { + this.profilesObject.emptyWindows.set(windowId, newProfile); + } else { + this.profilesObject.emptyWindows.delete(windowId); } - this.updateStoredProfileAssociations(); } } - private updateStoredProfileAssociations() { + private updateStoredProfiles(profiles: IUserDataProfile[]): void { + const storedProfiles: StoredUserDataProfile[] = []; const workspaces: IStringDictionary = {}; - for (const [workspace, profile] of this.profilesObject.workspaces.entries()) { - workspaces[workspace.toString()] = profile.id; - } const emptyWindows: IStringDictionary = {}; + + for (const profile of profiles) { + if (profile.isTransient) { + continue; + } + if (!profile.isDefault) { + storedProfiles.push({ location: profile.location, name: profile.name, shortName: profile.shortName, icon: profile.icon, useDefaultFlags: profile.useDefaultFlags }); + } + if (profile.workspaces) { + for (const workspace of profile.workspaces) { + workspaces[workspace.toString()] = profile.id; + } + } + } + for (const [windowId, profile] of this.profilesObject.emptyWindows.entries()) { emptyWindows[windowId.toString()] = profile.id; } + this.saveStoredProfileAssociations({ workspaces, emptyWindows }); + this.saveStoredProfiles(storedProfiles); this._profilesObject = undefined; } diff --git a/src/vs/platform/userDataProfile/common/userDataProfileIpc.ts b/src/vs/platform/userDataProfile/common/userDataProfileIpc.ts index ceaa5ec8f..642aa8573 100644 --- a/src/vs/platform/userDataProfile/common/userDataProfileIpc.ts +++ b/src/vs/platform/userDataProfile/common/userDataProfileIpc.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { URI, UriDto } from 'vs/base/common/uri'; -import { DidChangeProfilesEvent, IUserDataProfile, IUserDataProfileOptions, IUserDataProfilesService, IUserDataProfileUpdateOptions, reviveProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IURITransformer, transformIncomingURIs, transformOutgoingURIs } from 'vs/base/common/uriIpc'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { URI, UriDto } from '../../../base/common/uri.js'; +import { DidChangeProfilesEvent, IUserDataProfile, IUserDataProfileOptions, IUserDataProfilesService, IUserDataProfileUpdateOptions, reviveProfile } from './userDataProfile.js'; +import { IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IURITransformer, transformIncomingURIs, transformOutgoingURIs } from '../../../base/common/uriIpc.js'; export class RemoteUserDataProfilesServiceChannel implements IServerChannel { diff --git a/src/vs/platform/userDataProfile/common/userDataProfileStorageService.ts b/src/vs/platform/userDataProfile/common/userDataProfileStorageService.ts index a9a7b3771..14af8ede3 100644 --- a/src/vs/platform/userDataProfile/common/userDataProfileStorageService.ts +++ b/src/vs/platform/userDataProfile/common/userDataProfileStorageService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableMap, MutableDisposable, isDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IStorage, IStorageDatabase, Storage } from 'vs/base/parts/storage/common/storage'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { AbstractStorageService, IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget, isProfileUsingDefaultStorage } from 'vs/platform/storage/common/storage'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IRemoteService } from 'vs/platform/ipc/common/services'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ApplicationStorageDatabaseClient, ProfileStorageDatabaseClient } from 'vs/platform/storage/common/storageIpc'; -import { IUserDataProfile, IUserDataProfilesService, reviveProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { Disposable, DisposableMap, MutableDisposable, isDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IStorage, IStorageDatabase, Storage } from '../../../base/parts/storage/common/storage.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { AbstractStorageService, IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget, isProfileUsingDefaultStorage } from '../../storage/common/storage.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IRemoteService } from '../../ipc/common/services.js'; +import { ILogService } from '../../log/common/log.js'; +import { ApplicationStorageDatabaseClient, ProfileStorageDatabaseClient } from '../../storage/common/storageIpc.js'; +import { IUserDataProfile, IUserDataProfilesService, reviveProfile } from './userDataProfile.js'; export interface IProfileStorageValueChanges { readonly profile: IUserDataProfile; diff --git a/src/vs/platform/userDataProfile/electron-main/userDataProfile.ts b/src/vs/platform/userDataProfile/electron-main/userDataProfile.ts index 95348d22d..84d81036d 100644 --- a/src/vs/platform/userDataProfile/electron-main/userDataProfile.ts +++ b/src/vs/platform/userDataProfile/electron-main/userDataProfile.ts @@ -3,16 +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 { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfilesService, WillCreateProfileEvent, WillRemoveProfileEvent, IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UserDataProfilesService } from 'vs/platform/userDataProfile/node/userDataProfile'; -import { IAnyWorkspaceIdentifier, IEmptyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IStateService } from 'vs/platform/state/node/state'; +import { Event } from '../../../base/common/event.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { refineServiceDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfilesService, WillCreateProfileEvent, WillRemoveProfileEvent, IUserDataProfile } from '../common/userDataProfile.js'; +import { UserDataProfilesService } from '../node/userDataProfile.js'; +import { IAnyWorkspaceIdentifier, IEmptyWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IStateService } from '../../state/node/state.js'; export const IUserDataProfilesMainService = refineServiceDecorator(IUserDataProfilesService); export interface IUserDataProfilesMainService extends IUserDataProfilesService { diff --git a/src/vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc.ts b/src/vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc.ts index 457dac8e1..fb6c7e258 100644 --- a/src/vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc.ts +++ b/src/vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProfileStorageChanges, IProfileStorageValueChanges } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { loadKeyTargets, StorageScope, TARGET_KEY } from 'vs/platform/storage/common/storage'; -import { IBaseSerializableStorageRequest } from 'vs/platform/storage/common/storageIpc'; -import { IStorageMain } from 'vs/platform/storage/electron-main/storageMain'; -import { IStorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProfileStorageChanges, IProfileStorageValueChanges } from '../common/userDataProfileStorageService.js'; +import { loadKeyTargets, StorageScope, TARGET_KEY } from '../../storage/common/storage.js'; +import { IBaseSerializableStorageRequest } from '../../storage/common/storageIpc.js'; +import { IStorageMain } from '../../storage/electron-main/storageMain.js'; +import { IStorageMainService } from '../../storage/electron-main/storageMainService.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../common/userDataProfile.js'; export class ProfileStorageChangesListenerChannel extends Disposable implements IServerChannel { diff --git a/src/vs/platform/userDataProfile/electron-main/userDataProfilesHandler.ts b/src/vs/platform/userDataProfile/electron-main/userDataProfilesHandler.ts index ce4d44464..4531f380e 100644 --- a/src/vs/platform/userDataProfile/electron-main/userDataProfilesHandler.ts +++ b/src/vs/platform/userDataProfile/electron-main/userDataProfilesHandler.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILifecycleMainService, } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ICodeWindow, LoadReason } from 'vs/platform/window/electron-main/window'; -import { IUserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { IAnyWorkspaceIdentifier, toWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ILifecycleMainService, } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ICodeWindow, LoadReason } from '../../window/electron-main/window.js'; +import { IUserDataProfilesMainService } from './userDataProfile.js'; +import { IAnyWorkspaceIdentifier, toWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; export class UserDataProfilesHandler extends Disposable { diff --git a/src/vs/platform/userDataProfile/electron-sandbox/userDataProfileStorageService.ts b/src/vs/platform/userDataProfile/electron-sandbox/userDataProfileStorageService.ts index 313bedc9b..4eb4318c7 100644 --- a/src/vs/platform/userDataProfile/electron-sandbox/userDataProfileStorageService.ts +++ b/src/vs/platform/userDataProfile/electron-sandbox/userDataProfileStorageService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IUserDataProfileStorageService, RemoteUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; +import { IUserDataProfileStorageService, RemoteUserDataProfileStorageService } from '../common/userDataProfileStorageService.js'; +import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService } from '../common/userDataProfile.js'; +import { IMainProcessService } from '../../ipc/common/mainProcessService.js'; export class NativeUserDataProfileStorageService extends RemoteUserDataProfileStorageService { diff --git a/src/vs/platform/userDataProfile/node/userDataProfile.ts b/src/vs/platform/userDataProfile/node/userDataProfile.ts index e8de67d72..241653659 100644 --- a/src/vs/platform/userDataProfile/node/userDataProfile.ts +++ b/src/vs/platform/userDataProfile/node/userDataProfile.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI, UriComponents, UriDto } from 'vs/base/common/uri'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateReadService, IStateService } from 'vs/platform/state/node/state'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfilesService, UserDataProfilesService as BaseUserDataProfilesService, StoredUserDataProfile, StoredProfileAssociations } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { isString } from 'vs/base/common/types'; -import { SaveStrategy, StateService } from 'vs/platform/state/node/stateService'; +import { URI, UriComponents, UriDto } from '../../../base/common/uri.js'; +import { INativeEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStateReadService, IStateService } from '../../state/node/state.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfilesService, UserDataProfilesService as BaseUserDataProfilesService, StoredUserDataProfile, StoredProfileAssociations } from '../common/userDataProfile.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { isString } from '../../../base/common/types.js'; +import { SaveStrategy, StateService } from '../../state/node/stateService.js'; type StoredUserDataProfileState = StoredUserDataProfile & { location: URI | string }; diff --git a/src/vs/platform/userDataProfile/node/userDataProfileStorageService.ts b/src/vs/platform/userDataProfile/node/userDataProfileStorageService.ts index 703011c9d..233360af8 100644 --- a/src/vs/platform/userDataProfile/node/userDataProfileStorageService.ts +++ b/src/vs/platform/userDataProfile/node/userDataProfileStorageService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { RemoteUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService } from '../common/userDataProfile.js'; +import { IMainProcessService } from '../../ipc/common/mainProcessService.js'; +import { RemoteUserDataProfileStorageService } from '../common/userDataProfileStorageService.js'; export class SharedProcessUserDataProfileStorageService extends RemoteUserDataProfileStorageService { diff --git a/src/vs/platform/userDataProfile/test/common/userDataProfileService.test.ts b/src/vs/platform/userDataProfile/test/common/userDataProfileService.test.ts index a7e2da874..31d0de50c 100644 --- a/src/vs/platform/userDataProfile/test/common/userDataProfileService.test.ts +++ b/src/vs/platform/userDataProfile/test/common/userDataProfileService.test.ts @@ -4,17 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { joinPath } from 'vs/base/common/resources'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { AbstractNativeEnvironmentService } from 'vs/platform/environment/common/environmentService'; -import product from 'vs/platform/product/common/product'; -import { InMemoryUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { FileService } from '../../../files/common/fileService.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { URI } from '../../../../base/common/uri.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { AbstractNativeEnvironmentService } from '../../../environment/common/environmentService.js'; +import product from '../../../product/common/product.js'; +import { InMemoryUserDataProfilesService, UserDataProfilesService } from '../../common/userDataProfile.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { Event } from '../../../../base/common/event.js'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); @@ -234,4 +235,132 @@ suite('UserDataProfileService (Common)', () => { assert.strictEqual(profile.keybindingsResource.toString(), testObject.defaultProfile.keybindingsResource.toString()); }); + test('create profile with a workspace associates it to the profile', async () => { + const workspace = URI.file('/workspace1'); + const profile = await testObject.createProfile('id', 'name', {}, { id: workspace.path, uri: workspace }); + assert.deepStrictEqual(profile.workspaces?.length, 1); + assert.deepStrictEqual(profile.workspaces?.[0].toString(), workspace.toString()); + }); + + test('associate workspace to a profile should update workspaces', async () => { + const profile = await testObject.createProfile('id', 'name', {}); + const workspace = URI.file('/workspace1'); + + const promise = Event.toPromise(testObject.onDidChangeProfiles); + await testObject.setProfileForWorkspace({ id: workspace.path, uri: workspace }, profile); + + const actual = await promise; + assert.deepStrictEqual(actual.added.length, 0); + assert.deepStrictEqual(actual.removed.length, 0); + assert.deepStrictEqual(actual.updated.length, 1); + + assert.deepStrictEqual(actual.updated[0].id, profile.id); + assert.deepStrictEqual(actual.updated[0].workspaces?.length, 1); + assert.deepStrictEqual(actual.updated[0].workspaces[0].toString(), workspace.toString()); + }); + + test('associate same workspace to a profile should not duplicate', async () => { + const workspace = URI.file('/workspace1'); + const profile = await testObject.createProfile('id', 'name', { workspaces: [workspace] }); + + await testObject.setProfileForWorkspace({ id: workspace.path, uri: workspace }, profile); + + assert.deepStrictEqual(testObject.profiles[1].workspaces?.length, 1); + assert.deepStrictEqual(testObject.profiles[1].workspaces[0].toString(), workspace.toString()); + }); + + test('associate workspace to another profile should update workspaces', async () => { + const workspace = URI.file('/workspace1'); + const profile1 = await testObject.createProfile('id', 'name', {}, { id: workspace.path, uri: workspace }); + const profile2 = await testObject.createProfile('id1', 'name1'); + + const promise = Event.toPromise(testObject.onDidChangeProfiles); + await testObject.setProfileForWorkspace({ id: workspace.path, uri: workspace }, profile2); + + const actual = await promise; + assert.deepStrictEqual(actual.added.length, 0); + assert.deepStrictEqual(actual.removed.length, 0); + assert.deepStrictEqual(actual.updated.length, 2); + + assert.deepStrictEqual(actual.updated[0].id, profile1.id); + assert.deepStrictEqual(actual.updated[0].workspaces, undefined); + + assert.deepStrictEqual(actual.updated[1].id, profile2.id); + assert.deepStrictEqual(actual.updated[1].workspaces?.length, 1); + assert.deepStrictEqual(actual.updated[1].workspaces[0].toString(), workspace.toString()); + }); + + test('unassociate workspace to a profile should update workspaces', async () => { + const workspace = URI.file('/workspace1'); + const profile = await testObject.createProfile('id', 'name', {}, { id: workspace.path, uri: workspace }); + + const promise = Event.toPromise(testObject.onDidChangeProfiles); + testObject.unsetWorkspace({ id: workspace.path, uri: workspace }); + + const actual = await promise; + assert.deepStrictEqual(actual.added.length, 0); + assert.deepStrictEqual(actual.removed.length, 0); + assert.deepStrictEqual(actual.updated.length, 1); + + assert.deepStrictEqual(actual.updated[0].id, profile.id); + assert.deepStrictEqual(actual.updated[0].workspaces, undefined); + }); + + test('update profile workspaces - add workspace', async () => { + let profile = await testObject.createNamedProfile('name'); + const workspace = URI.file('/workspace1'); + profile = await testObject.updateProfile(profile, { workspaces: [workspace] }); + + assert.deepStrictEqual(profile.workspaces?.length, 1); + assert.deepStrictEqual(profile.workspaces[0].toString(), workspace.toString()); + }); + + test('update profile workspaces - remove workspace', async () => { + let profile = await testObject.createNamedProfile('name'); + const workspace = URI.file('/workspace1'); + profile = await testObject.updateProfile(profile, { workspaces: [workspace] }); + profile = await testObject.updateProfile(profile, { workspaces: [] }); + + assert.deepStrictEqual(profile.workspaces, undefined); + }); + + test('update profile workspaces - replace workspace', async () => { + let profile = await testObject.createNamedProfile('name'); + profile = await testObject.updateProfile(profile, { workspaces: [URI.file('/workspace1')] }); + + const workspace = URI.file('/workspace2'); + profile = await testObject.updateProfile(profile, { workspaces: [workspace] }); + + assert.deepStrictEqual(profile.workspaces?.length, 1); + assert.deepStrictEqual(profile.workspaces[0].toString(), workspace.toString()); + }); + + test('update default profile workspaces - add workspace', async () => { + const workspace = URI.file('/workspace1'); + await testObject.updateProfile(testObject.defaultProfile, { workspaces: [workspace] }); + + assert.deepStrictEqual(testObject.profiles.length, 1); + assert.deepStrictEqual(testObject.profiles[0], testObject.defaultProfile); + assert.deepStrictEqual(testObject.defaultProfile.isDefault, true); + assert.deepStrictEqual(testObject.defaultProfile.workspaces?.length, 1); + assert.deepStrictEqual(testObject.defaultProfile.workspaces[0].toString(), workspace.toString()); + }); + + test('can create transient and persistent profiles with same name', async () => { + const profile1 = await testObject.createNamedProfile('name', { transient: true }); + const profile2 = await testObject.createNamedProfile('name', { transient: true }); + const profile3 = await testObject.createNamedProfile('name'); + + assert.deepStrictEqual(profile1.name, 'name'); + assert.deepStrictEqual(!!profile1.isTransient, true); + assert.deepStrictEqual(profile2.name, 'name'); + assert.deepStrictEqual(!!profile2.isTransient, true); + assert.deepStrictEqual(profile3.name, 'name'); + assert.deepStrictEqual(!!profile3.isTransient, false); + assert.deepStrictEqual(testObject.profiles.length, 4); + assert.deepStrictEqual(testObject.profiles[1].id, profile3.id); + assert.deepStrictEqual(testObject.profiles[2].id, profile1.id); + assert.deepStrictEqual(testObject.profiles[3].id, profile2.id); + }); + }); diff --git a/src/vs/platform/userDataProfile/test/common/userDataProfileStorageService.test.ts b/src/vs/platform/userDataProfile/test/common/userDataProfileStorageService.test.ts index 36cfb4efc..3e17c72ba 100644 --- a/src/vs/platform/userDataProfile/test/common/userDataProfileStorageService.test.ts +++ b/src/vs/platform/userDataProfile/test/common/userDataProfileStorageService.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Emitter, Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { InMemoryStorageDatabase, IStorageItemsChangeEvent, IUpdateRequest, Storage } from 'vs/base/parts/storage/common/storage'; -import { AbstractUserDataProfileStorageService, IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { InMemoryStorageService, loadKeyTargets, StorageTarget, TARGET_KEY } from 'vs/platform/storage/common/storage'; -import { IUserDataProfile, toUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { URI } from '../../../../base/common/uri.js'; +import { InMemoryStorageDatabase, IStorageItemsChangeEvent, IUpdateRequest, Storage } from '../../../../base/parts/storage/common/storage.js'; +import { AbstractUserDataProfileStorageService, IUserDataProfileStorageService } from '../../common/userDataProfileStorageService.js'; +import { InMemoryStorageService, loadKeyTargets, StorageTarget, TARGET_KEY } from '../../../storage/common/storage.js'; +import { IUserDataProfile, toUserDataProfile } from '../../common/userDataProfile.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; class TestStorageDatabase extends InMemoryStorageDatabase { diff --git a/src/vs/platform/userDataProfile/test/electron-main/userDataProfileMainService.test.ts b/src/vs/platform/userDataProfile/test/electron-main/userDataProfileMainService.test.ts index 8797fafc6..ce4bf6934 100644 --- a/src/vs/platform/userDataProfile/test/electron-main/userDataProfileMainService.test.ts +++ b/src/vs/platform/userDataProfile/test/electron-main/userDataProfileMainService.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { joinPath } from 'vs/base/common/resources'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { AbstractNativeEnvironmentService } from 'vs/platform/environment/common/environmentService'; -import product from 'vs/platform/product/common/product'; -import { UserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { SaveStrategy, StateService } from 'vs/platform/state/node/stateService'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { FileService } from '../../../files/common/fileService.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { URI } from '../../../../base/common/uri.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { AbstractNativeEnvironmentService } from '../../../environment/common/environmentService.js'; +import product from '../../../product/common/product.js'; +import { UserDataProfilesMainService } from '../../electron-main/userDataProfile.js'; +import { SaveStrategy, StateService } from '../../../state/node/stateService.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); diff --git a/src/vs/platform/userDataSync/common/abstractSynchronizer.ts b/src/vs/platform/userDataSync/common/abstractSynchronizer.ts index b62a1be3d..5f40daba1 100644 --- a/src/vs/platform/userDataSync/common/abstractSynchronizer.ts +++ b/src/vs/platform/userDataSync/common/abstractSynchronizer.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals } from 'vs/base/common/arrays'; -import { CancelablePromise, createCancelablePromise, ThrottledDelayer } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Emitter, Event } from 'vs/base/common/event'; -import { parse, ParseError } from 'vs/base/common/json'; -import { FormattingOptions } from 'vs/base/common/jsonFormatter'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IExtUri } from 'vs/base/common/resources'; -import { uppercaseFirstLetter } from 'vs/base/common/strings'; -import { isUndefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IHeaders } from 'vs/base/parts/request/common/request'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { FileChangesEvent, FileOperationError, FileOperationResult, IFileContent, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { Change, getLastSyncResourceUri, IRemoteUserData, IResourcePreview as IBaseResourcePreview, ISyncData, IUserDataSyncResourcePreview as IBaseSyncResourcePreview, IUserData, IUserDataSyncResourceInitializer, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, MergeState, PREVIEW_DIR_NAME, SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_CONFIGURATION_SCOPE, USER_DATA_SYNC_SCHEME, IUserDataResourceManifest, getPathSegments, IUserDataSyncResourceConflicts, IUserDataSyncResource } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { equals } from '../../../base/common/arrays.js'; +import { CancelablePromise, createCancelablePromise, ThrottledDelayer } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { parse, ParseError } from '../../../base/common/json.js'; +import { FormattingOptions } from '../../../base/common/jsonFormatter.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IExtUri } from '../../../base/common/resources.js'; +import { uppercaseFirstLetter } from '../../../base/common/strings.js'; +import { isUndefined } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { IHeaders } from '../../../base/parts/request/common/request.js'; +import { localize } from '../../../nls.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { FileChangesEvent, FileOperationError, FileOperationResult, IFileContent, IFileService, toFileOperationResult } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { getServiceMachineId } from '../../externalServices/common/serviceMachineId.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { Change, getLastSyncResourceUri, IRemoteUserData, IResourcePreview as IBaseResourcePreview, ISyncData, IUserDataSyncResourcePreview as IBaseSyncResourcePreview, IUserData, IUserDataSyncResourceInitializer, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, MergeState, PREVIEW_DIR_NAME, SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_CONFIGURATION_SCOPE, USER_DATA_SYNC_SCHEME, IUserDataResourceManifest, getPathSegments, IUserDataSyncResourceConflicts, IUserDataSyncResource } from './userDataSync.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; type IncompatibleSyncSourceClassification = { owner: 'sandy081'; diff --git a/src/vs/platform/userDataSync/common/content.ts b/src/vs/platform/userDataSync/common/content.ts index 5dd3d97a4..77a6f04df 100644 --- a/src/vs/platform/userDataSync/common/content.ts +++ b/src/vs/platform/userDataSync/common/content.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { JSONPath } from 'vs/base/common/json'; -import { setProperty } from 'vs/base/common/jsonEdit'; -import { FormattingOptions } from 'vs/base/common/jsonFormatter'; +import { JSONPath } from '../../../base/common/json.js'; +import { setProperty } from '../../../base/common/jsonEdit.js'; +import { FormattingOptions } from '../../../base/common/jsonFormatter.js'; export function edit(content: string, originalPath: JSONPath, value: any, formattingOptions: FormattingOptions): string { diff --git a/src/vs/platform/userDataSync/common/extensionsMerge.ts b/src/vs/platform/userDataSync/common/extensionsMerge.ts index 98204d9b4..f3eeaba27 100644 --- a/src/vs/platform/userDataSync/common/extensionsMerge.ts +++ b/src/vs/platform/userDataSync/common/extensionsMerge.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import { deepClone, equals } from 'vs/base/common/objects'; -import * as semver from 'vs/base/common/semver/semver'; -import { assertIsDefined } from 'vs/base/common/types'; -import { IExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { ILocalSyncExtension, IRemoteSyncExtension, ISyncExtension } from 'vs/platform/userDataSync/common/userDataSync'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { deepClone, equals } from '../../../base/common/objects.js'; +import * as semver from '../../../base/common/semver/semver.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { IExtensionIdentifier } from '../../extensions/common/extensions.js'; +import { ILocalSyncExtension, IRemoteSyncExtension, ISyncExtension } from './userDataSync.js'; export interface IMergeResult { readonly local: { added: ISyncExtension[]; removed: IExtensionIdentifier[]; updated: ISyncExtension[] }; diff --git a/src/vs/platform/userDataSync/common/extensionsSync.ts b/src/vs/platform/userDataSync/common/extensionsSync.ts index 7af2df913..c917d7ac8 100644 --- a/src/vs/platform/userDataSync/common/extensionsSync.ts +++ b/src/vs/platform/userDataSync/common/extensionsSync.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { toFormattedString } from 'vs/base/common/jsonFormatter'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { compare } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService'; -import { IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, ILocalExtension, ExtensionManagementError, ExtensionManagementErrorCode, IGalleryExtension, DISABLED_EXTENSIONS_STORAGE_PATH, EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT, EXTENSION_INSTALL_SOURCE_CONTEXT, InstallExtensionInfo, ExtensionInstallSource } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionStorageService, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { ExtensionType, IExtensionIdentifier, isApplicationScopedExtension } from 'vs/platform/extensions/common/extensions'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractInitializer, AbstractSynchroniser, getSyncResourceLogLabel, IAcceptResult, IMergeResult, IResourcePreview } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { IMergeResult as IExtensionMergeResult, merge } from 'vs/platform/userDataSync/common/extensionsMerge'; -import { IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions'; -import { Change, IRemoteUserData, ISyncData, ISyncExtension, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME, ILocalSyncExtension } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; +import { Promises } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { Event } from '../../../base/common/event.js'; +import { toFormattedString } from '../../../base/common/jsonFormatter.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { compare } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { GlobalExtensionEnablementService } from '../../extensionManagement/common/extensionEnablementService.js'; +import { IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, ILocalExtension, ExtensionManagementError, ExtensionManagementErrorCode, IGalleryExtension, DISABLED_EXTENSIONS_STORAGE_PATH, EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT, EXTENSION_INSTALL_SOURCE_CONTEXT, InstallExtensionInfo, ExtensionInstallSource } from '../../extensionManagement/common/extensionManagement.js'; +import { areSameExtensions } from '../../extensionManagement/common/extensionManagementUtil.js'; +import { ExtensionStorageService, IExtensionStorageService } from '../../extensionManagement/common/extensionStorage.js'; +import { ExtensionType, IExtensionIdentifier, isApplicationScopedExtension } from '../../extensions/common/extensions.js'; +import { IFileService } from '../../files/common/files.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../instantiation/common/serviceCollection.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { AbstractInitializer, AbstractSynchroniser, getSyncResourceLogLabel, IAcceptResult, IMergeResult, IResourcePreview } from './abstractSynchronizer.js'; +import { IMergeResult as IExtensionMergeResult, merge } from './extensionsMerge.js'; +import { IIgnoredExtensionsManagementService } from './ignoredExtensions.js'; +import { Change, IRemoteUserData, ISyncData, ISyncExtension, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME, ILocalSyncExtension } from './userDataSync.js'; +import { IUserDataProfileStorageService } from '../../userDataProfile/common/userDataProfileStorageService.js'; type IExtensionResourceMergeResult = IAcceptResult & IExtensionMergeResult; diff --git a/src/vs/platform/userDataSync/common/globalStateMerge.ts b/src/vs/platform/userDataSync/common/globalStateMerge.ts index 527ec9366..4e5369814 100644 --- a/src/vs/platform/userDataSync/common/globalStateMerge.ts +++ b/src/vs/platform/userDataSync/common/globalStateMerge.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import * as objects from 'vs/base/common/objects'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStorageValue, SYNC_SERVICE_URL_TYPE } from 'vs/platform/userDataSync/common/userDataSync'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import * as objects from '../../../base/common/objects.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStorageValue, SYNC_SERVICE_URL_TYPE } from './userDataSync.js'; export interface IMergeResult { local: { added: IStringDictionary; removed: string[]; updated: IStringDictionary }; diff --git a/src/vs/platform/userDataSync/common/globalStateSync.ts b/src/vs/platform/userDataSync/common/globalStateSync.ts index 7a28512a2..75ea24464 100644 --- a/src/vs/platform/userDataSync/common/globalStateSync.ts +++ b/src/vs/platform/userDataSync/common/globalStateSync.ts @@ -3,33 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { parse } from 'vs/base/common/json'; -import { toFormattedString } from 'vs/base/common/jsonFormatter'; -import { isWeb } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IHeaders } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IStorageEntry, IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { AbstractInitializer, AbstractSynchroniser, getSyncResourceLogLabel, IAcceptResult, IMergeResult, IResourcePreview, isSyncData } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { edit } from 'vs/platform/userDataSync/common/content'; -import { merge } from 'vs/platform/userDataSync/common/globalStateMerge'; -import { ALL_SYNC_RESOURCES, Change, createSyncHeaders, getEnablementKey, IGlobalState, IRemoteUserData, IStorageValue, ISyncData, IUserData, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, SYNC_SERVICE_URL_TYPE, UserDataSyncError, UserDataSyncErrorCode, UserDataSyncStoreType, USER_DATA_SYNC_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncStoreClient } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { getErrorMessage } from '../../../base/common/errors.js'; +import { Event } from '../../../base/common/event.js'; +import { parse } from '../../../base/common/json.js'; +import { toFormattedString } from '../../../base/common/jsonFormatter.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IHeaders } from '../../../base/parts/request/common/request.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { getServiceMachineId } from '../../externalServices/common/serviceMachineId.js'; +import { IStorageEntry, IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { AbstractInitializer, AbstractSynchroniser, getSyncResourceLogLabel, IAcceptResult, IMergeResult, IResourcePreview, isSyncData } from './abstractSynchronizer.js'; +import { edit } from './content.js'; +import { merge } from './globalStateMerge.js'; +import { ALL_SYNC_RESOURCES, Change, createSyncHeaders, getEnablementKey, IGlobalState, IRemoteUserData, IStorageValue, ISyncData, IUserData, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, SYNC_SERVICE_URL_TYPE, UserDataSyncError, UserDataSyncErrorCode, UserDataSyncStoreType, USER_DATA_SYNC_SCHEME } from './userDataSync.js'; +import { UserDataSyncStoreClient } from './userDataSyncStoreService.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { IUserDataProfileStorageService } from '../../userDataProfile/common/userDataProfileStorageService.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; const argvStoragePrefx = 'globalState.argv.'; const argvProperties: string[] = ['locale']; diff --git a/src/vs/platform/userDataSync/common/ignoredExtensions.ts b/src/vs/platform/userDataSync/common/ignoredExtensions.ts index d0e9c6c98..309cb7453 100644 --- a/src/vs/platform/userDataSync/common/ignoredExtensions.ts +++ b/src/vs/platform/userDataSync/common/ignoredExtensions.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { distinct } from '../../../base/common/arrays.js'; +import { ConfigurationTarget, IConfigurationService } from '../../configuration/common/configuration.js'; +import { ILocalExtension } from '../../extensionManagement/common/extensionManagement.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IIgnoredExtensionsManagementService = createDecorator('IIgnoredExtensionsManagementService'); export interface IIgnoredExtensionsManagementService { diff --git a/src/vs/platform/userDataSync/common/keybindingsMerge.ts b/src/vs/platform/userDataSync/common/keybindingsMerge.ts index fc1b93f55..054e4e747 100644 --- a/src/vs/platform/userDataSync/common/keybindingsMerge.ts +++ b/src/vs/platform/userDataSync/common/keybindingsMerge.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals } from 'vs/base/common/arrays'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { parse } from 'vs/base/common/json'; -import { FormattingOptions } from 'vs/base/common/jsonFormatter'; -import * as objects from 'vs/base/common/objects'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IUserFriendlyKeybinding } from 'vs/platform/keybinding/common/keybinding'; -import * as contentUtil from 'vs/platform/userDataSync/common/content'; -import { IUserDataSyncUtilService } from 'vs/platform/userDataSync/common/userDataSync'; +import { equals } from '../../../base/common/arrays.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { parse } from '../../../base/common/json.js'; +import { FormattingOptions } from '../../../base/common/jsonFormatter.js'; +import * as objects from '../../../base/common/objects.js'; +import { ContextKeyExpr } from '../../contextkey/common/contextkey.js'; +import { IUserFriendlyKeybinding } from '../../keybinding/common/keybinding.js'; +import * as contentUtil from './content.js'; +import { IUserDataSyncUtilService } from './userDataSync.js'; interface ICompareResult { added: Set; diff --git a/src/vs/platform/userDataSync/common/keybindingsSync.ts b/src/vs/platform/userDataSync/common/keybindingsSync.ts index 715707a19..08eedc3ba 100644 --- a/src/vs/platform/userDataSync/common/keybindingsSync.ts +++ b/src/vs/platform/userDataSync/common/keybindingsSync.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { parse } from 'vs/base/common/json'; -import { OperatingSystem, OS } from 'vs/base/common/platform'; -import { isUndefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractInitializer, AbstractJsonFileSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { merge } from 'vs/platform/userDataSync/common/keybindingsMerge'; -import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, CONFIG_SYNC_KEYBINDINGS_PER_PLATFORM } from 'vs/platform/userDataSync/common/userDataSync'; +import { isNonEmptyArray } from '../../../base/common/arrays.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { parse } from '../../../base/common/json.js'; +import { OperatingSystem, OS } from '../../../base/common/platform.js'; +import { isUndefined } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { FileOperationError, FileOperationResult, IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { AbstractInitializer, AbstractJsonFileSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from './abstractSynchronizer.js'; +import { merge } from './keybindingsMerge.js'; +import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, CONFIG_SYNC_KEYBINDINGS_PER_PLATFORM } from './userDataSync.js'; interface ISyncContent { mac?: string; diff --git a/src/vs/platform/userDataSync/common/settingsMerge.ts b/src/vs/platform/userDataSync/common/settingsMerge.ts index fdda70dfc..a05ae53ff 100644 --- a/src/vs/platform/userDataSync/common/settingsMerge.ts +++ b/src/vs/platform/userDataSync/common/settingsMerge.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { JSONVisitor, parse, visit } from 'vs/base/common/json'; -import { applyEdits, setProperty, withFormatting } from 'vs/base/common/jsonEdit'; -import { Edit, FormattingOptions, getEOL } from 'vs/base/common/jsonFormatter'; -import * as objects from 'vs/base/common/objects'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import * as contentUtil from 'vs/platform/userDataSync/common/content'; -import { getDisallowedIgnoredSettings, IConflictSetting } from 'vs/platform/userDataSync/common/userDataSync'; +import { distinct } from '../../../base/common/arrays.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { JSONVisitor, parse, visit } from '../../../base/common/json.js'; +import { applyEdits, setProperty, withFormatting } from '../../../base/common/jsonEdit.js'; +import { Edit, FormattingOptions, getEOL } from '../../../base/common/jsonFormatter.js'; +import * as objects from '../../../base/common/objects.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import * as contentUtil from './content.js'; +import { getDisallowedIgnoredSettings, IConflictSetting } from './userDataSync.js'; export interface IMergeResult { localContent: string | null; diff --git a/src/vs/platform/userDataSync/common/settingsSync.ts b/src/vs/platform/userDataSync/common/settingsSync.ts index c9499d33e..9819dd97d 100644 --- a/src/vs/platform/userDataSync/common/settingsSync.ts +++ b/src/vs/platform/userDataSync/common/settingsSync.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationModelParser } from 'vs/platform/configuration/common/configurationModels'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionType } from 'vs/platform/extensions/common/extensions'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractInitializer, AbstractJsonFileSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { getIgnoredSettings, isEmpty, merge, updateIgnoredSettings } from 'vs/platform/userDataSync/common/settingsMerge'; -import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_CONFIGURATION_SCOPE, USER_DATA_SYNC_SCHEME, IUserDataResourceManifest, getIgnoredSettingsForExtension } from 'vs/platform/userDataSync/common/userDataSync'; +import { distinct } from '../../../base/common/arrays.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ConfigurationTarget, IConfigurationService } from '../../configuration/common/configuration.js'; +import { ConfigurationModelParser } from '../../configuration/common/configurationModels.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IExtensionManagementService } from '../../extensionManagement/common/extensionManagement.js'; +import { ExtensionType } from '../../extensions/common/extensions.js'; +import { FileOperationError, FileOperationResult, IFileService } from '../../files/common/files.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { AbstractInitializer, AbstractJsonFileSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from './abstractSynchronizer.js'; +import { getIgnoredSettings, isEmpty, merge, updateIgnoredSettings } from './settingsMerge.js'; +import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_CONFIGURATION_SCOPE, USER_DATA_SYNC_SCHEME, IUserDataResourceManifest, getIgnoredSettingsForExtension } from './userDataSync.js'; interface ISettingsResourcePreview extends IFileResourcePreview { previewResult: IMergeResult; diff --git a/src/vs/platform/userDataSync/common/snippetsMerge.ts b/src/vs/platform/userDataSync/common/snippetsMerge.ts index 4dd6a8797..926665904 100644 --- a/src/vs/platform/userDataSync/common/snippetsMerge.ts +++ b/src/vs/platform/userDataSync/common/snippetsMerge.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; +import { IStringDictionary } from '../../../base/common/collections.js'; export interface IMergeResult { local: { diff --git a/src/vs/platform/userDataSync/common/snippetsSync.ts b/src/vs/platform/userDataSync/common/snippetsSync.ts index a538e9e7a..abf3eb632 100644 --- a/src/vs/platform/userDataSync/common/snippetsSync.ts +++ b/src/vs/platform/userDataSync/common/snippetsSync.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Event } from 'vs/base/common/event'; -import { deepClone } from 'vs/base/common/objects'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { FileOperationError, FileOperationResult, IFileContent, IFileService, IFileStat } from 'vs/platform/files/common/files'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractInitializer, AbstractSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { areSame, IMergeResult as ISnippetsMergeResult, merge } from 'vs/platform/userDataSync/common/snippetsMerge'; -import { Change, IRemoteUserData, ISyncData, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Event } from '../../../base/common/event.js'; +import { deepClone } from '../../../base/common/objects.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { FileOperationError, FileOperationResult, IFileContent, IFileService, IFileStat } from '../../files/common/files.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { AbstractInitializer, AbstractSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from './abstractSynchronizer.js'; +import { areSame, IMergeResult as ISnippetsMergeResult, merge } from './snippetsMerge.js'; +import { Change, IRemoteUserData, ISyncData, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME } from './userDataSync.js'; interface ISnippetsResourcePreview extends IFileResourcePreview { previewResult: IMergeResult; diff --git a/src/vs/platform/userDataSync/common/tasksSync.ts b/src/vs/platform/userDataSync/common/tasksSync.ts index 3c764f33b..088c29044 100644 --- a/src/vs/platform/userDataSync/common/tasksSync.ts +++ b/src/vs/platform/userDataSync/common/tasksSync.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractFileSynchroniser, AbstractInitializer, IAcceptResult, IFileResourcePreview, IMergeResult } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { AbstractFileSynchroniser, AbstractInitializer, IAcceptResult, IFileResourcePreview, IMergeResult } from './abstractSynchronizer.js'; +import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME } from './userDataSync.js'; interface ITasksSyncContent { tasks?: string; diff --git a/src/vs/platform/userDataSync/common/userDataAutoSyncService.ts b/src/vs/platform/userDataSync/common/userDataAutoSyncService.ts index f6ebd2194..f868cccd7 100644 --- a/src/vs/platform/userDataSync/common/userDataAutoSyncService.ts +++ b/src/vs/platform/userDataSync/common/userDataAutoSyncService.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, disposableTimeout, ThrottledDelayer, timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toLocalISOString } from 'vs/base/common/date'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { isCancellationError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { isWeb } from 'vs/base/common/platform'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUserDataSyncTask, IUserDataAutoSyncService, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, UserDataAutoSyncError, UserDataSyncError, UserDataSyncErrorCode } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount'; -import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; +import { CancelablePromise, createCancelablePromise, disposableTimeout, ThrottledDelayer, timeout } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toLocalISOString } from '../../../base/common/date.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, IDisposable, MutableDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { isEqual } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUserDataSyncTask, IUserDataAutoSyncService, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, UserDataAutoSyncError, UserDataSyncError, UserDataSyncErrorCode } from './userDataSync.js'; +import { IUserDataSyncAccountService } from './userDataSyncAccount.js'; +import { IUserDataSyncMachinesService } from './userDataSyncMachines.js'; type AutoSyncClassification = { owner: 'sandy081'; diff --git a/src/vs/platform/userDataSync/common/userDataProfilesManifestMerge.ts b/src/vs/platform/userDataSync/common/userDataProfilesManifestMerge.ts index a6957351f..6e5b01080 100644 --- a/src/vs/platform/userDataSync/common/userDataProfilesManifestMerge.ts +++ b/src/vs/platform/userDataSync/common/userDataProfilesManifestMerge.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals } from 'vs/base/common/objects'; -import { IUserDataProfile, UseDefaultProfileFlags } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { ISyncUserDataProfile } from 'vs/platform/userDataSync/common/userDataSync'; +import { equals } from '../../../base/common/objects.js'; +import { IUserDataProfile, UseDefaultProfileFlags } from '../../userDataProfile/common/userDataProfile.js'; +import { ISyncUserDataProfile } from './userDataSync.js'; interface IRelaxedMergeResult { local: { added: ISyncUserDataProfile[]; removed: IUserDataProfile[]; updated: ISyncUserDataProfile[] }; diff --git a/src/vs/platform/userDataSync/common/userDataProfilesManifestSync.ts b/src/vs/platform/userDataSync/common/userDataProfilesManifestSync.ts index 13b099ee1..2f72b653b 100644 --- a/src/vs/platform/userDataSync/common/userDataProfilesManifestSync.ts +++ b/src/vs/platform/userDataSync/common/userDataProfilesManifestSync.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toFormattedString } from 'vs/base/common/jsonFormatter'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractSynchroniser, IAcceptResult, IMergeResult, IResourcePreview } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { merge } from 'vs/platform/userDataSync/common/userDataProfilesManifestMerge'; -import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME, ISyncUserDataProfile, ISyncData, IUserDataResourceManifest, UserDataSyncError, UserDataSyncErrorCode } from 'vs/platform/userDataSync/common/userDataSync'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toFormattedString } from '../../../base/common/jsonFormatter.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { AbstractSynchroniser, IAcceptResult, IMergeResult, IResourcePreview } from './abstractSynchronizer.js'; +import { merge } from './userDataProfilesManifestMerge.js'; +import { Change, IRemoteUserData, IUserDataSyncLocalStoreService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, SyncResource, USER_DATA_SYNC_SCHEME, ISyncUserDataProfile, ISyncData, IUserDataResourceManifest, UserDataSyncError, UserDataSyncErrorCode } from './userDataSync.js'; interface IUserDataProfileManifestResourceMergeResult extends IAcceptResult { readonly local: { added: ISyncUserDataProfile[]; removed: IUserDataProfile[]; updated: ISyncUserDataProfile[] }; diff --git a/src/vs/platform/userDataSync/common/userDataSync.ts b/src/vs/platform/userDataSync/common/userDataSync.ts index ed81c9196..05a93efd6 100644 --- a/src/vs/platform/userDataSync/common/userDataSync.ts +++ b/src/vs/platform/userDataSync/common/userDataSync.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { distinct } from 'vs/base/common/arrays'; -import { VSBufferReadableStream } from 'vs/base/common/buffer'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Event } from 'vs/base/common/event'; -import { FormattingOptions } from 'vs/base/common/jsonFormatter'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IExtUri } from 'vs/base/common/resources'; -import { isObject, isString } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IHeaders } from 'vs/base/parts/request/common/request'; -import { localize } from 'vs/nls'; -import { allSettings, ConfigurationScope, Extensions as ConfigurationExtensions, IConfigurationRegistry, IRegisteredConfigurationPropertySchema, getAllConfigurationProperties, parseScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { EXTENSION_IDENTIFIER_PATTERN, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Extensions as JSONExtensions, IJSONContributionRegistry } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IUserDataProfile, UseDefaultProfileFlags } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUserDataSyncMachine } from 'vs/platform/userDataSync/common/userDataSyncMachines'; +import { distinct } from '../../../base/common/arrays.js'; +import { VSBufferReadableStream } from '../../../base/common/buffer.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Event } from '../../../base/common/event.js'; +import { FormattingOptions } from '../../../base/common/jsonFormatter.js'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { IExtUri } from '../../../base/common/resources.js'; +import { isObject, isString } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { IHeaders } from '../../../base/parts/request/common/request.js'; +import { localize } from '../../../nls.js'; +import { allSettings, ConfigurationScope, Extensions as ConfigurationExtensions, IConfigurationRegistry, IRegisteredConfigurationPropertySchema, getAllConfigurationProperties, parseScope } from '../../configuration/common/configurationRegistry.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { EXTENSION_IDENTIFIER_PATTERN, IExtensionIdentifier } from '../../extensionManagement/common/extensionManagement.js'; +import { IExtensionManifest } from '../../extensions/common/extensions.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { Extensions as JSONExtensions, IJSONContributionRegistry } from '../../jsonschemas/common/jsonContributionRegistry.js'; +import { ILogService } from '../../log/common/log.js'; +import { Registry } from '../../registry/common/platform.js'; +import { IUserDataProfile, UseDefaultProfileFlags } from '../../userDataProfile/common/userDataProfile.js'; +import { IUserDataSyncMachine } from './userDataSyncMachines.js'; export function getDisallowedIgnoredSettings(): string[] { const allSettings = Registry.as(ConfigurationExtensions.Configuration).getConfigurationProperties(); diff --git a/src/vs/platform/userDataSync/common/userDataSyncAccount.ts b/src/vs/platform/userDataSync/common/userDataSyncAccount.ts index eace7baea..1de4b5a92 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncAccount.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncAccount.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IUserDataSyncLogService, IUserDataSyncStoreService, UserDataSyncErrorCode } from 'vs/platform/userDataSync/common/userDataSync'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IUserDataSyncLogService, IUserDataSyncStoreService, UserDataSyncErrorCode } from './userDataSync.js'; export interface IUserDataSyncAccount { readonly authenticationProviderId: string; diff --git a/src/vs/platform/userDataSync/common/userDataSyncEnablementService.ts b/src/vs/platform/userDataSync/common/userDataSyncEnablementService.ts index e1606de95..c23c49aa8 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncEnablementService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncEnablementService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isWeb } from 'vs/base/common/platform'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IApplicationStorageValueChangeEvent, IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ALL_SYNC_RESOURCES, getEnablementKey, IUserDataSyncEnablementService, IUserDataSyncStoreManagementService, SyncResource } from 'vs/platform/userDataSync/common/userDataSync'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IApplicationStorageValueChangeEvent, IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { ALL_SYNC_RESOURCES, getEnablementKey, IUserDataSyncEnablementService, IUserDataSyncStoreManagementService, SyncResource } from './userDataSync.js'; type SyncEnablementClassification = { owner: 'sandy081'; diff --git a/src/vs/platform/userDataSync/common/userDataSyncIpc.ts b/src/vs/platform/userDataSync/common/userDataSyncIpc.ts index ede978060..9bd2359a9 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncIpc.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncIpc.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IUserDataSyncStore, IUserDataSyncStoreManagementService, UserDataSyncStoreType } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataSyncAccount, IUserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount'; -import { AbstractUserDataSyncStoreManagementService } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { IUserDataSyncStore, IUserDataSyncStoreManagementService, UserDataSyncStoreType } from './userDataSync.js'; +import { IUserDataSyncAccount, IUserDataSyncAccountService } from './userDataSyncAccount.js'; +import { AbstractUserDataSyncStoreManagementService } from './userDataSyncStoreService.js'; export class UserDataSyncAccountServiceChannel implements IServerChannel { constructor(private readonly service: IUserDataSyncAccountService) { } diff --git a/src/vs/platform/userDataSync/common/userDataSyncLocalStoreService.ts b/src/vs/platform/userDataSync/common/userDataSyncLocalStoreService.ts index 8c505b3ae..53acee377 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncLocalStoreService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncLocalStoreService.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Promises } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { toLocalISOString } from 'vs/base/common/date'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { FileOperationResult, IFileService, IFileStat, toFileOperationResult } from 'vs/platform/files/common/files'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { ALL_SYNC_RESOURCES, IResourceRefHandle, IUserDataSyncLocalStoreService, IUserDataSyncLogService, SyncResource } from 'vs/platform/userDataSync/common/userDataSync'; +import { Promises } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { toLocalISOString } from '../../../base/common/date.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { joinPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { FileOperationResult, IFileService, IFileStat, toFileOperationResult } from '../../files/common/files.js'; +import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { ALL_SYNC_RESOURCES, IResourceRefHandle, IUserDataSyncLocalStoreService, IUserDataSyncLogService, SyncResource } from './userDataSync.js'; export class UserDataSyncLocalStoreService extends Disposable implements IUserDataSyncLocalStoreService { diff --git a/src/vs/platform/userDataSync/common/userDataSyncLog.ts b/src/vs/platform/userDataSync/common/userDataSyncLog.ts index 4dffdbc94..464be1fa9 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncLog.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncLog.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { joinPath } from 'vs/base/common/resources'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { AbstractLogger, ILogger, ILoggerService } from 'vs/platform/log/common/log'; -import { IUserDataSyncLogService, USER_DATA_SYNC_LOG_ID } from 'vs/platform/userDataSync/common/userDataSync'; +import { joinPath } from '../../../base/common/resources.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { AbstractLogger, ILogger, ILoggerService } from '../../log/common/log.js'; +import { IUserDataSyncLogService, USER_DATA_SYNC_LOG_ID } from './userDataSync.js'; export class UserDataSyncLogService extends AbstractLogger implements IUserDataSyncLogService { diff --git a/src/vs/platform/userDataSync/common/userDataSyncMachines.ts b/src/vs/platform/userDataSync/common/userDataSyncMachines.ts index ad3f8f63a..1c3620642 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncMachines.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncMachines.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isAndroid, isChrome, isEdge, isFirefox, isSafari, isWeb, Platform, platform, PlatformToString } from 'vs/base/common/platform'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IUserData, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSync'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { isAndroid, isChrome, isEdge, isFirefox, isSafari, isWeb, Platform, platform, PlatformToString } from '../../../base/common/platform.js'; +import { escapeRegExpCharacters } from '../../../base/common/strings.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IProductService } from '../../product/common/productService.js'; +import { getServiceMachineId } from '../../externalServices/common/serviceMachineId.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { IUserData, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncStoreService } from './userDataSync.js'; export interface IMachineData { id: string; diff --git a/src/vs/platform/userDataSync/common/userDataSyncResourceProvider.ts b/src/vs/platform/userDataSync/common/userDataSyncResourceProvider.ts index d68b3ee41..6fc54bd13 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncResourceProvider.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncResourceProvider.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtUri } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { ISyncData, ISyncResourceHandle, IUserData, IUserDataSyncLocalStoreService, IUserDataSyncLogService, IUserDataSyncStoreService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, IUserDataSyncResourceProviderService, ISyncUserDataProfile, CONFIG_SYNC_KEYBINDINGS_PER_PLATFORM, IUserDataSyncResource } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { isSyncData } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { parseSnippets } from 'vs/platform/userDataSync/common/snippetsSync'; -import { parseSettingsSyncContent } from 'vs/platform/userDataSync/common/settingsSync'; -import { getKeybindingsContentFromSyncContent } from 'vs/platform/userDataSync/common/keybindingsSync'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { getTasksContentFromSyncContent } from 'vs/platform/userDataSync/common/tasksSync'; -import { LocalExtensionsProvider, parseExtensions, stringify as stringifyExtensions } from 'vs/platform/userDataSync/common/extensionsSync'; -import { LocalGlobalStateProvider, stringify as stringifyGlobalState } from 'vs/platform/userDataSync/common/globalStateSync'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { parseUserDataProfilesManifest, stringifyLocalProfiles } from 'vs/platform/userDataSync/common/userDataProfilesManifestSync'; -import { toFormattedString } from 'vs/base/common/jsonFormatter'; -import { trim } from 'vs/base/common/strings'; -import { IMachinesData, IUserDataSyncMachine } from 'vs/platform/userDataSync/common/userDataSyncMachines'; +import { IExtUri } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { getServiceMachineId } from '../../externalServices/common/serviceMachineId.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.js'; +import { ISyncData, ISyncResourceHandle, IUserData, IUserDataSyncLocalStoreService, IUserDataSyncLogService, IUserDataSyncStoreService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, IUserDataSyncResourceProviderService, ISyncUserDataProfile, CONFIG_SYNC_KEYBINDINGS_PER_PLATFORM, IUserDataSyncResource } from './userDataSync.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { isSyncData } from './abstractSynchronizer.js'; +import { parseSnippets } from './snippetsSync.js'; +import { parseSettingsSyncContent } from './settingsSync.js'; +import { getKeybindingsContentFromSyncContent } from './keybindingsSync.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { getTasksContentFromSyncContent } from './tasksSync.js'; +import { LocalExtensionsProvider, parseExtensions, stringify as stringifyExtensions } from './extensionsSync.js'; +import { LocalGlobalStateProvider, stringify as stringifyGlobalState } from './globalStateSync.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { parseUserDataProfilesManifest, stringifyLocalProfiles } from './userDataProfilesManifestSync.js'; +import { toFormattedString } from '../../../base/common/jsonFormatter.js'; +import { trim } from '../../../base/common/strings.js'; +import { IMachinesData, IUserDataSyncMachine } from './userDataSyncMachines.js'; interface ISyncResourceUriInfo { readonly remote: boolean; diff --git a/src/vs/platform/userDataSync/common/userDataSyncService.ts b/src/vs/platform/userDataSync/common/userDataSyncService.ts index a11d2cb04..09b10731c 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncService.ts @@ -3,36 +3,36 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { equals } from 'vs/base/common/arrays'; -import { CancelablePromise, createCancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { isBoolean, isUndefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { ExtensionsSynchroniser } from 'vs/platform/userDataSync/common/extensionsSync'; -import { GlobalStateSynchroniser } from 'vs/platform/userDataSync/common/globalStateSync'; -import { KeybindingsSynchroniser } from 'vs/platform/userDataSync/common/keybindingsSync'; -import { SettingsSynchroniser } from 'vs/platform/userDataSync/common/settingsSync'; -import { SnippetsSynchroniser } from 'vs/platform/userDataSync/common/snippetsSync'; -import { TasksSynchroniser } from 'vs/platform/userDataSync/common/tasksSync'; -import { UserDataProfilesManifestSynchroniser } from 'vs/platform/userDataSync/common/userDataProfilesManifestSync'; +import { equals } from '../../../base/common/arrays.js'; +import { CancelablePromise, createCancelablePromise, RunOnceScheduler } from '../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { isEqual } from '../../../base/common/resources.js'; +import { isBoolean, isUndefined } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IExtensionGalleryService } from '../../extensionManagement/common/extensionManagement.js'; +import { IFileService } from '../../files/common/files.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.js'; +import { ExtensionsSynchroniser } from './extensionsSync.js'; +import { GlobalStateSynchroniser } from './globalStateSync.js'; +import { KeybindingsSynchroniser } from './keybindingsSync.js'; +import { SettingsSynchroniser } from './settingsSync.js'; +import { SnippetsSynchroniser } from './snippetsSync.js'; +import { TasksSynchroniser } from './tasksSync.js'; +import { UserDataProfilesManifestSynchroniser } from './userDataProfilesManifestSync.js'; import { ALL_SYNC_RESOURCES, Change, createSyncHeaders, IUserDataManualSyncTask, IUserDataSyncResourceConflicts, IUserDataSyncResourceError, IUserDataSyncResource, ISyncResourceHandle, IUserDataSyncTask, ISyncUserDataProfile, IUserDataManifest, IUserDataResourceManifest, IUserDataSyncConfiguration, IUserDataSyncEnablementService, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, MergeState, SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, UserDataSyncStoreError, USER_DATA_SYNC_CONFIGURATION_SCOPE, IUserDataSyncResourceProviderService, IUserDataActivityData, IUserDataSyncLocalStoreService -} from 'vs/platform/userDataSync/common/userDataSync'; +} from './userDataSync.js'; type SyncErrorClassification = { owner: 'sandy081'; diff --git a/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts b/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts index b052fe458..9516beebc 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts @@ -3,17 +3,17 @@ * 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 } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService, reviveProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IChannel, IServerChannel } from '../../../base/parts/ipc/common/ipc.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesService, reviveProfile } from '../../userDataProfile/common/userDataProfile.js'; import { IUserDataManualSyncTask, IUserDataSyncResourceConflicts, IUserDataSyncResourceError, IUserDataSyncResource, ISyncResourceHandle, IUserDataSyncTask, IUserDataSyncService, SyncResource, SyncStatus, UserDataSyncError -} from 'vs/platform/userDataSync/common/userDataSync'; +} from './userDataSync.js'; type ManualSyncTaskEvent = { manualSyncTaskId: string; data: T }; diff --git a/src/vs/platform/userDataSync/common/userDataSyncStoreService.ts b/src/vs/platform/userDataSync/common/userDataSyncStoreService.ts index 491dad6ee..905148bab 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncStoreService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncStoreService.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise, timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { getErrorMessage, isCancellationError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import { isWeb } from 'vs/base/common/platform'; -import { ConfigurationSyncStore } from 'vs/base/common/product'; -import { joinPath, relativePath } from 'vs/base/common/resources'; -import { isObject, isString } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { asJson, asText, asTextOrError, hasNoContent, IRequestService, isSuccess, isSuccess as isSuccessContext } from 'vs/platform/request/common/request'; -import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { HEADER_EXECUTION_ID, HEADER_OPERATION_ID, IAuthenticationProvider, IResourceRefHandle, IUserData, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncStore, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, ServerResource, SYNC_SERVICE_URL_TYPE, UserDataSyncErrorCode, UserDataSyncStoreError, UserDataSyncStoreType } from 'vs/platform/userDataSync/common/userDataSync'; -import { VSBufferReadableStream } from 'vs/base/common/buffer'; +import { CancelablePromise, createCancelablePromise, timeout } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { getErrorMessage, isCancellationError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { Mimes } from '../../../base/common/mime.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { ConfigurationSyncStore } from '../../../base/common/product.js'; +import { joinPath, relativePath } from '../../../base/common/resources.js'; +import { isObject, isString } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IHeaders, IRequestContext, IRequestOptions } from '../../../base/parts/request/common/request.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { IFileService } from '../../files/common/files.js'; +import { IProductService } from '../../product/common/productService.js'; +import { asJson, asText, asTextOrError, hasNoContent, IRequestService, isSuccess, isSuccess as isSuccessContext } from '../../request/common/request.js'; +import { getServiceMachineId } from '../../externalServices/common/serviceMachineId.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { HEADER_EXECUTION_ID, HEADER_OPERATION_ID, IAuthenticationProvider, IResourceRefHandle, IUserData, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncStore, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, ServerResource, SYNC_SERVICE_URL_TYPE, UserDataSyncErrorCode, UserDataSyncStoreError, UserDataSyncStoreType } from './userDataSync.js'; +import { VSBufferReadableStream } from '../../../base/common/buffer.js'; const CONFIGURATION_SYNC_STORE_KEY = 'configurationSync.store'; const SYNC_PREVIOUS_STORE = 'sync.previous.store'; diff --git a/src/vs/platform/userDataSync/node/userDataAutoSyncService.ts b/src/vs/platform/userDataSync/node/userDataAutoSyncService.ts index 2bdbeea38..f8642d424 100644 --- a/src/vs/platform/userDataSync/node/userDataAutoSyncService.ts +++ b/src/vs/platform/userDataSync/node/userDataAutoSyncService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // -import { Event } from 'vs/base/common/event'; -import { INativeHostService } from 'vs/platform/native/common/native'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { UserDataAutoSyncService as BaseUserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataAutoSyncService'; -import { IUserDataSyncEnablementService, IUserDataSyncLogService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount'; -import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; +import { Event } from '../../../base/common/event.js'; +import { INativeHostService } from '../../native/common/native.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IStorageService } from '../../storage/common/storage.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { UserDataAutoSyncService as BaseUserDataAutoSyncService } from '../common/userDataAutoSyncService.js'; +import { IUserDataSyncEnablementService, IUserDataSyncLogService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService } from '../common/userDataSync.js'; +import { IUserDataSyncAccountService } from '../common/userDataSyncAccount.js'; +import { IUserDataSyncMachinesService } from '../common/userDataSyncMachines.js'; export class UserDataAutoSyncService extends BaseUserDataAutoSyncService { diff --git a/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts b/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts index 1ecc7b900..4a1c75403 100644 --- a/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { merge } from 'vs/platform/userDataSync/common/extensionsMerge'; -import { ILocalSyncExtension, ISyncExtension } from 'vs/platform/userDataSync/common/userDataSync'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { merge } from '../../common/extensionsMerge.js'; +import { ILocalSyncExtension, ISyncExtension } from '../../common/userDataSync.js'; suite('ExtensionsMerge', () => { diff --git a/src/vs/platform/userDataSync/test/common/globalStateMerge.test.ts b/src/vs/platform/userDataSync/test/common/globalStateMerge.test.ts index 7a17fac28..88c15d78a 100644 --- a/src/vs/platform/userDataSync/test/common/globalStateMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/globalStateMerge.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { merge } from 'vs/platform/userDataSync/common/globalStateMerge'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { merge } from '../../common/globalStateMerge.js'; suite('GlobalStateMerge', () => { diff --git a/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts b/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts index 7d3ecaca7..a179f8e02 100644 --- a/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { GlobalStateSynchroniser } from 'vs/platform/userDataSync/common/globalStateSync'; -import { IGlobalState, ISyncData, IUserDataSyncStoreService, SyncResource, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { IFileService } from '../../../files/common/files.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../storage/common/storage.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { GlobalStateSynchroniser } from '../../common/globalStateSync.js'; +import { IGlobalState, ISyncData, IUserDataSyncStoreService, SyncResource, SyncStatus } from '../../common/userDataSync.js'; +import { IUserDataProfileStorageService } from '../../../userDataProfile/common/userDataProfileStorageService.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('GlobalStateSync', () => { diff --git a/src/vs/platform/userDataSync/test/common/keybindingsMerge.test.ts b/src/vs/platform/userDataSync/test/common/keybindingsMerge.test.ts index c7a1f8675..4b713816e 100644 --- a/src/vs/platform/userDataSync/test/common/keybindingsMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/keybindingsMerge.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { merge } from 'vs/platform/userDataSync/common/keybindingsMerge'; -import { TestUserDataSyncUtilService } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { merge } from '../../common/keybindingsMerge.js'; +import { TestUserDataSyncUtilService } from './userDataSyncClient.js'; suite('KeybindingsMerge - No Conflicts', () => { diff --git a/src/vs/platform/userDataSync/test/common/keybindingsSync.test.ts b/src/vs/platform/userDataSync/test/common/keybindingsSync.test.ts index 660185fd8..00841916b 100644 --- a/src/vs/platform/userDataSync/test/common/keybindingsSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/keybindingsSync.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { getKeybindingsContentFromSyncContent, KeybindingsSynchroniser } from 'vs/platform/userDataSync/common/keybindingsSync'; -import { IUserDataSyncStoreService, SyncResource, UserDataSyncError, UserDataSyncErrorCode } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IFileService } from '../../../files/common/files.js'; +import { ILogService } from '../../../log/common/log.js'; +import { IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { getKeybindingsContentFromSyncContent, KeybindingsSynchroniser } from '../../common/keybindingsSync.js'; +import { IUserDataSyncStoreService, SyncResource, UserDataSyncError, UserDataSyncErrorCode } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; suite('KeybindingsSync', () => { diff --git a/src/vs/platform/userDataSync/test/common/settingsMerge.test.ts b/src/vs/platform/userDataSync/test/common/settingsMerge.test.ts index 625df2121..0d6055ed1 100644 --- a/src/vs/platform/userDataSync/test/common/settingsMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/settingsMerge.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { addSetting, merge, updateIgnoredSettings } from 'vs/platform/userDataSync/common/settingsMerge'; -import type { IConflictSetting } from 'vs/platform/userDataSync/common/userDataSync'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { addSetting, merge, updateIgnoredSettings } from '../../common/settingsMerge.js'; +import type { IConflictSetting } from '../../common/userDataSync.js'; const formattingOptions = { eol: '\n', insertSpaces: false, tabSize: 4 }; diff --git a/src/vs/platform/userDataSync/test/common/settingsSync.test.ts b/src/vs/platform/userDataSync/test/common/settingsSync.test.ts index 39246f25c..914ae83a5 100644 --- a/src/vs/platform/userDataSync/test/common/settingsSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/settingsSync.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Event } from 'vs/base/common/event'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { IFileService } from 'vs/platform/files/common/files'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { ISettingsSyncContent, parseSettingsSyncContent, SettingsSynchroniser } from 'vs/platform/userDataSync/common/settingsSync'; -import { ISyncData, IUserDataSyncStoreService, SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { Event } from '../../../../base/common/event.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IConfigurationService } from '../../../configuration/common/configuration.js'; +import { ConfigurationScope, Extensions, IConfigurationRegistry } from '../../../configuration/common/configurationRegistry.js'; +import { IFileService } from '../../../files/common/files.js'; +import { Registry } from '../../../registry/common/platform.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { ISettingsSyncContent, parseSettingsSyncContent, SettingsSynchroniser } from '../../common/settingsSync.js'; +import { ISyncData, IUserDataSyncStoreService, SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; suite('SettingsSync - Auto', () => { diff --git a/src/vs/platform/userDataSync/test/common/snippetsMerge.test.ts b/src/vs/platform/userDataSync/test/common/snippetsMerge.test.ts index 50e5caa54..bfd9b973f 100644 --- a/src/vs/platform/userDataSync/test/common/snippetsMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/snippetsMerge.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { merge } from 'vs/platform/userDataSync/common/snippetsMerge'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { merge } from '../../common/snippetsMerge.js'; const tsSnippet1 = `{ diff --git a/src/vs/platform/userDataSync/test/common/snippetsSync.test.ts b/src/vs/platform/userDataSync/test/common/snippetsSync.test.ts index 97f4ab83f..89e9c59c4 100644 --- a/src/vs/platform/userDataSync/test/common/snippetsSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/snippetsSync.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { dirname, joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { SnippetsSynchroniser } from 'vs/platform/userDataSync/common/snippetsSync'; -import { IResourcePreview, ISyncData, IUserDataSyncStoreService, PREVIEW_DIR_NAME, SyncResource, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { IStringDictionary } from '../../../../base/common/collections.js'; +import { dirname, joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { IFileService } from '../../../files/common/files.js'; +import { IUserDataProfile, IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { SnippetsSynchroniser } from '../../common/snippetsSync.js'; +import { IResourcePreview, ISyncData, IUserDataSyncStoreService, PREVIEW_DIR_NAME, SyncResource, SyncStatus } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; const tsSnippet1 = `{ diff --git a/src/vs/platform/userDataSync/test/common/synchronizer.test.ts b/src/vs/platform/userDataSync/test/common/synchronizer.test.ts index a336ca324..cbc65e458 100644 --- a/src/vs/platform/userDataSync/test/common/synchronizer.test.ts +++ b/src/vs/platform/userDataSync/test/common/synchronizer.test.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Barrier } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { isEqual, joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { AbstractSynchroniser, IAcceptResult, IMergeResult, IResourcePreview } from 'vs/platform/userDataSync/common/abstractSynchronizer'; -import { Change, IRemoteUserData, IResourcePreview as IBaseResourcePreview, IUserDataResourceManifest, IUserDataSyncConfiguration, IUserDataSyncStoreService, MergeState, SyncResource, SyncStatus, USER_DATA_SYNC_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { Barrier } from '../../../../base/common/async.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { isEqual, joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IFileService } from '../../../files/common/files.js'; +import { IStorageService, StorageScope } from '../../../storage/common/storage.js'; +import { IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { AbstractSynchroniser, IAcceptResult, IMergeResult, IResourcePreview } from '../../common/abstractSynchronizer.js'; +import { Change, IRemoteUserData, IResourcePreview as IBaseResourcePreview, IUserDataResourceManifest, IUserDataSyncConfiguration, IUserDataSyncStoreService, MergeState, SyncResource, SyncStatus, USER_DATA_SYNC_SCHEME } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; interface ITestResourcePreview extends IResourcePreview { ref: string; diff --git a/src/vs/platform/userDataSync/test/common/tasksSync.test.ts b/src/vs/platform/userDataSync/test/common/tasksSync.test.ts index c6cfd18a4..26fa39aee 100644 --- a/src/vs/platform/userDataSync/test/common/tasksSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/tasksSync.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { getTasksContentFromSyncContent, TasksSynchroniser } from 'vs/platform/userDataSync/common/tasksSync'; -import { Change, IUserDataSyncStoreService, MergeState, SyncResource, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IFileService } from '../../../files/common/files.js'; +import { ILogService } from '../../../log/common/log.js'; +import { IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { getTasksContentFromSyncContent, TasksSynchroniser } from '../../common/tasksSync.js'; +import { Change, IUserDataSyncStoreService, MergeState, SyncResource, SyncStatus } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; suite('TasksSync', () => { diff --git a/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts b/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts index e9c86afd3..9c3164a97 100644 --- a/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Event } from 'vs/base/common/event'; -import { joinPath } from 'vs/base/common/resources'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataAutoSyncService'; -import { IUserDataSyncService, SyncResource, UserDataAutoSyncError, UserDataSyncErrorCode, UserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { Event } from '../../../../base/common/event.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { IFileService } from '../../../files/common/files.js'; +import { IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { UserDataAutoSyncService } from '../../common/userDataAutoSyncService.js'; +import { IUserDataSyncService, SyncResource, UserDataAutoSyncError, UserDataSyncErrorCode, UserDataSyncStoreError } from '../../common/userDataSync.js'; +import { IUserDataSyncMachinesService } from '../../common/userDataSyncMachines.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; class TestUserDataAutoSyncService extends UserDataAutoSyncService { protected override startAutoSync(): boolean { return false; } diff --git a/src/vs/platform/userDataSync/test/common/userDataProfilesManifestMerge.test.ts b/src/vs/platform/userDataSync/test/common/userDataProfilesManifestMerge.test.ts index e60f53147..c40b4781e 100644 --- a/src/vs/platform/userDataSync/test/common/userDataProfilesManifestMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataProfilesManifestMerge.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IUserDataProfile, toUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { merge } from 'vs/platform/userDataSync/common/userDataProfilesManifestMerge'; -import { ISyncUserDataProfile } from 'vs/platform/userDataSync/common/userDataSync'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IUserDataProfile, toUserDataProfile } from '../../../userDataProfile/common/userDataProfile.js'; +import { merge } from '../../common/userDataProfilesManifestMerge.js'; +import { ISyncUserDataProfile } from '../../common/userDataSync.js'; suite('UserDataProfilesManifestMerge', () => { diff --git a/src/vs/platform/userDataSync/test/common/userDataProfilesManifestSync.test.ts b/src/vs/platform/userDataSync/test/common/userDataProfilesManifestSync.test.ts index 2227e3d11..d52b6a0db 100644 --- a/src/vs/platform/userDataSync/test/common/userDataProfilesManifestSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataProfilesManifestSync.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UserDataProfilesManifestSynchroniser } from 'vs/platform/userDataSync/common/userDataProfilesManifestSync'; -import { ISyncData, ISyncUserDataProfile, IUserDataSyncStoreService, SyncResource, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { UserDataProfilesManifestSynchroniser } from '../../common/userDataProfilesManifestSync.js'; +import { ISyncData, ISyncUserDataProfile, IUserDataSyncStoreService, SyncResource, SyncStatus } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; suite('UserDataProfilesManifestSync', () => { diff --git a/src/vs/platform/userDataSync/test/common/userDataSyncClient.ts b/src/vs/platform/userDataSync/test/common/userDataSyncClient.ts index f83ecab1d..a6a2af746 100644 --- a/src/vs/platform/userDataSync/test/common/userDataSyncClient.ts +++ b/src/vs/platform/userDataSync/test/common/userDataSyncClient.ts @@ -3,48 +3,48 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { bufferToStream, VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Emitter } from 'vs/base/common/event'; -import { FormattingOptions } from 'vs/base/common/jsonFormatter'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService'; -import { DidUninstallExtensionEvent, IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, InstallExtensionResult } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { AuthInfo, Credentials, IRequestService } from 'vs/platform/request/common/request'; -import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { ExtensionStorageService, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions'; -import { ALL_SYNC_RESOURCES, getDefaultIgnoredSettings, IUserData, IUserDataSyncLocalStoreService, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration, ServerResource, SyncResource, IUserDataSynchroniser, IUserDataResourceManifest, IUserDataCollectionManifest, USER_DATA_SYNC_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; -import { IUserDataSyncAccountService, UserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount'; -import { UserDataSyncLocalStoreService } from 'vs/platform/userDataSync/common/userDataSyncLocalStoreService'; -import { IUserDataSyncMachinesService, UserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; -import { UserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSyncEnablementService'; -import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService'; -import { UserDataSyncStoreManagementService, UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; -import { InMemoryUserDataProfilesService, IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { NullPolicyService } from 'vs/platform/policy/common/policy'; -import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; -import { TestUserDataProfileStorageService } from 'vs/platform/userDataProfile/test/common/userDataProfileStorageService.test'; +import { bufferToStream, VSBuffer } from '../../../../base/common/buffer.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IStringDictionary } from '../../../../base/common/collections.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { FormattingOptions } from '../../../../base/common/jsonFormatter.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { IHeaders, IRequestContext, IRequestOptions } from '../../../../base/parts/request/common/request.js'; +import { IConfigurationService } from '../../../configuration/common/configuration.js'; +import { ConfigurationService } from '../../../configuration/common/configurationService.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { GlobalExtensionEnablementService } from '../../../extensionManagement/common/extensionEnablementService.js'; +import { DidUninstallExtensionEvent, IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, InstallExtensionResult } from '../../../extensionManagement/common/extensionManagement.js'; +import { IFileService } from '../../../files/common/files.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { InMemoryFileSystemProvider } from '../../../files/common/inMemoryFilesystemProvider.js'; +import { TestInstantiationService } from '../../../instantiation/test/common/instantiationServiceMock.js'; +import { ILogService, NullLogService } from '../../../log/common/log.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { AuthInfo, Credentials, IRequestService } from '../../../request/common/request.js'; +import { InMemoryStorageService, IStorageService } from '../../../storage/common/storage.js'; +import { ITelemetryService } from '../../../telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../telemetry/common/telemetryUtils.js'; +import { IUriIdentityService } from '../../../uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { ExtensionStorageService, IExtensionStorageService } from '../../../extensionManagement/common/extensionStorage.js'; +import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from '../../common/ignoredExtensions.js'; +import { ALL_SYNC_RESOURCES, getDefaultIgnoredSettings, IUserData, IUserDataSyncLocalStoreService, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration, ServerResource, SyncResource, IUserDataSynchroniser, IUserDataResourceManifest, IUserDataCollectionManifest, USER_DATA_SYNC_SCHEME } from '../../common/userDataSync.js'; +import { IUserDataSyncAccountService, UserDataSyncAccountService } from '../../common/userDataSyncAccount.js'; +import { UserDataSyncLocalStoreService } from '../../common/userDataSyncLocalStoreService.js'; +import { IUserDataSyncMachinesService, UserDataSyncMachinesService } from '../../common/userDataSyncMachines.js'; +import { UserDataSyncEnablementService } from '../../common/userDataSyncEnablementService.js'; +import { UserDataSyncService } from '../../common/userDataSyncService.js'; +import { UserDataSyncStoreManagementService, UserDataSyncStoreService } from '../../common/userDataSyncStoreService.js'; +import { InMemoryUserDataProfilesService, IUserDataProfile, IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { NullPolicyService } from '../../../policy/common/policy.js'; +import { IUserDataProfileStorageService } from '../../../userDataProfile/common/userDataProfileStorageService.js'; +import { TestUserDataProfileStorageService } from '../../../userDataProfile/test/common/userDataProfileStorageService.test.js'; export class UserDataSyncClient extends Disposable { diff --git a/src/vs/platform/userDataSync/test/common/userDataSyncService.test.ts b/src/vs/platform/userDataSync/test/common/userDataSyncService.test.ts index a06d71127..1c41d4884 100644 --- a/src/vs/platform/userDataSync/test/common/userDataSyncService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataSyncService.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { dirname, joinPath } from 'vs/base/common/resources'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IUserDataSyncEnablementService, IUserDataSyncService, SyncResource, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { dirname, joinPath } from '../../../../base/common/resources.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IEnvironmentService } from '../../../environment/common/environment.js'; +import { IFileService } from '../../../files/common/files.js'; +import { IUserDataProfilesService } from '../../../userDataProfile/common/userDataProfile.js'; +import { IUserDataSyncEnablementService, IUserDataSyncService, SyncResource, SyncStatus } from '../../common/userDataSync.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; suite('UserDataSyncService', () => { diff --git a/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts b/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts index fefa58adf..4f720f7d2 100644 --- a/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { timeout } from 'vs/base/common/async'; -import { newWriteableBufferStream } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { isWeb } from 'vs/base/common/platform'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { IUserDataSyncStoreService, SyncResource, UserDataSyncErrorCode, UserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync'; -import { RequestsSession, UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; -import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient'; +import { timeout } from '../../../../base/common/async.js'; +import { newWriteableBufferStream } from '../../../../base/common/buffer.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Event } from '../../../../base/common/event.js'; +import { isWeb } from '../../../../base/common/platform.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { IRequestService } from '../../../request/common/request.js'; +import { IUserDataSyncStoreService, SyncResource, UserDataSyncErrorCode, UserDataSyncStoreError } from '../../common/userDataSync.js'; +import { RequestsSession, UserDataSyncStoreService } from '../../common/userDataSyncStoreService.js'; +import { UserDataSyncClient, UserDataSyncTestServer } from './userDataSyncClient.js'; suite('UserDataSyncStoreService', () => { diff --git a/src/vs/platform/utilityProcess/electron-main/utilityProcess.ts b/src/vs/platform/utilityProcess/electron-main/utilityProcess.ts index 3b1cee5f9..1386e87f2 100644 --- a/src/vs/platform/utilityProcess/electron-main/utilityProcess.ts +++ b/src/vs/platform/utilityProcess/electron-main/utilityProcess.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import { BrowserWindow, Details, MessageChannelMain, app, utilityProcess, UtilityProcess as ElectronUtilityProcess, ForkOptions } from 'electron'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Emitter, Event } from 'vs/base/common/event'; -import { ILogService } from 'vs/platform/log/common/log'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { ILogService } from '../../log/common/log.js'; import { StringDecoder } from 'string_decoder'; -import { timeout } from 'vs/base/common/async'; -import { FileAccess } from 'vs/base/common/network'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; -import Severity from 'vs/base/common/severity'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { removeDangerousEnvVariables } from 'vs/base/common/processes'; -import { deepClone } from 'vs/base/common/objects'; -import { isWindows } from 'vs/base/common/platform'; -import { isUNCAccessRestrictionsDisabled, getUNCHostAllowlist } from 'vs/base/node/unc'; -import { upcast } from 'vs/base/common/types'; +import { timeout } from '../../../base/common/async.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; +import Severity from '../../../base/common/severity.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { removeDangerousEnvVariables } from '../../../base/common/processes.js'; +import { deepClone } from '../../../base/common/objects.js'; +import { isWindows } from '../../../base/common/platform.js'; +import { isUNCAccessRestrictionsDisabled, getUNCHostAllowlist } from '../../../base/node/unc.js'; +import { upcast } from '../../../base/common/types.js'; export interface IUtilityProcessConfiguration { @@ -72,12 +72,6 @@ export interface IUtilityProcessConfiguration { */ readonly parentLifecycleBound?: number; - /** - * Allow the utility process to force heap allocations inside - * the V8 sandbox. - */ - readonly forceAllocationsToV8Sandbox?: boolean; - /** * HTTP 401 and 407 requests created via electron:net module * will be redirected to the main process and can be handled @@ -242,7 +236,6 @@ export class UtilityProcess extends Disposable { const args = this.configuration.args ?? []; const execArgv = this.configuration.execArgv ?? []; const allowLoadingUnsignedLibraries = this.configuration.allowLoadingUnsignedLibraries; - const forceAllocationsToV8Sandbox = this.configuration.forceAllocationsToV8Sandbox; const respondToAuthRequestsFromMainProcess = this.configuration.respondToAuthRequestsFromMainProcess; const stdio = 'pipe'; const env = this.createEnv(configuration); @@ -251,14 +244,12 @@ export class UtilityProcess extends Disposable { // Fork utility process this.process = utilityProcess.fork(modulePath, args, upcast({ serviceName, env, execArgv, allowLoadingUnsignedLibraries, - forceAllocationsToV8Sandbox, respondToAuthRequestsFromMainProcess, stdio })); @@ -338,6 +329,46 @@ export class UtilityProcess extends Disposable { this.onDidExitOrCrashOrKill(); })); + // V8 Error + this._register(Event.fromNodeEventEmitter(process, 'error', (type, location, report) => ({ type, location, report }))(({ type, location, report }) => { + this.log(`crashed due to ${type} from V8 at ${location}`, Severity.Info); + + let addons: string[] = []; + try { + const reportJSON = JSON.parse(report); + addons = reportJSON.sharedObjects + .filter((sharedObject: string) => sharedObject.endsWith('.node')) + .map((addon: string) => { + const index = addon.indexOf('extensions') === -1 ? addon.indexOf('node_modules') : addon.indexOf('extensions'); + return addon.substring(index); + }); + } catch (e) { + // ignore + } + + // Telemetry + type UtilityProcessV8ErrorClassification = { + processtype: { classification: 'SystemMetaData'; purpose: 'PerformanceAndHealth'; comment: 'The type of utility process to understand the origin of the crash better.' }; + error: { classification: 'SystemMetaData'; purpose: 'PerformanceAndHealth'; comment: 'The type of error from the utility process to understand the nature of the crash better.' }; + location: { classification: 'SystemMetaData'; purpose: 'PerformanceAndHealth'; comment: 'The source location that triggered the crash to understand the nature of the crash better.' }; + addons: { classification: 'SystemMetaData'; purpose: 'PerformanceAndHealth'; comment: 'The list of addons loaded in the utility process to understand the nature of the crash better' }; + owner: 'deepak1556'; + comment: 'Provides insight into V8 sandbox FATAL error caused by native addons.'; + }; + type UtilityProcessV8ErrorEvent = { + processtype: string; + error: string; + location: string; + addons: string[]; + }; + this.telemetryService.publicLog2('utilityprocessv8error', { + processtype: configuration.type, + error: type, + location, + addons + }); + })); + // Child process gone this._register(Event.fromNodeEventEmitter<{ details: Details }>(app, 'child-process-gone', (event, details) => ({ event, details }))(({ details }) => { if (details.type === 'Utility' && details.name === serviceName && !this.isNormalExit(details.exitCode)) { diff --git a/src/vs/platform/utilityProcess/electron-main/utilityProcessWorkerMainService.ts b/src/vs/platform/utilityProcess/electron-main/utilityProcessWorkerMainService.ts index 4888e76a2..9ab01b9be 100644 --- a/src/vs/platform/utilityProcess/electron-main/utilityProcessWorkerMainService.ts +++ b/src/vs/platform/utilityProcess/electron-main/utilityProcessWorkerMainService.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUtilityProcessWorkerCreateConfiguration, IOnDidTerminateUtilityrocessWorkerProcess, IUtilityProcessWorkerConfiguration, IUtilityProcessWorkerProcessExit, IUtilityProcessWorkerService } from 'vs/platform/utilityProcess/common/utilityProcessWorkerService'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; -import { WindowUtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { hash } from 'vs/base/common/hash'; -import { Event, Emitter } from 'vs/base/common/event'; -import { DeferredPromise } from 'vs/base/common/async'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUtilityProcessWorkerCreateConfiguration, IOnDidTerminateUtilityrocessWorkerProcess, IUtilityProcessWorkerConfiguration, IUtilityProcessWorkerProcessExit, IUtilityProcessWorkerService } from '../common/utilityProcessWorkerService.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; +import { WindowUtilityProcess } from './utilityProcess.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { hash } from '../../../base/common/hash.js'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; export const IUtilityProcessWorkerMainService = createDecorator('utilityProcessWorker'); diff --git a/src/vs/platform/webview/common/mimeTypes.ts b/src/vs/platform/webview/common/mimeTypes.ts index 848cc4419..36c950c5d 100644 --- a/src/vs/platform/webview/common/mimeTypes.ts +++ b/src/vs/platform/webview/common/mimeTypes.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getMediaMime, Mimes } from 'vs/base/common/mime'; -import { extname } from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; +import { getMediaMime, Mimes } from '../../../base/common/mime.js'; +import { extname } from '../../../base/common/path.js'; +import { URI } from '../../../base/common/uri.js'; const webviewMimeTypes = new Map([ ['.svg', 'image/svg+xml'], diff --git a/src/vs/platform/webview/common/webviewManagerService.ts b/src/vs/platform/webview/common/webviewManagerService.ts index 78f44d0e8..ae380e059 100644 --- a/src/vs/platform/webview/common/webviewManagerService.ts +++ b/src/vs/platform/webview/common/webviewManagerService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export const IWebviewManagerService = createDecorator('webviewManagerService'); diff --git a/src/vs/platform/webview/common/webviewPortMapping.ts b/src/vs/platform/webview/common/webviewPortMapping.ts index b47339d28..7820092be 100644 --- a/src/vs/platform/webview/common/webviewPortMapping.ts +++ b/src/vs/platform/webview/common/webviewPortMapping.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IAddress } from 'vs/platform/remote/common/remoteAgentConnection'; -import { extractLocalHostUriMetaDataForPortMapping, ITunnelService, RemoteTunnel } from 'vs/platform/tunnel/common/tunnel'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IAddress } from '../../remote/common/remoteAgentConnection.js'; +import { extractLocalHostUriMetaDataForPortMapping, ITunnelService, RemoteTunnel } from '../../tunnel/common/tunnel.js'; export interface IWebviewPortMapping { readonly webviewPort: number; diff --git a/src/vs/platform/webview/electron-main/webviewMainService.ts b/src/vs/platform/webview/electron-main/webviewMainService.ts index 9b51a3a8b..b7c1a341e 100644 --- a/src/vs/platform/webview/electron-main/webviewMainService.ts +++ b/src/vs/platform/webview/electron-main/webviewMainService.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { WebContents, webContents, WebFrameMain } from 'electron'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { FindInFrameOptions, FoundInFrameResult, IWebviewManagerService, WebviewWebContentsId, WebviewWindowId } from 'vs/platform/webview/common/webviewManagerService'; -import { WebviewProtocolProvider } from 'vs/platform/webview/electron-main/webviewProtocolProvider'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { FindInFrameOptions, FoundInFrameResult, IWebviewManagerService, WebviewWebContentsId, WebviewWindowId } from '../common/webviewManagerService.js'; +import { WebviewProtocolProvider } from './webviewProtocolProvider.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; export class WebviewMainService extends Disposable implements IWebviewManagerService { diff --git a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts index fcce77fab..493bd1b34 100644 --- a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts +++ b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { protocol } from 'electron'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { AppResourcePath, COI, FileAccess, Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { AppResourcePath, COI, FileAccess, Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; export class WebviewProtocolProvider extends Disposable { diff --git a/src/vs/platform/window/common/window.ts b/src/vs/platform/window/common/window.ts index 40b1ebf05..a3c02dba4 100644 --- a/src/vs/platform/window/common/window.ts +++ b/src/vs/platform/window/common/window.ts @@ -3,21 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from 'vs/base/common/collections'; -import { PerformanceMark } from 'vs/base/common/performance'; -import { isLinux, isMacintosh, isNative, isWeb } from 'vs/base/common/platform'; -import { URI, UriComponents, UriDto } from 'vs/base/common/uri'; -import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { FileType } from 'vs/platform/files/common/files'; -import { ILoggerResource, LogLevel } from 'vs/platform/log/common/log'; -import { PolicyDefinition, PolicyValue } from 'vs/platform/policy/common/policy'; -import product from 'vs/platform/product/common/product'; -import { IPartsSplash } from 'vs/platform/theme/common/themeService'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IAnyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { PerformanceMark } from '../../../base/common/performance.js'; +import { isLinux, isMacintosh, isNative, isWeb } from '../../../base/common/platform.js'; +import { URI, UriComponents, UriDto } from '../../../base/common/uri.js'; +import { ISandboxConfiguration } from '../../../base/parts/sandbox/common/sandboxTypes.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IEditorOptions } from '../../editor/common/editor.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { FileType } from '../../files/common/files.js'; +import { ILoggerResource, LogLevel } from '../../log/common/log.js'; +import { PolicyDefinition, PolicyValue } from '../../policy/common/policy.js'; +import { IPartsSplash } from '../../theme/common/themeService.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { IAnyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export const WindowMinimumSize = { WIDTH: 400, @@ -240,8 +239,6 @@ export function useWindowControlsOverlay(configurationService: IConfigurationSer if (typeof setting === 'boolean') { return setting; } - - return product.quality !== 'stable'; // disable by default in stable for now (TODO@bpasero TODO@benibenj flip when custom title is default) } // Default to true. diff --git a/src/vs/platform/window/electron-main/window.ts b/src/vs/platform/window/electron-main/window.ts index 15fcb1790..8a861e7f1 100644 --- a/src/vs/platform/window/electron-main/window.ts +++ b/src/vs/platform/window/electron-main/window.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import electron from 'electron'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ISerializableCommandAction } from 'vs/platform/action/common/action'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { INativeWindowConfiguration } from 'vs/platform/window/common/window'; -import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { ISerializableCommandAction } from '../../action/common/action.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { INativeWindowConfiguration } from '../common/window.js'; +import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export interface IBaseWindow extends IDisposable { diff --git a/src/vs/platform/window/electron-sandbox/window.ts b/src/vs/platform/window/electron-sandbox/window.ts index ab0e479d1..1adaa5500 100644 --- a/src/vs/platform/window/electron-sandbox/window.ts +++ b/src/vs/platform/window/electron-sandbox/window.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getZoomLevel, setZoomFactor, setZoomLevel } from 'vs/base/browser/browser'; -import { getActiveWindow, getWindows } from 'vs/base/browser/dom'; -import { mainWindow } from 'vs/base/browser/window'; -import { ISandboxGlobals, ipcRenderer, webFrame } from 'vs/base/parts/sandbox/electron-sandbox/globals'; -import { zoomLevelToZoomFactor } from 'vs/platform/window/common/window'; +import { getZoomLevel, setZoomFactor, setZoomLevel } from '../../../base/browser/browser.js'; +import { getActiveWindow, getWindows } from '../../../base/browser/dom.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { ISandboxGlobals, ipcRenderer, webFrame } from '../../../base/parts/sandbox/electron-sandbox/globals.js'; +import { zoomLevelToZoomFactor } from '../common/window.js'; export enum ApplyZoomTarget { ACTIVE_WINDOW = 1, diff --git a/src/vs/platform/windows/electron-main/windowImpl.ts b/src/vs/platform/windows/electron-main/windowImpl.ts index 5d3b1c579..ae108b99c 100644 --- a/src/vs/platform/windows/electron-main/windowImpl.ts +++ b/src/vs/platform/windows/electron-main/windowImpl.ts @@ -4,47 +4,46 @@ *--------------------------------------------------------------------------------------------*/ import electron, { BrowserWindowConstructorOptions } from 'electron'; -import { DeferredPromise, RunOnceScheduler, timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { getMarks, mark } from 'vs/base/common/performance'; -import { isBigSurOrNewer, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; +import { DeferredPromise, RunOnceScheduler, timeout } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { FileAccess, Schemas } from '../../../base/common/network.js'; +import { getMarks, mark } from '../../../base/common/performance.js'; +import { isBigSurOrNewer, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; import { release } from 'os'; -import { ISerializableCommandAction } from 'vs/platform/action/common/action'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { isLaunchedFromCli } from 'vs/platform/environment/node/argvHelper'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol'; -import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; -import { IApplicationStorageMainService, IStorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; -import { getMenuBarVisibility, IFolderToOpen, INativeWindowConfiguration, IWindowSettings, IWorkspaceToOpen, MenuBarVisibility, hasNativeTitlebar, useNativeFullScreen, useWindowControlsOverlay, DEFAULT_CUSTOM_TITLEBAR_HEIGHT, TitlebarStyle } from 'vs/platform/window/common/window'; -import { defaultBrowserWindowOptions, IWindowsMainService, OpenContext, WindowStateValidator } from 'vs/platform/windows/electron-main/windows'; -import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, toWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { IWindowState, ICodeWindow, ILoadEvent, WindowMode, WindowError, LoadReason, defaultWindowState, IBaseWindow } from 'vs/platform/window/electron-main/window'; -import { IPolicyService } from 'vs/platform/policy/common/policy'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IStateService } from 'vs/platform/state/node/state'; -import { IUserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { ILoggerMainService } from 'vs/platform/log/electron-main/loggerService'; -import { firstOrDefault } from 'vs/base/common/arrays'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { isESM } from 'vs/base/common/amd'; +import { ISerializableCommandAction } from '../../action/common/action.js'; +import { IBackupMainService } from '../../backup/electron-main/backup.js'; +import { IConfigurationChangeEvent, IConfigurationService } from '../../configuration/common/configuration.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { isLaunchedFromCli } from '../../environment/node/argvHelper.js'; +import { IFileService } from '../../files/common/files.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IProtocolMainService } from '../../protocol/electron-main/protocol.js'; +import { resolveMarketplaceHeaders } from '../../externalServices/common/marketplace.js'; +import { IApplicationStorageMainService, IStorageMainService } from '../../storage/electron-main/storageMainService.js'; +import { ITelemetryService } from '../../telemetry/common/telemetry.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IThemeMainService } from '../../theme/electron-main/themeMainService.js'; +import { getMenuBarVisibility, IFolderToOpen, INativeWindowConfiguration, IWindowSettings, IWorkspaceToOpen, MenuBarVisibility, hasNativeTitlebar, useNativeFullScreen, useWindowControlsOverlay, DEFAULT_CUSTOM_TITLEBAR_HEIGHT, TitlebarStyle } from '../../window/common/window.js'; +import { defaultBrowserWindowOptions, IWindowsMainService, OpenContext, WindowStateValidator } from './windows.js'; +import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, toWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IWorkspacesManagementMainService } from '../../workspaces/electron-main/workspacesManagementMainService.js'; +import { IWindowState, ICodeWindow, ILoadEvent, WindowMode, WindowError, LoadReason, defaultWindowState, IBaseWindow } from '../../window/electron-main/window.js'; +import { IPolicyService } from '../../policy/common/policy.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { IStateService } from '../../state/node/state.js'; +import { IUserDataProfilesMainService } from '../../userDataProfile/electron-main/userDataProfile.js'; +import { ILoggerMainService } from '../../log/electron-main/loggerService.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { isESM } from '../../../base/common/amd.js'; export interface IWindowCreationOptions { readonly state: IWindowState; @@ -915,7 +914,7 @@ export class CodeWindow extends BaseWindow implements ICodeWindow { } // Delegate to windows service - const window = firstOrDefault(await this.windowsMainService.open({ + const window = (await this.windowsMainService.open({ context: OpenContext.API, userEnv: this._config.userEnv, cli: { @@ -926,7 +925,7 @@ export class CodeWindow extends BaseWindow implements ICodeWindow { forceEmpty, forceNewWindow: true, remoteAuthority: this.remoteAuthority - })); + })).at(0); window?.focus(); } } finally { diff --git a/src/vs/platform/windows/electron-main/windows.ts b/src/vs/platform/windows/electron-main/windows.ts index 5ed14c914..dd5148103 100644 --- a/src/vs/platform/windows/electron-main/windows.ts +++ b/src/vs/platform/windows/electron-main/windows.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import electron from 'electron'; -import { Color } from 'vs/base/common/color'; -import { Event } from 'vs/base/common/event'; -import { join } from 'vs/base/common/path'; -import { IProcessEnvironment, isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { ServicesAccessor, createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; -import { IOpenEmptyWindowOptions, IWindowOpenable, IWindowSettings, TitlebarStyle, WindowMinimumSize, hasNativeTitlebar, useNativeFullScreen, useWindowControlsOverlay, zoomLevelToZoomFactor } from 'vs/platform/window/common/window'; -import { ICodeWindow, IWindowState, WindowMode, defaultWindowState } from 'vs/platform/window/electron-main/window'; +import { Color } from '../../../base/common/color.js'; +import { Event } from '../../../base/common/event.js'; +import { join } from '../../../base/common/path.js'; +import { IProcessEnvironment, isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { URI } from '../../../base/common/uri.js'; +import { IAuxiliaryWindow } from '../../auxiliaryWindow/electron-main/auxiliaryWindow.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { ServicesAccessor, createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IProductService } from '../../product/common/productService.js'; +import { IThemeMainService } from '../../theme/electron-main/themeMainService.js'; +import { IOpenEmptyWindowOptions, IWindowOpenable, IWindowSettings, TitlebarStyle, WindowMinimumSize, hasNativeTitlebar, useNativeFullScreen, useWindowControlsOverlay, zoomLevelToZoomFactor } from '../../window/common/window.js'; +import { ICodeWindow, IWindowState, WindowMode, defaultWindowState } from '../../window/electron-main/window.js'; export const IWindowsMainService = createDecorator('windowsMainService'); diff --git a/src/vs/platform/windows/electron-main/windowsFinder.ts b/src/vs/platform/windows/electron-main/windowsFinder.ts index c8d34be75..1fc60b135 100644 --- a/src/vs/platform/windows/electron-main/windowsFinder.ts +++ b/src/vs/platform/windows/electron-main/windowsFinder.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ICodeWindow } from 'vs/platform/window/electron-main/window'; -import { IResolvedWorkspace, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { extUriBiasedIgnorePathCase } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { ICodeWindow } from '../../window/electron-main/window.js'; +import { IResolvedWorkspace, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export async function findWindowOnFile(windows: ICodeWindow[], fileUri: URI, localWorkspaceResolver: (workspace: IWorkspaceIdentifier) => Promise): Promise { diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index 4757e7ee7..425cd4549 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -5,58 +5,58 @@ import * as fs from 'fs'; import { app, BrowserWindow, WebContents, shell } from 'electron'; -import { addUNCHostToAllowlist } from 'vs/base/node/unc'; +import { addUNCHostToAllowlist } from '../../../base/node/unc.js'; import { hostname, release, arch } from 'os'; -import { coalesce, distinct } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CharCode } from 'vs/base/common/charCode'; -import { Emitter, Event } from 'vs/base/common/event'; -import { isWindowsDriveLetter, parseLineAndColumnAware, sanitizeFilePath, toSlashes } from 'vs/base/common/extpath'; -import { getPathLabel } from 'vs/base/common/labels'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { basename, join, normalize, posix } from 'vs/base/common/path'; -import { getMarks, mark } from 'vs/base/common/performance'; -import { IProcessEnvironment, isMacintosh, isWindows, OS } from 'vs/base/common/platform'; -import { cwd } from 'vs/base/common/process'; -import { extUriBiasedIgnorePathCase, isEqualAuthority, normalizePath, originalFSPath, removeTrailingPathSeparator } from 'vs/base/common/resources'; -import { assertIsDefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { getNLSLanguage, getNLSMessages, localize } from 'vs/nls'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { IEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { FileType, IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol'; -import { getRemoteAuthority } from 'vs/platform/remote/common/remoteHosts'; -import { IStateService } from 'vs/platform/state/node/state'; -import { IAddFoldersRequest, INativeOpenFileRequest, INativeWindowConfiguration, IOpenEmptyWindowOptions, IPath, IPathsToWaitFor, isFileToOpen, isFolderToOpen, isWorkspaceToOpen, IWindowOpenable, IWindowSettings } from 'vs/platform/window/common/window'; -import { CodeWindow } from 'vs/platform/windows/electron-main/windowImpl'; -import { IOpenConfiguration, IOpenEmptyConfiguration, IWindowsCountChangedEvent, IWindowsMainService, OpenContext, getLastFocused } from 'vs/platform/windows/electron-main/windows'; -import { findWindowOnExtensionDevelopmentPath, findWindowOnFile, findWindowOnWorkspaceOrFolder } from 'vs/platform/windows/electron-main/windowsFinder'; -import { IWindowState, WindowsStateHandler } from 'vs/platform/windows/electron-main/windowsStateHandler'; -import { IRecent } from 'vs/platform/workspaces/common/workspaces'; -import { hasWorkspaceFileExtension, IAnyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IWorkspaceIdentifier, toWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { createEmptyWorkspaceIdentifier, getSingleFolderWorkspaceIdentifier, getWorkspaceIdentifier } from 'vs/platform/workspaces/node/workspaces'; -import { IWorkspacesHistoryMainService } from 'vs/platform/workspaces/electron-main/workspacesHistoryMainService'; -import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { ICodeWindow, UnloadReason } from 'vs/platform/window/electron-main/window'; -import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; -import { IEditorOptions, ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IPolicyService } from 'vs/platform/policy/common/policy'; -import { IUserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { ILoggerMainService } from 'vs/platform/log/electron-main/loggerService'; -import { IAuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows'; -import { IAuxiliaryWindow } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindow'; -import { ICSSDevelopmentService } from 'vs/platform/cssDev/node/cssDevService'; +import { coalesce, distinct } from '../../../base/common/arrays.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { CharCode } from '../../../base/common/charCode.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { isWindowsDriveLetter, parseLineAndColumnAware, sanitizeFilePath, toSlashes } from '../../../base/common/extpath.js'; +import { getPathLabel } from '../../../base/common/labels.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { basename, join, normalize, posix } from '../../../base/common/path.js'; +import { getMarks, mark } from '../../../base/common/performance.js'; +import { IProcessEnvironment, isMacintosh, isWindows, OS } from '../../../base/common/platform.js'; +import { cwd } from '../../../base/common/process.js'; +import { extUriBiasedIgnorePathCase, isEqualAuthority, normalizePath, originalFSPath, removeTrailingPathSeparator } from '../../../base/common/resources.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { getNLSLanguage, getNLSMessages, localize } from '../../../nls.js'; +import { IBackupMainService } from '../../backup/electron-main/backup.js'; +import { IEmptyWindowBackupInfo } from '../../backup/node/backup.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; +import { NativeParsedArgs } from '../../environment/common/argv.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { FileType, IFileService } from '../../files/common/files.js'; +import { IInstantiationService } from '../../instantiation/common/instantiation.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import product from '../../product/common/product.js'; +import { IProtocolMainService } from '../../protocol/electron-main/protocol.js'; +import { getRemoteAuthority } from '../../remote/common/remoteHosts.js'; +import { IStateService } from '../../state/node/state.js'; +import { IAddFoldersRequest, INativeOpenFileRequest, INativeWindowConfiguration, IOpenEmptyWindowOptions, IPath, IPathsToWaitFor, isFileToOpen, isFolderToOpen, isWorkspaceToOpen, IWindowOpenable, IWindowSettings } from '../../window/common/window.js'; +import { CodeWindow } from './windowImpl.js'; +import { IOpenConfiguration, IOpenEmptyConfiguration, IWindowsCountChangedEvent, IWindowsMainService, OpenContext, getLastFocused } from './windows.js'; +import { findWindowOnExtensionDevelopmentPath, findWindowOnFile, findWindowOnWorkspaceOrFolder } from './windowsFinder.js'; +import { IWindowState, WindowsStateHandler } from './windowsStateHandler.js'; +import { IRecent } from '../../workspaces/common/workspaces.js'; +import { hasWorkspaceFileExtension, IAnyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IWorkspaceIdentifier, toWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { createEmptyWorkspaceIdentifier, getSingleFolderWorkspaceIdentifier, getWorkspaceIdentifier } from '../../workspaces/node/workspaces.js'; +import { IWorkspacesHistoryMainService } from '../../workspaces/electron-main/workspacesHistoryMainService.js'; +import { IWorkspacesManagementMainService } from '../../workspaces/electron-main/workspacesManagementMainService.js'; +import { ICodeWindow, UnloadReason } from '../../window/electron-main/window.js'; +import { IThemeMainService } from '../../theme/electron-main/themeMainService.js'; +import { IEditorOptions, ITextEditorOptions } from '../../editor/common/editor.js'; +import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; +import { IPolicyService } from '../../policy/common/policy.js'; +import { IUserDataProfilesMainService } from '../../userDataProfile/electron-main/userDataProfile.js'; +import { ILoggerMainService } from '../../log/electron-main/loggerService.js'; +import { IAuxiliaryWindowsMainService } from '../../auxiliaryWindow/electron-main/auxiliaryWindows.js'; +import { IAuxiliaryWindow } from '../../auxiliaryWindow/electron-main/auxiliaryWindow.js'; +import { ICSSDevelopmentService } from '../../cssDev/node/cssDevService.js'; //#region Helper Interfaces diff --git a/src/vs/platform/windows/electron-main/windowsStateHandler.ts b/src/vs/platform/windows/electron-main/windowsStateHandler.ts index 6a6591cd4..bd14cdbe3 100644 --- a/src/vs/platform/windows/electron-main/windowsStateHandler.ts +++ b/src/vs/platform/windows/electron-main/windowsStateHandler.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import electron from 'electron'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { isMacintosh } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IStateService } from 'vs/platform/state/node/state'; -import { INativeWindowConfiguration, IWindowSettings } from 'vs/platform/window/common/window'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; -import { defaultWindowState, ICodeWindow, IWindowState as IWindowUIState, WindowMode } from 'vs/platform/window/electron-main/window'; -import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { isMacintosh } from '../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../configuration/common/configuration.js'; +import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { IStateService } from '../../state/node/state.js'; +import { INativeWindowConfiguration, IWindowSettings } from '../../window/common/window.js'; +import { IWindowsMainService } from './windows.js'; +import { defaultWindowState, ICodeWindow, IWindowState as IWindowUIState, WindowMode } from '../../window/electron-main/window.js'; +import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; export interface IWindowState { readonly windowId?: number; diff --git a/src/vs/platform/windows/node/windowTracker.ts b/src/vs/platform/windows/node/windowTracker.ts index cc0abcbd2..6c2306a42 100644 --- a/src/vs/platform/windows/node/windowTracker.ts +++ b/src/vs/platform/windows/node/windowTracker.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { CancelablePromise, createCancelablePromise } from '../../../base/common/async.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; export class ActiveWindowManager extends Disposable { diff --git a/src/vs/platform/windows/test/electron-main/windowsFinder.test.ts b/src/vs/platform/windows/test/electron-main/windowsFinder.test.ts index f3ce84f9c..98973497b 100644 --- a/src/vs/platform/windows/test/electron-main/windowsFinder.test.ts +++ b/src/vs/platform/windows/test/electron-main/windowsFinder.test.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { join } from 'vs/base/common/path'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI, UriDto } from 'vs/base/common/uri'; -import { ICommandAction } from 'vs/platform/action/common/action'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { INativeWindowConfiguration } from 'vs/platform/window/common/window'; -import { ICodeWindow, ILoadEvent, IWindowState } from 'vs/platform/window/electron-main/window'; -import { findWindowOnFile } from 'vs/platform/windows/electron-main/windowsFinder'; -import { toWorkspaceFolders } from 'vs/platform/workspaces/common/workspaces'; -import { IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { FileAccess } from 'vs/base/common/network'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Event } from '../../../../base/common/event.js'; +import { join } from '../../../../base/common/path.js'; +import { extUriBiasedIgnorePathCase } from '../../../../base/common/resources.js'; +import { URI, UriDto } from '../../../../base/common/uri.js'; +import { ICommandAction } from '../../../action/common/action.js'; +import { NativeParsedArgs } from '../../../environment/common/argv.js'; +import { INativeWindowConfiguration } from '../../../window/common/window.js'; +import { ICodeWindow, ILoadEvent, IWindowState } from '../../../window/electron-main/window.js'; +import { findWindowOnFile } from '../../electron-main/windowsFinder.js'; +import { toWorkspaceFolders } from '../../../workspaces/common/workspaces.js'; +import { IWorkspaceIdentifier } from '../../../workspace/common/workspace.js'; +import { FileAccess } from '../../../../base/common/network.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('WindowsFinder', () => { diff --git a/src/vs/platform/windows/test/electron-main/windowsStateHandler.test.ts b/src/vs/platform/windows/test/electron-main/windowsStateHandler.test.ts index 65d1a9937..a1ed6bd27 100644 --- a/src/vs/platform/windows/test/electron-main/windowsStateHandler.test.ts +++ b/src/vs/platform/windows/test/electron-main/windowsStateHandler.test.ts @@ -5,12 +5,12 @@ import assert from 'assert'; import { tmpdir } from 'os'; -import { join } from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IWindowState as IWindowUIState, WindowMode } from 'vs/platform/window/electron-main/window'; -import { getWindowsStateStoreData, IWindowsState, IWindowState, restoreWindowsState } from 'vs/platform/windows/electron-main/windowsStateHandler'; -import { IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { join } from '../../../../base/common/path.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IWindowState as IWindowUIState, WindowMode } from '../../../window/electron-main/window.js'; +import { getWindowsStateStoreData, IWindowsState, IWindowState, restoreWindowsState } from '../../electron-main/windowsStateHandler.js'; +import { IWorkspaceIdentifier } from '../../../workspace/common/workspace.js'; suite('Windows State Storing', () => { diff --git a/src/vs/platform/workspace/common/canonicalUri.ts b/src/vs/platform/workspace/common/canonicalUri.ts index 11196429b..f34a14785 100644 --- a/src/vs/platform/workspace/common/canonicalUri.ts +++ b/src/vs/platform/workspace/common/canonicalUri.ts @@ -3,10 +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 { IDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export interface ICanonicalUriProvider { readonly scheme: string; diff --git a/src/vs/platform/workspace/common/editSessions.ts b/src/vs/platform/workspace/common/editSessions.ts index 1eb989cda..a80e6d095 100644 --- a/src/vs/platform/workspace/common/editSessions.ts +++ b/src/vs/platform/workspace/common/editSessions.ts @@ -3,10 +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 { IDisposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IWorkspaceFolder } from './workspace.js'; export interface IEditSessionIdentityProvider { readonly scheme: string; diff --git a/src/vs/platform/workspace/common/virtualWorkspace.ts b/src/vs/platform/workspace/common/virtualWorkspace.ts index 6161b9215..e4321bf56 100644 --- a/src/vs/platform/workspace/common/virtualWorkspace.ts +++ b/src/vs/platform/workspace/common/virtualWorkspace.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IWorkspace } from 'vs/platform/workspace/common/workspace'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IWorkspace } from './workspace.js'; export function isVirtualResource(resource: URI) { return resource.scheme !== Schemas.file && resource.scheme !== Schemas.vscodeRemote; diff --git a/src/vs/platform/workspace/common/workspace.ts b/src/vs/platform/workspace/common/workspace.ts index 4ad55ee58..c6e7245ba 100644 --- a/src/vs/platform/workspace/common/workspace.ts +++ b/src/vs/platform/workspace/common/workspace.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Event } from 'vs/base/common/event'; -import { basename, extname } from 'vs/base/common/path'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { extname as resourceExtname, basenameOrAuthority, joinPath, extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { Schemas } from 'vs/base/common/network'; +import { localize } from '../../../nls.js'; +import { Event } from '../../../base/common/event.js'; +import { basename, extname } from '../../../base/common/path.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { extname as resourceExtname, basenameOrAuthority, joinPath, extUriBiasedIgnorePathCase } from '../../../base/common/resources.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { IEnvironmentService } from '../../environment/common/environment.js'; +import { Schemas } from '../../../base/common/network.js'; export const IWorkspaceContextService = createDecorator('contextService'); diff --git a/src/vs/platform/workspace/common/workspaceTrust.ts b/src/vs/platform/workspace/common/workspaceTrust.ts index 7988f9a93..2d3ea5d1e 100644 --- a/src/vs/platform/workspace/common/workspaceTrust.ts +++ b/src/vs/platform/workspace/common/workspaceTrust.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from '../../../base/common/event.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; export enum WorkspaceTrustScope { Local = 0, diff --git a/src/vs/platform/workspace/test/common/testWorkspace.ts b/src/vs/platform/workspace/test/common/testWorkspace.ts index c5c2fb62d..81fee3823 100644 --- a/src/vs/platform/workspace/test/common/testWorkspace.ts +++ b/src/vs/platform/workspace/test/common/testWorkspace.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { toWorkspaceFolder, Workspace as BaseWorkspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { isLinux, isWindows } from '../../../../base/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import { toWorkspaceFolder, Workspace as BaseWorkspace, WorkspaceFolder } from '../../common/workspace.js'; export class Workspace extends BaseWorkspace { constructor( diff --git a/src/vs/platform/workspace/test/common/workspace.test.ts b/src/vs/platform/workspace/test/common/workspace.test.ts index fb8c1cf18..0c20623a9 100644 --- a/src/vs/platform/workspace/test/common/workspace.test.ts +++ b/src/vs/platform/workspace/test/common/workspace.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { join } from 'vs/base/common/path'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IRawFileWorkspaceFolder, Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { toWorkspaceFolders } from 'vs/platform/workspaces/common/workspaces'; +import { join } from '../../../../base/common/path.js'; +import { isLinux, isWindows } from '../../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IRawFileWorkspaceFolder, Workspace, WorkspaceFolder } from '../../common/workspace.js'; +import { toWorkspaceFolders } from '../../../workspaces/common/workspaces.js'; suite('Workspace', () => { diff --git a/src/vs/platform/workspaces/common/workspaces.ts b/src/vs/platform/workspaces/common/workspaces.ts index 71e4a623f..6097076c4 100644 --- a/src/vs/platform/workspaces/common/workspaces.ts +++ b/src/vs/platform/workspaces/common/workspaces.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { isUNC, toSlashes } from 'vs/base/common/extpath'; -import * as json from 'vs/base/common/json'; -import * as jsonEdit from 'vs/base/common/jsonEdit'; -import { FormattingOptions } from 'vs/base/common/jsonFormatter'; -import { normalizeDriveLetter } from 'vs/base/common/labels'; -import { Schemas } from 'vs/base/common/network'; -import { isAbsolute, posix } from 'vs/base/common/path'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { IExtUri, isEqualAuthority } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IWorkspaceBackupInfo, IFolderBackupInfo } from 'vs/platform/backup/common/backup'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { getRemoteAuthority } from 'vs/platform/remote/common/remoteHosts'; -import { IBaseWorkspace, IRawFileWorkspaceFolder, IRawUriWorkspaceFolder, IWorkspaceIdentifier, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { Event } from '../../../base/common/event.js'; +import { isUNC, toSlashes } from '../../../base/common/extpath.js'; +import * as json from '../../../base/common/json.js'; +import * as jsonEdit from '../../../base/common/jsonEdit.js'; +import { FormattingOptions } from '../../../base/common/jsonFormatter.js'; +import { normalizeDriveLetter } from '../../../base/common/labels.js'; +import { Schemas } from '../../../base/common/network.js'; +import { isAbsolute, posix } from '../../../base/common/path.js'; +import { isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { IExtUri, isEqualAuthority } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IWorkspaceBackupInfo, IFolderBackupInfo } from '../../backup/common/backup.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { getRemoteAuthority } from '../../remote/common/remoteHosts.js'; +import { IBaseWorkspace, IRawFileWorkspaceFolder, IRawUriWorkspaceFolder, IWorkspaceIdentifier, WorkspaceFolder } from '../../workspace/common/workspace.js'; export const IWorkspacesService = createDecorator('workspacesService'); diff --git a/src/vs/platform/workspaces/electron-main/workspacesHistoryMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesHistoryMainService.ts index a6f7fc430..0ee2bec49 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesHistoryMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesHistoryMainService.ts @@ -4,27 +4,27 @@ *--------------------------------------------------------------------------------------------*/ import { app, JumpListCategory, JumpListItem } from 'electron'; -import { coalesce } from 'vs/base/common/arrays'; -import { ThrottledDelayer } from 'vs/base/common/async'; -import { Emitter, Event as CommonEvent } from 'vs/base/common/event'; -import { normalizeDriveLetter, splitRecentLabel } from 'vs/base/common/labels'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { isMacintosh, isWindows } from 'vs/base/common/platform'; -import { basename, extUriBiasedIgnorePathCase, originalFSPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { Promises } from 'vs/base/node/pfs'; -import { localize } from 'vs/nls'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IApplicationStorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; -import { IRecent, IRecentFile, IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFile, isRecentFolder, isRecentWorkspace, restoreRecentlyOpened, toStoreData } from 'vs/platform/workspaces/common/workspaces'; -import { IWorkspaceIdentifier, WORKSPACE_EXTENSION } from 'vs/platform/workspace/common/workspace'; -import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { ResourceMap } from 'vs/base/common/map'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; +import { coalesce } from '../../../base/common/arrays.js'; +import { ThrottledDelayer } from '../../../base/common/async.js'; +import { Emitter, Event as CommonEvent } from '../../../base/common/event.js'; +import { normalizeDriveLetter, splitRecentLabel } from '../../../base/common/labels.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { basename, extUriBiasedIgnorePathCase, originalFSPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { localize } from '../../../nls.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILifecycleMainService, LifecycleMainPhase } from '../../lifecycle/electron-main/lifecycleMainService.js'; +import { ILogService } from '../../log/common/log.js'; +import { StorageScope, StorageTarget } from '../../storage/common/storage.js'; +import { IApplicationStorageMainService } from '../../storage/electron-main/storageMainService.js'; +import { IRecent, IRecentFile, IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFile, isRecentFolder, isRecentWorkspace, restoreRecentlyOpened, toStoreData } from '../common/workspaces.js'; +import { IWorkspaceIdentifier, WORKSPACE_EXTENSION } from '../../workspace/common/workspace.js'; +import { IWorkspacesManagementMainService } from './workspacesManagementMainService.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; export const IWorkspacesHistoryMainService = createDecorator('workspacesHistoryMainService'); diff --git a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts index de17f98be..b42bd3ad6 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AddFirstParameterToFunctions } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; -import { IEnterWorkspaceResult, IRecent, IRecentlyOpened, IWorkspaceFolderCreationData, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IWorkspacesHistoryMainService } from 'vs/platform/workspaces/electron-main/workspacesHistoryMainService'; -import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; -import { IWorkspaceBackupInfo, IFolderBackupInfo } from 'vs/platform/backup/common/backup'; +import { AddFirstParameterToFunctions } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { IBackupMainService } from '../../backup/electron-main/backup.js'; +import { IWindowsMainService } from '../../windows/electron-main/windows.js'; +import { IEnterWorkspaceResult, IRecent, IRecentlyOpened, IWorkspaceFolderCreationData, IWorkspacesService } from '../common/workspaces.js'; +import { IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; +import { IWorkspacesHistoryMainService } from './workspacesHistoryMainService.js'; +import { IWorkspacesManagementMainService } from './workspacesManagementMainService.js'; +import { IWorkspaceBackupInfo, IFolderBackupInfo } from '../../backup/common/backup.js'; export class WorkspacesMainService implements AddFirstParameterToFunctions /* only methods, not events */, number /* window ID */> { diff --git a/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts index bfb4fcd51..904aea65d 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts @@ -5,26 +5,26 @@ import * as fs from 'fs'; import electron from 'electron'; -import { Emitter, Event } from 'vs/base/common/event'; -import { parse } from 'vs/base/common/json'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { dirname, join } from 'vs/base/common/path'; -import { basename, extUriBiasedIgnorePathCase, joinPath, originalFSPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { Promises } from 'vs/base/node/pfs'; -import { localize } from 'vs/nls'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { ICodeWindow } from 'vs/platform/window/electron-main/window'; -import { findWindowOnWorkspaceOrFolder } from 'vs/platform/windows/electron-main/windowsFinder'; -import { isWorkspaceIdentifier, IWorkspaceIdentifier, IResolvedWorkspace, hasWorkspaceFileExtension, UNTITLED_WORKSPACE_NAME, isUntitledWorkspace } from 'vs/platform/workspace/common/workspace'; -import { getStoredWorkspaceFolder, IEnterWorkspaceResult, isStoredWorkspaceFolder, IStoredWorkspace, IStoredWorkspaceFolder, IUntitledWorkspaceInfo, IWorkspaceFolderCreationData, toWorkspaceFolders } from 'vs/platform/workspaces/common/workspaces'; -import { getWorkspaceIdentifier } from 'vs/platform/workspaces/node/workspaces'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { parse } from '../../../base/common/json.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { dirname, join } from '../../../base/common/path.js'; +import { basename, extUriBiasedIgnorePathCase, joinPath, originalFSPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { localize } from '../../../nls.js'; +import { IBackupMainService } from '../../backup/electron-main/backup.js'; +import { IDialogMainService } from '../../dialogs/electron-main/dialogMainService.js'; +import { IEnvironmentMainService } from '../../environment/electron-main/environmentMainService.js'; +import { createDecorator } from '../../instantiation/common/instantiation.js'; +import { ILogService } from '../../log/common/log.js'; +import { IUserDataProfilesMainService } from '../../userDataProfile/electron-main/userDataProfile.js'; +import { ICodeWindow } from '../../window/electron-main/window.js'; +import { findWindowOnWorkspaceOrFolder } from '../../windows/electron-main/windowsFinder.js'; +import { isWorkspaceIdentifier, IWorkspaceIdentifier, IResolvedWorkspace, hasWorkspaceFileExtension, UNTITLED_WORKSPACE_NAME, isUntitledWorkspace } from '../../workspace/common/workspace.js'; +import { getStoredWorkspaceFolder, IEnterWorkspaceResult, isStoredWorkspaceFolder, IStoredWorkspace, IStoredWorkspaceFolder, IUntitledWorkspaceInfo, IWorkspaceFolderCreationData, toWorkspaceFolders } from '../common/workspaces.js'; +import { getWorkspaceIdentifier } from '../node/workspaces.js'; export const IWorkspacesManagementMainService = createDecorator('workspacesManagementMainService'); diff --git a/src/vs/platform/workspaces/node/workspaces.ts b/src/vs/platform/workspaces/node/workspaces.ts index 86e7f3ebe..1189358ed 100644 --- a/src/vs/platform/workspaces/node/workspaces.ts +++ b/src/vs/platform/workspaces/node/workspaces.ts @@ -5,11 +5,11 @@ import { createHash } from 'crypto'; import { Stats } from 'fs'; -import { Schemas } from 'vs/base/common/network'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { originalFSPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IEmptyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { Schemas } from '../../../base/common/network.js'; +import { isLinux, isMacintosh, isWindows } from '../../../base/common/platform.js'; +import { originalFSPath } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IEmptyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; /** * Length of workspace identifiers that are not empty. Those are diff --git a/src/vs/platform/workspaces/test/common/workspaces.test.ts b/src/vs/platform/workspaces/test/common/workspaces.test.ts index a08f1035c..12589a491 100644 --- a/src/vs/platform/workspaces/test/common/workspaces.test.ts +++ b/src/vs/platform/workspaces/test/common/workspaces.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ISerializedSingleFolderWorkspaceIdentifier, ISerializedWorkspaceIdentifier, reviveIdentifier, hasWorkspaceFileExtension, isWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, IEmptyWorkspaceIdentifier, toWorkspaceIdentifier, isEmptyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ISerializedSingleFolderWorkspaceIdentifier, ISerializedWorkspaceIdentifier, reviveIdentifier, hasWorkspaceFileExtension, isWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, IEmptyWorkspaceIdentifier, toWorkspaceIdentifier, isEmptyWorkspaceIdentifier } from '../../../workspace/common/workspace.js'; suite('Workspaces', () => { diff --git a/src/vs/platform/workspaces/test/electron-main/workspaces.test.ts b/src/vs/platform/workspaces/test/electron-main/workspaces.test.ts index 553be4fa3..0bfb4dedd 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspaces.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspaces.test.ts @@ -6,13 +6,13 @@ import assert from 'assert'; import * as fs from 'fs'; import * as os from 'os'; -import * as path from 'vs/base/common/path'; -import { isWindows } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import * as pfs from 'vs/base/node/pfs'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { getSingleFolderWorkspaceIdentifier, getWorkspaceIdentifier } from 'vs/platform/workspaces/node/workspaces'; +import * as path from '../../../../base/common/path.js'; +import { isWindows } from '../../../../base/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import * as pfs from '../../../../base/node/pfs.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { flakySuite, getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { getSingleFolderWorkspaceIdentifier, getWorkspaceIdentifier } from '../../node/workspaces.js'; flakySuite('Workspaces', () => { diff --git a/src/vs/platform/workspaces/test/electron-main/workspacesHistoryStorage.test.ts b/src/vs/platform/workspaces/test/electron-main/workspacesHistoryStorage.test.ts index f2102c3b0..1c86fda94 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspacesHistoryStorage.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspacesHistoryStorage.test.ts @@ -5,12 +5,12 @@ import assert from 'assert'; import { tmpdir } from 'os'; -import { join } from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFolder, restoreRecentlyOpened, toStoreData } from 'vs/platform/workspaces/common/workspaces'; +import { join } from '../../../../base/common/path.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../log/common/log.js'; +import { IWorkspaceIdentifier } from '../../../workspace/common/workspace.js'; +import { IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFolder, restoreRecentlyOpened, toStoreData } from '../../common/workspaces.js'; suite('History Storage', () => { diff --git a/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts b/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts index 92f1ac9f5..8b870f33a 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts @@ -6,32 +6,32 @@ import assert from 'assert'; import * as fs from 'fs'; import * as os from 'os'; -import { isUNC, toSlashes } from 'vs/base/common/extpath'; -import { normalizeDriveLetter } from 'vs/base/common/labels'; -import * as path from 'vs/base/common/path'; -import { isWindows } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import * as pfs from 'vs/base/node/pfs'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { IWorkspaceBackupInfo, IFolderBackupInfo } from 'vs/platform/backup/common/backup'; -import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; -import { IEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup'; -import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs'; -import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService'; -import { EnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; -import { OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { SaveStrategy, StateService } from 'vs/platform/state/node/stateService'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { UserDataProfilesMainService } from 'vs/platform/userDataProfile/electron-main/userDataProfile'; -import { IRawFileWorkspaceFolder, IRawUriWorkspaceFolder, WORKSPACE_EXTENSION } from 'vs/platform/workspace/common/workspace'; -import { IStoredWorkspace, IStoredWorkspaceFolder, IWorkspaceFolderCreationData, rewriteWorkspaceFileForNewLocation } from 'vs/platform/workspaces/common/workspaces'; -import { WorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; +import { isUNC, toSlashes } from '../../../../base/common/extpath.js'; +import { normalizeDriveLetter } from '../../../../base/common/labels.js'; +import * as path from '../../../../base/common/path.js'; +import { isWindows } from '../../../../base/common/platform.js'; +import { extUriBiasedIgnorePathCase } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import * as pfs from '../../../../base/node/pfs.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { flakySuite, getRandomTestPath } from '../../../../base/test/node/testUtils.js'; +import { IWorkspaceBackupInfo, IFolderBackupInfo } from '../../../backup/common/backup.js'; +import { IBackupMainService } from '../../../backup/electron-main/backup.js'; +import { IEmptyWindowBackupInfo } from '../../../backup/node/backup.js'; +import { INativeOpenDialogOptions } from '../../../dialogs/common/dialogs.js'; +import { IDialogMainService } from '../../../dialogs/electron-main/dialogMainService.js'; +import { EnvironmentMainService } from '../../../environment/electron-main/environmentMainService.js'; +import { OPTIONS, parseArgs } from '../../../environment/node/argv.js'; +import { FileService } from '../../../files/common/fileService.js'; +import { NullLogService } from '../../../log/common/log.js'; +import product from '../../../product/common/product.js'; +import { IProductService } from '../../../product/common/productService.js'; +import { SaveStrategy, StateService } from '../../../state/node/stateService.js'; +import { UriIdentityService } from '../../../uriIdentity/common/uriIdentityService.js'; +import { UserDataProfilesMainService } from '../../../userDataProfile/electron-main/userDataProfile.js'; +import { IRawFileWorkspaceFolder, IRawUriWorkspaceFolder, WORKSPACE_EXTENSION } from '../../../workspace/common/workspace.js'; +import { IStoredWorkspace, IStoredWorkspaceFolder, IWorkspaceFolderCreationData, rewriteWorkspaceFileForNewLocation } from '../../common/workspaces.js'; +import { WorkspacesManagementMainService } from '../../electron-main/workspacesManagementMainService.js'; flakySuite('WorkspacesManagementMainService', () => { diff --git a/src/vs/server/node/extensionHostConnection.ts b/src/vs/server/node/extensionHostConnection.ts index f345bd69a..ab484be52 100644 --- a/src/vs/server/node/extensionHostConnection.ts +++ b/src/vs/server/node/extensionHostConnection.ts @@ -5,23 +5,23 @@ import * as cp from 'child_process'; import * as net from 'net'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { FileAccess } from 'vs/base/common/network'; -import { delimiter, join } from 'vs/base/common/path'; -import { IProcessEnvironment, isWindows } from 'vs/base/common/platform'; -import { removeDangerousEnvVariables } from 'vs/base/common/processes'; -import { createRandomIPCHandle, NodeSocket, WebSocketNodeSocket } from 'vs/base/parts/ipc/node/ipc.net'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IRemoteExtensionHostStartParams } from 'vs/platform/remote/common/remoteAgentConnection'; -import { getResolvedShellEnv } from 'vs/platform/shell/node/shellEnv'; -import { IExtensionHostStatusService } from 'vs/server/node/extensionHostStatusService'; -import { getNLSConfiguration } from 'vs/server/node/remoteLanguagePacks'; -import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService'; -import { IPCExtHostConnection, SocketExtHostConnection, writeExtHostConnection } from 'vs/workbench/services/extensions/common/extensionHostEnv'; -import { IExtHostReadyMessage, IExtHostReduceGraceTimeMessage, IExtHostSocketMessage } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; +import { VSBuffer } from '../../base/common/buffer.js'; +import { Emitter, Event } from '../../base/common/event.js'; +import { Disposable, DisposableStore, toDisposable } from '../../base/common/lifecycle.js'; +import { FileAccess } from '../../base/common/network.js'; +import { delimiter, join } from '../../base/common/path.js'; +import { IProcessEnvironment, isWindows } from '../../base/common/platform.js'; +import { removeDangerousEnvVariables } from '../../base/common/processes.js'; +import { createRandomIPCHandle, NodeSocket, WebSocketNodeSocket } from '../../base/parts/ipc/node/ipc.net.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { IRemoteExtensionHostStartParams } from '../../platform/remote/common/remoteAgentConnection.js'; +import { getResolvedShellEnv } from '../../platform/shell/node/shellEnv.js'; +import { IExtensionHostStatusService } from './extensionHostStatusService.js'; +import { getNLSConfiguration } from './remoteLanguagePacks.js'; +import { IServerEnvironmentService } from './serverEnvironmentService.js'; +import { IPCExtHostConnection, SocketExtHostConnection, writeExtHostConnection } from '../../workbench/services/extensions/common/extensionHostEnv.js'; +import { IExtHostReadyMessage, IExtHostReduceGraceTimeMessage, IExtHostSocketMessage } from '../../workbench/services/extensions/common/extensionHostProtocol.js'; export async function buildUserEnvironment(startParamsEnv: { [key: string]: string | null } = {}, withUserShellEnvironment: boolean, language: string, environmentService: IServerEnvironmentService, logService: ILogService, configurationService: IConfigurationService): Promise { const nlsConfig = await getNLSConfiguration(language, environmentService.userDataPath); diff --git a/src/vs/server/node/extensionHostStatusService.ts b/src/vs/server/node/extensionHostStatusService.ts index d6f7c9e1b..79426739b 100644 --- a/src/vs/server/node/extensionHostStatusService.ts +++ b/src/vs/server/node/extensionHostStatusService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtensionHostExitInfo } from 'vs/workbench/services/remote/common/remoteAgentService'; +import { createDecorator } from '../../platform/instantiation/common/instantiation.js'; +import { IExtensionHostExitInfo } from '../../workbench/services/remote/common/remoteAgentService.js'; export const IExtensionHostStatusService = createDecorator('extensionHostStatusService'); diff --git a/src/vs/server/node/extensionsScannerService.ts b/src/vs/server/node/extensionsScannerService.ts index 78dc3bce4..5a191557c 100644 --- a/src/vs/server/node/extensionsScannerService.ts +++ b/src/vs/server/node/extensionsScannerService.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { joinPath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { AbstractExtensionsScannerService, IExtensionsScannerService, Translations } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { getNLSConfiguration } from 'vs/server/node/remoteLanguagePacks'; +import { joinPath } from '../../base/common/resources.js'; +import { URI } from '../../base/common/uri.js'; +import { INativeEnvironmentService } from '../../platform/environment/common/environment.js'; +import { IExtensionsProfileScannerService } from '../../platform/extensionManagement/common/extensionsProfileScannerService.js'; +import { AbstractExtensionsScannerService, IExtensionsScannerService, Translations } from '../../platform/extensionManagement/common/extensionsScannerService.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js'; +import { IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js'; +import { getNLSConfiguration } from './remoteLanguagePacks.js'; export class ExtensionsScannerService extends AbstractExtensionsScannerService implements IExtensionsScannerService { diff --git a/src/vs/server/node/remoteAgentEnvironmentImpl.ts b/src/vs/server/node/remoteAgentEnvironmentImpl.ts index b9861444c..e050ae1f4 100644 --- a/src/vs/server/node/remoteAgentEnvironmentImpl.ts +++ b/src/vs/server/node/remoteAgentEnvironmentImpl.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import * as platform from 'vs/base/common/platform'; -import * as performance from 'vs/base/common/performance'; -import { URI } from 'vs/base/common/uri'; -import { createURITransformer } from 'vs/workbench/api/node/uriTransformer'; -import { IRemoteAgentEnvironmentDTO, IGetEnvironmentDataArguments, IGetExtensionHostExitInfoArguments } from 'vs/workbench/services/remote/common/remoteAgentEnvironmentChannel'; -import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { transformOutgoingURIs } from 'vs/base/common/uriIpc'; -import { listProcesses } from 'vs/base/node/ps'; -import { getMachineInfo, collectWorkspaceStats } from 'vs/platform/diagnostics/node/diagnosticsService'; -import { IDiagnosticInfoOptions, IDiagnosticInfo } from 'vs/platform/diagnostics/common/diagnostics'; -import { basename } from 'vs/base/common/path'; -import { ProcessItem } from 'vs/base/common/processes'; -import { ServerConnectionToken, ServerConnectionTokenType } from 'vs/server/node/serverConnectionToken'; -import { IExtensionHostStatusService } from 'vs/server/node/extensionHostStatusService'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { joinPath } from 'vs/base/common/resources'; +import { Event } from '../../base/common/event.js'; +import * as platform from '../../base/common/platform.js'; +import * as performance from '../../base/common/performance.js'; +import { URI } from '../../base/common/uri.js'; +import { createURITransformer } from '../../workbench/api/node/uriTransformer.js'; +import { IRemoteAgentEnvironmentDTO, IGetEnvironmentDataArguments, IGetExtensionHostExitInfoArguments } from '../../workbench/services/remote/common/remoteAgentEnvironmentChannel.js'; +import { IServerEnvironmentService } from './serverEnvironmentService.js'; +import { IServerChannel } from '../../base/parts/ipc/common/ipc.js'; +import { transformOutgoingURIs } from '../../base/common/uriIpc.js'; +import { listProcesses } from '../../base/node/ps.js'; +import { getMachineInfo, collectWorkspaceStats } from '../../platform/diagnostics/node/diagnosticsService.js'; +import { IDiagnosticInfoOptions, IDiagnosticInfo } from '../../platform/diagnostics/common/diagnostics.js'; +import { basename } from '../../base/common/path.js'; +import { ProcessItem } from '../../base/common/processes.js'; +import { ServerConnectionToken, ServerConnectionTokenType } from './serverConnectionToken.js'; +import { IExtensionHostStatusService } from './extensionHostStatusService.js'; +import { IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js'; +import { joinPath } from '../../base/common/resources.js'; export class RemoteAgentEnvironmentChannel implements IServerChannel { diff --git a/src/vs/server/node/remoteExtensionHostAgentCli.ts b/src/vs/server/node/remoteExtensionHostAgentCli.ts index b489ca72b..47322ee6a 100644 --- a/src/vs/server/node/remoteExtensionHostAgentCli.ts +++ b/src/vs/server/node/remoteExtensionHostAgentCli.ts @@ -3,53 +3,53 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ConsoleLogger, getLogLevel, ILoggerService, ILogService } from 'vs/platform/log/common/log'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { RequestService } from 'vs/platform/request/node/requestService'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IExtensionGalleryService, InstallOptions } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionGalleryServiceWithNoStorageService } from 'vs/platform/extensionManagement/common/extensionGalleryService'; -import { ExtensionManagementService, INativeServerExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; -import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import product from 'vs/platform/product/common/product'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { Schemas } from 'vs/base/common/network'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IServerEnvironmentService, ServerEnvironmentService, ServerParsedArgs } from 'vs/server/node/serverEnvironmentService'; -import { ExtensionManagementCLI } from 'vs/platform/extensionManagement/common/extensionManagementCLI'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; -import { NativeLanguagePackService } from 'vs/platform/languagePacks/node/languagePacks'; -import { getErrorMessage } from 'vs/base/common/errors'; -import { URI } from 'vs/base/common/uri'; -import { isAbsolute, join } from 'vs/base/common/path'; -import { cwd } from 'vs/base/common/process'; -import { DownloadService } from 'vs/platform/download/common/downloadService'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { buildHelpMessage, buildVersionMessage, OptionDescriptions } from 'vs/platform/environment/node/argv'; -import { isWindows } from 'vs/base/common/platform'; -import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionsScannerService } from 'vs/server/node/extensionsScannerService'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { NullPolicyService } from 'vs/platform/policy/common/policy'; -import { ServerUserDataProfilesService } from 'vs/platform/userDataProfile/node/userDataProfile'; -import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { LogService } from 'vs/platform/log/common/logService'; -import { LoggerService } from 'vs/platform/log/node/loggerService'; -import { localize } from 'vs/nls'; -import { addUNCHostToAllowlist, disableUNCAccessRestrictions } from 'vs/base/node/unc'; +import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js'; +import { ConsoleLogger, getLogLevel, ILoggerService, ILogService, NullLogger } from '../../platform/log/common/log.js'; +import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; +import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { IRequestService } from '../../platform/request/common/request.js'; +import { RequestService } from '../../platform/request/node/requestService.js'; +import { NullTelemetryService } from '../../platform/telemetry/common/telemetryUtils.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { IExtensionGalleryService, InstallOptions } from '../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionGalleryServiceWithNoStorageService } from '../../platform/extensionManagement/common/extensionGalleryService.js'; +import { ExtensionManagementService, INativeServerExtensionManagementService } from '../../platform/extensionManagement/node/extensionManagementService.js'; +import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from '../../platform/extensionManagement/node/extensionSignatureVerificationService.js'; +import { InstantiationService } from '../../platform/instantiation/common/instantiationService.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import product from '../../platform/product/common/product.js'; +import { Disposable } from '../../base/common/lifecycle.js'; +import { FileService } from '../../platform/files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystemProvider.js'; +import { Schemas } from '../../base/common/network.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { IServerEnvironmentService, ServerEnvironmentService, ServerParsedArgs } from './serverEnvironmentService.js'; +import { ExtensionManagementCLI } from '../../platform/extensionManagement/common/extensionManagementCLI.js'; +import { ILanguagePackService } from '../../platform/languagePacks/common/languagePacks.js'; +import { NativeLanguagePackService } from '../../platform/languagePacks/node/languagePacks.js'; +import { getErrorMessage } from '../../base/common/errors.js'; +import { URI } from '../../base/common/uri.js'; +import { isAbsolute, join } from '../../base/common/path.js'; +import { cwd } from '../../base/common/process.js'; +import { DownloadService } from '../../platform/download/common/downloadService.js'; +import { IDownloadService } from '../../platform/download/common/download.js'; +import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../platform/uriIdentity/common/uriIdentityService.js'; +import { buildHelpMessage, buildVersionMessage, OptionDescriptions } from '../../platform/environment/node/argv.js'; +import { isWindows } from '../../base/common/platform.js'; +import { IExtensionsScannerService } from '../../platform/extensionManagement/common/extensionsScannerService.js'; +import { ExtensionsScannerService } from './extensionsScannerService.js'; +import { IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js'; +import { IExtensionsProfileScannerService } from '../../platform/extensionManagement/common/extensionsProfileScannerService.js'; +import { NullPolicyService } from '../../platform/policy/common/policy.js'; +import { ServerUserDataProfilesService } from '../../platform/userDataProfile/node/userDataProfile.js'; +import { ExtensionsProfileScannerService } from '../../platform/extensionManagement/node/extensionsProfileScannerService.js'; +import { LogService } from '../../platform/log/common/logService.js'; +import { LoggerService } from '../../platform/log/node/loggerService.js'; +import { localize } from '../../nls.js'; +import { addUNCHostToAllowlist, disableUNCAccessRestrictions } from '../../base/node/unc.js'; class CliMain extends Disposable { @@ -128,7 +128,7 @@ class CliMain extends Disposable { userDataProfilesService.init() ]); - services.set(IRequestService, new SyncDescriptor(RequestService)); + services.set(IRequestService, new SyncDescriptor(RequestService, [new NullLogger()])); services.set(IDownloadService, new SyncDescriptor(DownloadService)); services.set(ITelemetryService, NullTelemetryService); services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryServiceWithNoStorageService)); diff --git a/src/vs/server/node/remoteExtensionHostAgentServer.ts b/src/vs/server/node/remoteExtensionHostAgentServer.ts index c076b5c11..c77fbfd37 100644 --- a/src/vs/server/node/remoteExtensionHostAgentServer.ts +++ b/src/vs/server/node/remoteExtensionHostAgentServer.ts @@ -9,37 +9,41 @@ import * as http from 'http'; import * as net from 'net'; import { performance } from 'perf_hooks'; import * as url from 'url'; -import { LoaderStats, isESM } from 'vs/base/common/amd'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CharCode } from 'vs/base/common/charCode'; -import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { isEqualOrParent } from 'vs/base/common/extpath'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { connectionTokenQueryName, FileAccess, getServerRootPath, Schemas } from 'vs/base/common/network'; -import { dirname, join } from 'vs/base/common/path'; -import * as perf from 'vs/base/common/performance'; -import * as platform from 'vs/base/common/platform'; -import { createRegExp, escapeRegExpCharacters } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { getOSReleaseInfo } from 'vs/base/node/osReleaseInfo'; -import { findFreePort } from 'vs/base/node/ports'; -import { addUNCHostToAllowlist, disableUNCAccessRestrictions } from 'vs/base/node/unc'; -import { PersistentProtocol } from 'vs/base/parts/ipc/common/ipc.net'; -import { NodeSocket, WebSocketNodeSocket } from 'vs/base/parts/ipc/node/ipc.net'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ConnectionType, ConnectionTypeRequest, ErrorMessage, HandshakeMessage, IRemoteExtensionHostStartParams, ITunnelConnectionStartParams, SignRequest } from 'vs/platform/remote/common/remoteAgentConnection'; -import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ExtensionHostConnection } from 'vs/server/node/extensionHostConnection'; -import { ManagementConnection } from 'vs/server/node/remoteExtensionManagement'; -import { determineServerConnectionToken, requestHasValidConnectionToken as httpRequestHasValidConnectionToken, ServerConnectionToken, ServerConnectionTokenParseError, ServerConnectionTokenType } from 'vs/server/node/serverConnectionToken'; -import { IServerEnvironmentService, ServerParsedArgs } from 'vs/server/node/serverEnvironmentService'; -import { setupServerServices, SocketServer } from 'vs/server/node/serverServices'; -import { CacheControl, serveError, serveFile, WebClientServer } from 'vs/server/node/webClientServer'; +import { LoaderStats, isESM } from '../../base/common/amd.js'; +import { VSBuffer } from '../../base/common/buffer.js'; +import { CharCode } from '../../base/common/charCode.js'; +import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js'; +import { isEqualOrParent } from '../../base/common/extpath.js'; +import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; +import { connectionTokenQueryName, FileAccess, getServerRootPath, Schemas } from '../../base/common/network.js'; +import { dirname, join } from '../../base/common/path.js'; +import * as perf from '../../base/common/performance.js'; +import * as platform from '../../base/common/platform.js'; +import { createRegExp, escapeRegExpCharacters } from '../../base/common/strings.js'; +import { URI } from '../../base/common/uri.js'; +import { generateUuid } from '../../base/common/uuid.js'; +import { getOSReleaseInfo } from '../../base/node/osReleaseInfo.js'; +import { findFreePort } from '../../base/node/ports.js'; +import { addUNCHostToAllowlist, disableUNCAccessRestrictions } from '../../base/node/unc.js'; +import { PersistentProtocol } from '../../base/parts/ipc/common/ipc.net.js'; +import { NodeSocket, WebSocketNodeSocket } from '../../base/parts/ipc/node/ipc.net.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { ConnectionType, ConnectionTypeRequest, ErrorMessage, HandshakeMessage, IRemoteExtensionHostStartParams, ITunnelConnectionStartParams, SignRequest } from '../../platform/remote/common/remoteAgentConnection.js'; +import { RemoteAgentConnectionContext } from '../../platform/remote/common/remoteAgentEnvironment.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { ExtensionHostConnection } from './extensionHostConnection.js'; +import { ManagementConnection } from './remoteExtensionManagement.js'; +import { determineServerConnectionToken, requestHasValidConnectionToken as httpRequestHasValidConnectionToken, ServerConnectionToken, ServerConnectionTokenParseError, ServerConnectionTokenType } from './serverConnectionToken.js'; +import { IServerEnvironmentService, ServerParsedArgs } from './serverEnvironmentService.js'; +import { setupServerServices, SocketServer } from './serverServices.js'; +import { CacheControl, serveError, serveFile, WebClientServer } from './webClientServer.js'; +// ESM-uncomment-begin +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); +// ESM-uncomment-end const SHUTDOWN_TIMEOUT = 5 * 60 * 1000; @@ -768,7 +772,7 @@ export async function createServer(address: string | net.AddressInfo | null, arg const hasVSDA = fs.existsSync(join(FileAccess.asFileUri('').fsPath, '../node_modules/vsda')); if (hasVSDA) { try { - return globalThis._VSCODE_NODE_MODULES['vsda']; + return require('vsda'); } catch (err) { logService.error(err); } diff --git a/src/vs/server/node/remoteExtensionManagement.ts b/src/vs/server/node/remoteExtensionManagement.ts index 8c1908658..d9179e2b2 100644 --- a/src/vs/server/node/remoteExtensionManagement.ts +++ b/src/vs/server/node/remoteExtensionManagement.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { PersistentProtocol, ProtocolConstants, ISocket } from 'vs/base/parts/ipc/common/ipc.net'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Emitter, Event } from 'vs/base/common/event'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { ProcessTimeRunOnceScheduler } from 'vs/base/common/async'; +import { PersistentProtocol, ProtocolConstants, ISocket } from '../../base/parts/ipc/common/ipc.net.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { Emitter, Event } from '../../base/common/event.js'; +import { VSBuffer } from '../../base/common/buffer.js'; +import { ProcessTimeRunOnceScheduler } from '../../base/common/async.js'; function printTime(ms: number): string { let h = 0; diff --git a/src/vs/server/node/remoteExtensionsScanner.ts b/src/vs/server/node/remoteExtensionsScanner.ts index 7b58140ea..ee94de109 100644 --- a/src/vs/server/node/remoteExtensionsScanner.ts +++ b/src/vs/server/node/remoteExtensionsScanner.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isAbsolute, join, resolve } from 'vs/base/common/path'; -import * as platform from 'vs/base/common/platform'; -import { cwd } from 'vs/base/common/process'; -import { URI } from 'vs/base/common/uri'; -import * as performance from 'vs/base/common/performance'; -import { Event } from 'vs/base/common/event'; -import { IURITransformer, transformOutgoingURIs } from 'vs/base/common/uriIpc'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { ContextKeyDefinedExpr, ContextKeyEqualsExpr, ContextKeyExpr, ContextKeyExpression, ContextKeyGreaterEqualsExpr, ContextKeyGreaterExpr, ContextKeyInExpr, ContextKeyNotEqualsExpr, ContextKeyNotExpr, ContextKeyNotInExpr, ContextKeyRegexExpr, ContextKeySmallerEqualsExpr, ContextKeySmallerExpr, IContextKeyExprMapper } from 'vs/platform/contextkey/common/contextkey'; -import { IExtensionGalleryService, InstallOptions } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionManagementCLI } from 'vs/platform/extensionManagement/common/extensionManagementCLI'; -import { IExtensionsScannerService, toExtensionDescription } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionType, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService'; -import { dedupExtensions } from 'vs/workbench/services/extensions/common/extensionsUtil'; -import { Schemas } from 'vs/base/common/network'; -import { IRemoteExtensionsScannerService } from 'vs/platform/remote/common/remoteExtensionsScanner'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; +import { isAbsolute, join, resolve } from '../../base/common/path.js'; +import * as platform from '../../base/common/platform.js'; +import { cwd } from '../../base/common/process.js'; +import { URI } from '../../base/common/uri.js'; +import * as performance from '../../base/common/performance.js'; +import { Event } from '../../base/common/event.js'; +import { IURITransformer, transformOutgoingURIs } from '../../base/common/uriIpc.js'; +import { IServerChannel } from '../../base/parts/ipc/common/ipc.js'; +import { ContextKeyDefinedExpr, ContextKeyEqualsExpr, ContextKeyExpr, ContextKeyExpression, ContextKeyGreaterEqualsExpr, ContextKeyGreaterExpr, ContextKeyInExpr, ContextKeyNotEqualsExpr, ContextKeyNotExpr, ContextKeyNotInExpr, ContextKeyRegexExpr, ContextKeySmallerEqualsExpr, ContextKeySmallerExpr, IContextKeyExprMapper } from '../../platform/contextkey/common/contextkey.js'; +import { IExtensionGalleryService, InstallOptions } from '../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionManagementCLI } from '../../platform/extensionManagement/common/extensionManagementCLI.js'; +import { IExtensionsScannerService, toExtensionDescription } from '../../platform/extensionManagement/common/extensionsScannerService.js'; +import { ExtensionType, IExtensionDescription } from '../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js'; +import { IServerEnvironmentService } from './serverEnvironmentService.js'; +import { dedupExtensions } from '../../workbench/services/extensions/common/extensionsUtil.js'; +import { Schemas } from '../../base/common/network.js'; +import { IRemoteExtensionsScannerService } from '../../platform/remote/common/remoteExtensionsScanner.js'; +import { ILanguagePackService } from '../../platform/languagePacks/common/languagePacks.js'; export class RemoteExtensionsScannerService implements IRemoteExtensionsScannerService { diff --git a/src/vs/server/node/remoteFileSystemProviderServer.ts b/src/vs/server/node/remoteFileSystemProviderServer.ts index 9a4c62a6a..3ab5969e5 100644 --- a/src/vs/server/node/remoteFileSystemProviderServer.ts +++ b/src/vs/server/node/remoteFileSystemProviderServer.ts @@ -3,18 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { IFileChange } from 'vs/platform/files/common/files'; -import { ILogService } from 'vs/platform/log/common/log'; -import { createURITransformer } from 'vs/workbench/api/node/uriTransformer'; -import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { posix, delimiter } from 'vs/base/common/path'; -import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService'; -import { AbstractDiskFileSystemProviderChannel, AbstractSessionFileWatcher, ISessionFileWatcher } from 'vs/platform/files/node/diskFileSystemProviderServer'; -import { IRecursiveWatcherOptions } from 'vs/platform/files/common/watcher'; +import { Emitter } from '../../base/common/event.js'; +import { URI, UriComponents } from '../../base/common/uri.js'; +import { IURITransformer } from '../../base/common/uriIpc.js'; +import { IFileChange } from '../../platform/files/common/files.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { createURITransformer } from '../../workbench/api/node/uriTransformer.js'; +import { RemoteAgentConnectionContext } from '../../platform/remote/common/remoteAgentEnvironment.js'; +import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystemProvider.js'; +import { posix, delimiter } from '../../base/common/path.js'; +import { IServerEnvironmentService } from './serverEnvironmentService.js'; +import { AbstractDiskFileSystemProviderChannel, AbstractSessionFileWatcher, ISessionFileWatcher } from '../../platform/files/node/diskFileSystemProviderServer.js'; +import { IRecursiveWatcherOptions } from '../../platform/files/common/watcher.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; export class RemoteAgentFileSystemProviderChannel extends AbstractDiskFileSystemProviderChannel { @@ -22,7 +23,8 @@ export class RemoteAgentFileSystemProviderChannel extends AbstractDiskFileSystem constructor( logService: ILogService, - private readonly environmentService: IServerEnvironmentService + private readonly environmentService: IServerEnvironmentService, + private readonly configurationService: IConfigurationService ) { super(new DiskFileSystemProvider(logService), logService); @@ -52,7 +54,7 @@ export class RemoteAgentFileSystemProviderChannel extends AbstractDiskFileSystem //#region File Watching protected createSessionFileWatcher(uriTransformer: IURITransformer, emitter: Emitter): ISessionFileWatcher { - return new SessionFileWatcher(uriTransformer, emitter, this.logService, this.environmentService); + return new SessionFileWatcher(uriTransformer, emitter, this.logService, this.environmentService, this.configurationService); } //#endregion @@ -64,7 +66,8 @@ class SessionFileWatcher extends AbstractSessionFileWatcher { uriTransformer: IURITransformer, sessionEmitter: Emitter, logService: ILogService, - environmentService: IServerEnvironmentService + environmentService: IServerEnvironmentService, + configurationService: IConfigurationService ) { super(uriTransformer, sessionEmitter, logService, environmentService); } diff --git a/src/vs/server/node/remoteLanguagePacks.ts b/src/vs/server/node/remoteLanguagePacks.ts index 2a1ea9f56..1e6db87fb 100644 --- a/src/vs/server/node/remoteLanguagePacks.ts +++ b/src/vs/server/node/remoteLanguagePacks.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { FileAccess } from 'vs/base/common/network'; -import { join } from 'vs/base/common/path'; -import type { INLSConfiguration } from 'vs/nls'; -import { resolveNLSConfiguration } from 'vs/base/node/nls'; -import { Promises } from 'vs/base/node/pfs'; -import product from 'vs/platform/product/common/product'; +import { FileAccess } from '../../base/common/network.js'; +import { join } from '../../base/common/path.js'; +import type { INLSConfiguration } from '../../nls.js'; +import { resolveNLSConfiguration } from '../../base/node/nls.js'; +import { Promises } from '../../base/node/pfs.js'; +import product from '../../platform/product/common/product.js'; const nlsMetadataPath = join(FileAccess.asFileUri('').fsPath); const defaultMessagesFile = join(nlsMetadataPath, 'nls.messages.json'); diff --git a/src/vs/server/node/remoteTerminalChannel.ts b/src/vs/server/node/remoteTerminalChannel.ts index 657d3e823..399c8d8f8 100644 --- a/src/vs/server/node/remoteTerminalChannel.ts +++ b/src/vs/server/node/remoteTerminalChannel.ts @@ -4,35 +4,35 @@ *--------------------------------------------------------------------------------------------*/ import * as os from 'os'; -import { Emitter, Event } from 'vs/base/common/event'; -import { cloneAndChange } from 'vs/base/common/objects'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as path from 'vs/base/common/path'; -import * as platform from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { createRandomIPCHandle } from 'vs/base/parts/ipc/node/ipc.net'; -import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; -import { IPtyHostService, IShellLaunchConfig, ITerminalProfile } from 'vs/platform/terminal/common/terminal'; -import { IGetTerminalLayoutInfoArgs, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess'; -import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { createURITransformer } from 'vs/workbench/api/node/uriTransformer'; -import { CLIServerBase, ICommandsExecuter } from 'vs/workbench/api/node/extHostCLIServer'; -import { IEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable'; -import { MergedEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariableCollection'; -import { deserializeEnvironmentDescriptionMap, deserializeEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariableShared'; -import { ICreateTerminalProcessArguments, ICreateTerminalProcessResult, IWorkspaceFolderData, RemoteTerminalChannelEvent, RemoteTerminalChannelRequest } from 'vs/workbench/contrib/terminal/common/remote/terminal'; -import * as terminalEnvironment from 'vs/workbench/contrib/terminal/common/terminalEnvironment'; -import { AbstractVariableResolverService } from 'vs/workbench/services/configurationResolver/common/variableResolver'; -import { buildUserEnvironment } from 'vs/server/node/extensionHostConnection'; -import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { promiseWithResolvers } from 'vs/base/common/async'; -import { shouldUseEnvironmentVariableCollection } from 'vs/platform/terminal/common/terminalEnvironment'; +import { Emitter, Event } from '../../base/common/event.js'; +import { cloneAndChange } from '../../base/common/objects.js'; +import { Disposable } from '../../base/common/lifecycle.js'; +import * as path from '../../base/common/path.js'; +import * as platform from '../../base/common/platform.js'; +import { URI } from '../../base/common/uri.js'; +import { IURITransformer } from '../../base/common/uriIpc.js'; +import { IServerChannel } from '../../base/parts/ipc/common/ipc.js'; +import { createRandomIPCHandle } from '../../base/parts/ipc/node/ipc.net.js'; +import { RemoteAgentConnectionContext } from '../../platform/remote/common/remoteAgentEnvironment.js'; +import { IPtyHostService, IShellLaunchConfig, ITerminalProfile } from '../../platform/terminal/common/terminal.js'; +import { IGetTerminalLayoutInfoArgs, ISetTerminalLayoutInfoArgs } from '../../platform/terminal/common/terminalProcess.js'; +import { IWorkspaceFolder } from '../../platform/workspace/common/workspace.js'; +import { createURITransformer } from '../../workbench/api/node/uriTransformer.js'; +import { CLIServerBase, ICommandsExecuter } from '../../workbench/api/node/extHostCLIServer.js'; +import { IEnvironmentVariableCollection } from '../../platform/terminal/common/environmentVariable.js'; +import { MergedEnvironmentVariableCollection } from '../../platform/terminal/common/environmentVariableCollection.js'; +import { deserializeEnvironmentDescriptionMap, deserializeEnvironmentVariableCollection } from '../../platform/terminal/common/environmentVariableShared.js'; +import { ICreateTerminalProcessArguments, ICreateTerminalProcessResult, IWorkspaceFolderData, RemoteTerminalChannelEvent, RemoteTerminalChannelRequest } from '../../workbench/contrib/terminal/common/remote/terminal.js'; +import * as terminalEnvironment from '../../workbench/contrib/terminal/common/terminalEnvironment.js'; +import { AbstractVariableResolverService } from '../../workbench/services/configurationResolver/common/variableResolver.js'; +import { buildUserEnvironment } from './extensionHostConnection.js'; +import { IServerEnvironmentService } from './serverEnvironmentService.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { IExtensionManagementService } from '../../platform/extensionManagement/common/extensionManagement.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { promiseWithResolvers } from '../../base/common/async.js'; +import { shouldUseEnvironmentVariableCollection } from '../../platform/terminal/common/terminalEnvironment.js'; class CustomVariableResolver extends AbstractVariableResolverService { constructor( diff --git a/src/vs/server/node/server.cli.ts b/src/vs/server/node/server.cli.ts index fc0f7c259..9314c9d94 100644 --- a/src/vs/server/node/server.cli.ts +++ b/src/vs/server/node/server.cli.ts @@ -7,14 +7,14 @@ import * as fs from 'fs'; import * as url from 'url'; import * as cp from 'child_process'; import * as http from 'http'; -import { cwd } from 'vs/base/common/process'; -import { dirname, extname, resolve, join } from 'vs/base/common/path'; -import { parseArgs, buildHelpMessage, buildVersionMessage, OPTIONS, OptionDescriptions, ErrorReporter } from 'vs/platform/environment/node/argv'; -import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; -import { createWaitMarkerFileSync } from 'vs/platform/environment/node/wait'; -import { PipeCommand } from 'vs/workbench/api/node/extHostCLIServer'; -import { hasStdinWithoutTty, getStdinFilePath, readFromStdin } from 'vs/platform/environment/node/stdin'; -import { DeferredPromise } from 'vs/base/common/async'; +import { cwd } from '../../base/common/process.js'; +import { dirname, extname, resolve, join } from '../../base/common/path.js'; +import { parseArgs, buildHelpMessage, buildVersionMessage, OPTIONS, OptionDescriptions, ErrorReporter } from '../../platform/environment/node/argv.js'; +import { NativeParsedArgs } from '../../platform/environment/common/argv.js'; +import { createWaitMarkerFileSync } from '../../platform/environment/node/wait.js'; +import { PipeCommand } from '../../workbench/api/node/extHostCLIServer.js'; +import { hasStdinWithoutTty, getStdinFilePath, readFromStdin } from '../../platform/environment/node/stdin.js'; +import { DeferredPromise } from '../../base/common/async.js'; /* * Implements a standalone CLI app that opens VS Code from a remote terminal. @@ -393,7 +393,7 @@ function openInBrowser(args: string[], verbose: boolean) { } } -function sendToPipe(args: PipeCommand, verbose: boolean): Promise { +function sendToPipe(args: PipeCommand, verbose: boolean): Promise { if (verbose) { console.log(JSON.stringify(args, null, ' ')); } diff --git a/src/vs/server/node/server.main.ts b/src/vs/server/node/server.main.ts index 469671e57..f53f9eefc 100644 --- a/src/vs/server/node/server.main.ts +++ b/src/vs/server/node/server.main.ts @@ -6,15 +6,15 @@ import * as os from 'os'; import * as fs from 'fs'; import * as net from 'net'; -import { FileAccess } from 'vs/base/common/network'; -import { run as runCli } from 'vs/server/node/remoteExtensionHostAgentCli'; -import { createServer as doCreateServer, IServerAPI } from 'vs/server/node/remoteExtensionHostAgentServer'; -import { parseArgs, ErrorReporter } from 'vs/platform/environment/node/argv'; -import { join, dirname } from 'vs/base/common/path'; +import { FileAccess } from '../../base/common/network.js'; +import { run as runCli } from './remoteExtensionHostAgentCli.js'; +import { createServer as doCreateServer, IServerAPI } from './remoteExtensionHostAgentServer.js'; +import { parseArgs, ErrorReporter } from '../../platform/environment/node/argv.js'; +import { join, dirname } from '../../base/common/path.js'; import { performance } from 'perf_hooks'; -import { serverOptions } from 'vs/server/node/serverEnvironmentService'; -import product from 'vs/platform/product/common/product'; -import * as perf from 'vs/base/common/performance'; +import { serverOptions } from './serverEnvironmentService.js'; +import product from '../../platform/product/common/product.js'; +import * as perf from '../../base/common/performance.js'; perf.mark('code/server/codeLoaded'); (global).vscodeServerCodeLoadedTime = performance.now(); diff --git a/src/vs/server/node/serverConnectionToken.ts b/src/vs/server/node/serverConnectionToken.ts index 6a6bdcdb5..b20367880 100644 --- a/src/vs/server/node/serverConnectionToken.ts +++ b/src/vs/server/node/serverConnectionToken.ts @@ -7,11 +7,11 @@ import * as cookie from 'cookie'; import * as fs from 'fs'; import * as http from 'http'; import * as url from 'url'; -import * as path from 'vs/base/common/path'; -import { generateUuid } from 'vs/base/common/uuid'; -import { connectionTokenCookieName, connectionTokenQueryName } from 'vs/base/common/network'; -import { ServerParsedArgs } from 'vs/server/node/serverEnvironmentService'; -import { Promises } from 'vs/base/node/pfs'; +import * as path from '../../base/common/path.js'; +import { generateUuid } from '../../base/common/uuid.js'; +import { connectionTokenCookieName, connectionTokenQueryName } from '../../base/common/network.js'; +import { ServerParsedArgs } from './serverEnvironmentService.js'; +import { Promises } from '../../base/node/pfs.js'; const connectionTokenRegex = /^[0-9A-Za-z_-]+$/; diff --git a/src/vs/server/node/serverEnvironmentService.ts b/src/vs/server/node/serverEnvironmentService.ts index fce1842f1..2770df603 100644 --- a/src/vs/server/node/serverEnvironmentService.ts +++ b/src/vs/server/node/serverEnvironmentService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; - -import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { OPTIONS, OptionDescriptions } from 'vs/platform/environment/node/argv'; -import { refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { memoize } from 'vs/base/common/decorators'; -import { URI } from 'vs/base/common/uri'; +import * as nls from '../../nls.js'; + +import { NativeEnvironmentService } from '../../platform/environment/node/environmentService.js'; +import { OPTIONS, OptionDescriptions } from '../../platform/environment/node/argv.js'; +import { refineServiceDecorator } from '../../platform/instantiation/common/instantiation.js'; +import { IEnvironmentService, INativeEnvironmentService } from '../../platform/environment/common/environment.js'; +import { memoize } from '../../base/common/decorators.js'; +import { URI } from '../../base/common/uri.js'; export const serverOptions: OptionDescriptions> = { diff --git a/src/vs/server/node/serverServices.ts b/src/vs/server/node/serverServices.ts index f9ca0e7c3..cd1091150 100644 --- a/src/vs/server/node/serverServices.ts +++ b/src/vs/server/node/serverServices.ts @@ -4,80 +4,80 @@ *--------------------------------------------------------------------------------------------*/ import { hostname, release } from 'os'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import * as path from 'vs/base/common/path'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { getMachineId, getSqmMachineId, getdevDeviceId } from 'vs/base/node/id'; -import { Promises } from 'vs/base/node/pfs'; -import { ClientConnectionEvent, IMessagePassingProtocol, IPCServer, StaticRouter } from 'vs/base/parts/ipc/common/ipc'; -import { ProtocolConstants } from 'vs/base/parts/ipc/common/ipc.net'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; -import { ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { DownloadServiceChannelClient } from 'vs/platform/download/common/downloadIpc'; -import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ExtensionGalleryServiceWithNoStorageService } from 'vs/platform/extensionManagement/common/extensionGalleryService'; -import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; -import { ExtensionManagementCLI } from 'vs/platform/extensionManagement/common/extensionManagementCLI'; -import { ExtensionManagementChannel } from 'vs/platform/extensionManagement/common/extensionManagementIpc'; -import { ExtensionManagementService, INativeServerExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; -import { NativeLanguagePackService } from 'vs/platform/languagePacks/node/languagePacks'; -import { AbstractLogger, DEFAULT_LOG_LEVEL, getLogLevel, ILoggerService, ILogService, log, LogLevel, LogLevelToString } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { RequestChannel } from 'vs/platform/request/common/requestIpc'; -import { RequestService } from 'vs/platform/request/node/requestService'; -import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties'; -import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService'; -import { getPiiPathsFromEnvironment, isInternalTelemetry, isLoggingOnly, ITelemetryAppender, NullAppender, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; -import ErrorTelemetry from 'vs/platform/telemetry/node/errorTelemetry'; -import { IPtyService, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { RemoteAgentEnvironmentChannel } from 'vs/server/node/remoteAgentEnvironmentImpl'; -import { RemoteAgentFileSystemProviderChannel } from 'vs/server/node/remoteFileSystemProviderServer'; -import { ServerTelemetryChannel } from 'vs/platform/telemetry/common/remoteTelemetryChannel'; -import { IServerTelemetryService, ServerNullTelemetryService, ServerTelemetryService } from 'vs/platform/telemetry/common/serverTelemetryService'; -import { RemoteTerminalChannel } from 'vs/server/node/remoteTerminalChannel'; -import { createURITransformer } from 'vs/workbench/api/node/uriTransformer'; -import { ServerConnectionToken } from 'vs/server/node/serverConnectionToken'; -import { ServerEnvironmentService, ServerParsedArgs } from 'vs/server/node/serverEnvironmentService'; -import { REMOTE_TERMINAL_CHANNEL_NAME } from 'vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel'; -import { REMOTE_FILE_SYSTEM_CHANNEL_NAME } from 'vs/workbench/services/remote/common/remoteFileSystemProviderClient'; -import { ExtensionHostStatusService, IExtensionHostStatusService } from 'vs/server/node/extensionHostStatusService'; -import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; -import { ExtensionsScannerService } from 'vs/server/node/extensionsScannerService'; -import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { NullPolicyService } from 'vs/platform/policy/common/policy'; -import { OneDataSystemAppender } from 'vs/platform/telemetry/node/1dsAppender'; -import { LoggerService } from 'vs/platform/log/node/loggerService'; -import { ServerUserDataProfilesService } from 'vs/platform/userDataProfile/node/userDataProfile'; -import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { LogService } from 'vs/platform/log/common/logService'; -import { LoggerChannel } from 'vs/platform/log/common/logIpc'; -import { localize } from 'vs/nls'; -import { RemoteExtensionsScannerChannel, RemoteExtensionsScannerService } from 'vs/server/node/remoteExtensionsScanner'; -import { RemoteExtensionsScannerChannelName } from 'vs/platform/remote/common/remoteExtensionsScanner'; -import { RemoteUserDataProfilesServiceChannel } from 'vs/platform/userDataProfile/common/userDataProfileIpc'; -import { NodePtyHostStarter } from 'vs/platform/terminal/node/nodePtyHostStarter'; -import { CSSDevelopmentService, ICSSDevelopmentService } from 'vs/platform/cssDev/node/cssDevService'; +import { Emitter, Event } from '../../base/common/event.js'; +import { DisposableStore, toDisposable } from '../../base/common/lifecycle.js'; +import { Schemas } from '../../base/common/network.js'; +import * as path from '../../base/common/path.js'; +import { IURITransformer } from '../../base/common/uriIpc.js'; +import { getMachineId, getSqmMachineId, getdevDeviceId } from '../../base/node/id.js'; +import { Promises } from '../../base/node/pfs.js'; +import { ClientConnectionEvent, IMessagePassingProtocol, IPCServer, StaticRouter } from '../../base/parts/ipc/common/ipc.js'; +import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; +import { ExtensionHostDebugBroadcastChannel } from '../../platform/debug/common/extensionHostDebugIpc.js'; +import { IDownloadService } from '../../platform/download/common/download.js'; +import { DownloadServiceChannelClient } from '../../platform/download/common/downloadIpc.js'; +import { IEnvironmentService, INativeEnvironmentService } from '../../platform/environment/common/environment.js'; +import { ExtensionGalleryServiceWithNoStorageService } from '../../platform/extensionManagement/common/extensionGalleryService.js'; +import { IExtensionGalleryService } from '../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from '../../platform/extensionManagement/node/extensionSignatureVerificationService.js'; +import { ExtensionManagementCLI } from '../../platform/extensionManagement/common/extensionManagementCLI.js'; +import { ExtensionManagementChannel } from '../../platform/extensionManagement/common/extensionManagementIpc.js'; +import { ExtensionManagementService, INativeServerExtensionManagementService } from '../../platform/extensionManagement/node/extensionManagementService.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { FileService } from '../../platform/files/common/fileService.js'; +import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystemProvider.js'; +import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { InstantiationService } from '../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js'; +import { ILanguagePackService } from '../../platform/languagePacks/common/languagePacks.js'; +import { NativeLanguagePackService } from '../../platform/languagePacks/node/languagePacks.js'; +import { AbstractLogger, DEFAULT_LOG_LEVEL, getLogLevel, ILoggerService, ILogService, log, LogLevel, LogLevelToString } from '../../platform/log/common/log.js'; +import product from '../../platform/product/common/product.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { RemoteAgentConnectionContext } from '../../platform/remote/common/remoteAgentEnvironment.js'; +import { IRequestService } from '../../platform/request/common/request.js'; +import { RequestChannel } from '../../platform/request/common/requestIpc.js'; +import { RequestService } from '../../platform/request/node/requestService.js'; +import { resolveCommonProperties } from '../../platform/telemetry/common/commonProperties.js'; +import { ITelemetryService, TelemetryLevel } from '../../platform/telemetry/common/telemetry.js'; +import { ITelemetryServiceConfig } from '../../platform/telemetry/common/telemetryService.js'; +import { getPiiPathsFromEnvironment, isInternalTelemetry, isLoggingOnly, ITelemetryAppender, NullAppender, supportsTelemetry } from '../../platform/telemetry/common/telemetryUtils.js'; +import ErrorTelemetry from '../../platform/telemetry/node/errorTelemetry.js'; +import { IPtyService, TerminalSettingId } from '../../platform/terminal/common/terminal.js'; +import { PtyHostService } from '../../platform/terminal/node/ptyHostService.js'; +import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../platform/uriIdentity/common/uriIdentityService.js'; +import { RemoteAgentEnvironmentChannel } from './remoteAgentEnvironmentImpl.js'; +import { RemoteAgentFileSystemProviderChannel } from './remoteFileSystemProviderServer.js'; +import { ServerTelemetryChannel } from '../../platform/telemetry/common/remoteTelemetryChannel.js'; +import { IServerTelemetryService, ServerNullTelemetryService, ServerTelemetryService } from '../../platform/telemetry/common/serverTelemetryService.js'; +import { RemoteTerminalChannel } from './remoteTerminalChannel.js'; +import { createURITransformer } from '../../workbench/api/node/uriTransformer.js'; +import { ServerConnectionToken } from './serverConnectionToken.js'; +import { ServerEnvironmentService, ServerParsedArgs } from './serverEnvironmentService.js'; +import { REMOTE_TERMINAL_CHANNEL_NAME } from '../../workbench/contrib/terminal/common/remote/remoteTerminalChannel.js'; +import { REMOTE_FILE_SYSTEM_CHANNEL_NAME } from '../../workbench/services/remote/common/remoteFileSystemProviderClient.js'; +import { ExtensionHostStatusService, IExtensionHostStatusService } from './extensionHostStatusService.js'; +import { IExtensionsScannerService } from '../../platform/extensionManagement/common/extensionsScannerService.js'; +import { ExtensionsScannerService } from './extensionsScannerService.js'; +import { IExtensionsProfileScannerService } from '../../platform/extensionManagement/common/extensionsProfileScannerService.js'; +import { IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js'; +import { NullPolicyService } from '../../platform/policy/common/policy.js'; +import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; +import { LoggerService } from '../../platform/log/node/loggerService.js'; +import { ServerUserDataProfilesService } from '../../platform/userDataProfile/node/userDataProfile.js'; +import { ExtensionsProfileScannerService } from '../../platform/extensionManagement/node/extensionsProfileScannerService.js'; +import { LogService } from '../../platform/log/common/logService.js'; +import { LoggerChannel } from '../../platform/log/common/logIpc.js'; +import { localize } from '../../nls.js'; +import { RemoteExtensionsScannerChannel, RemoteExtensionsScannerService } from './remoteExtensionsScanner.js'; +import { RemoteExtensionsScannerChannelName } from '../../platform/remote/common/remoteExtensionsScanner.js'; +import { RemoteUserDataProfilesServiceChannel } from '../../platform/userDataProfile/common/userDataProfileIpc.js'; +import { NodePtyHostStarter } from '../../platform/terminal/node/nodePtyHostStarter.js'; +import { CSSDevelopmentService, ICSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js'; const eventPrefix = 'monacoworkbench'; @@ -148,7 +148,7 @@ export async function setupServerServices(connectionToken: ServerConnectionToken services.set(IExtensionHostStatusService, extensionHostStatusService); // Request - const requestService = new RequestService(configurationService, environmentService, logService, loggerService); + const requestService = new RequestService(configurationService, environmentService, logService); services.set(IRequestService, requestService); let oneDsAppender: ITelemetryAppender = NullAppender; @@ -221,7 +221,7 @@ export async function setupServerServices(connectionToken: ServerConnectionToken const remoteExtensionsScanner = new RemoteExtensionsScannerService(instantiationService.createInstance(ExtensionManagementCLI, logService), environmentService, userDataProfilesService, extensionsScannerService, logService, extensionGalleryService, languagePackService); socketServer.registerChannel(RemoteExtensionsScannerChannelName, new RemoteExtensionsScannerChannel(remoteExtensionsScanner, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority))); - const remoteFileSystemChannel = disposables.add(new RemoteAgentFileSystemProviderChannel(logService, environmentService)); + const remoteFileSystemChannel = disposables.add(new RemoteAgentFileSystemProviderChannel(logService, environmentService, configurationService)); socketServer.registerChannel(REMOTE_FILE_SYSTEM_CHANNEL_NAME, remoteFileSystemChannel); socketServer.registerChannel('request', new RequestChannel(accessor.get(IRequestService))); diff --git a/src/vs/server/node/webClientServer.ts b/src/vs/server/node/webClientServer.ts index f66972fe3..6ef3eac5f 100644 --- a/src/vs/server/node/webClientServer.ts +++ b/src/vs/server/node/webClientServer.ts @@ -9,27 +9,27 @@ import * as http from 'http'; import * as url from 'url'; import * as cookie from 'cookie'; import * as crypto from 'crypto'; -import { isEqualOrParent } from 'vs/base/common/extpath'; -import { getMediaMime } from 'vs/base/common/mime'; -import { isLinux } from 'vs/base/common/platform'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService'; -import { extname, dirname, join, normalize } from 'vs/base/common/path'; -import { FileAccess, connectionTokenCookieName, connectionTokenQueryName, Schemas, builtinExtensionsPath } from 'vs/base/common/network'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ServerConnectionToken, ServerConnectionTokenType } from 'vs/server/node/serverConnectionToken'; -import { asTextOrError, IRequestService } from 'vs/platform/request/common/request'; -import { IHeaders } from 'vs/base/parts/request/common/request'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { streamToBuffer } from 'vs/base/common/buffer'; -import { IProductConfiguration } from 'vs/base/common/product'; -import { isString } from 'vs/base/common/types'; -import { CharCode } from 'vs/base/common/charCode'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { isESM } from 'vs/base/common/amd'; -import { ICSSDevelopmentService } from 'vs/platform/cssDev/node/cssDevService'; +import { isEqualOrParent } from '../../base/common/extpath.js'; +import { getMediaMime } from '../../base/common/mime.js'; +import { isLinux } from '../../base/common/platform.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { IServerEnvironmentService } from './serverEnvironmentService.js'; +import { extname, dirname, join, normalize } from '../../base/common/path.js'; +import { FileAccess, connectionTokenCookieName, connectionTokenQueryName, Schemas, builtinExtensionsPath } from '../../base/common/network.js'; +import { generateUuid } from '../../base/common/uuid.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { ServerConnectionToken, ServerConnectionTokenType } from './serverConnectionToken.js'; +import { asTextOrError, IRequestService } from '../../platform/request/common/request.js'; +import { IHeaders } from '../../base/parts/request/common/request.js'; +import { CancellationToken } from '../../base/common/cancellation.js'; +import { URI } from '../../base/common/uri.js'; +import { streamToBuffer } from '../../base/common/buffer.js'; +import { IProductConfiguration } from '../../base/common/product.js'; +import { isString } from '../../base/common/types.js'; +import { CharCode } from '../../base/common/charCode.js'; +import { IExtensionManifest } from '../../platform/extensions/common/extensions.js'; +import { isESM } from '../../base/common/amd.js'; +import { ICSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js'; const textMimeType: { [ext: string]: string | undefined } = { '.html': 'text/html', diff --git a/src/vs/server/test/node/serverConnectionToken.test.ts b/src/vs/server/test/node/serverConnectionToken.test.ts index b04dab4d3..677560650 100644 --- a/src/vs/server/test/node/serverConnectionToken.test.ts +++ b/src/vs/server/test/node/serverConnectionToken.test.ts @@ -7,10 +7,10 @@ import assert from 'assert'; import * as fs from 'fs'; import * as os from 'os'; import * as path from 'path'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { parseServerConnectionToken, ServerConnectionToken, ServerConnectionTokenParseError, ServerConnectionTokenType } from 'vs/server/node/serverConnectionToken'; -import { ServerParsedArgs } from 'vs/server/node/serverEnvironmentService'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../base/test/common/utils.js'; +import { getRandomTestPath } from '../../../base/test/node/testUtils.js'; +import { parseServerConnectionToken, ServerConnectionToken, ServerConnectionTokenParseError, ServerConnectionTokenType } from '../../node/serverConnectionToken.js'; +import { ServerParsedArgs } from '../../node/serverEnvironmentService.js'; suite('parseServerConnectionToken', () => { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/workbench/api/browser/extensionHost.contribution.ts b/src/vs/workbench/api/browser/extensionHost.contribution.ts index 1d563ea1d..2764905f8 100644 --- a/src/vs/workbench/api/browser/extensionHost.contribution.ts +++ b/src/vs/workbench/api/browser/extensionHost.contribution.ts @@ -3,91 +3,92 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from '../../common/contributions.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; // --- other interested parties -import { JSONValidationExtensionPoint } from 'vs/workbench/api/common/jsonValidationExtensionPoint'; -import { ColorExtensionPoint } from 'vs/workbench/services/themes/common/colorExtensionPoint'; -import { IconExtensionPoint } from 'vs/workbench/services/themes/common/iconExtensionPoint'; -import { TokenClassificationExtensionPoints } from 'vs/workbench/services/themes/common/tokenClassificationExtensionPoint'; -import { LanguageConfigurationFileHandler } from 'vs/workbench/contrib/codeEditor/common/languageConfigurationExtensionPoint'; -import { StatusBarItemsExtensionPoint } from 'vs/workbench/api/browser/statusBarExtensionPoint'; +import { JSONValidationExtensionPoint } from '../common/jsonValidationExtensionPoint.js'; +import { ColorExtensionPoint } from '../../services/themes/common/colorExtensionPoint.js'; +import { IconExtensionPoint } from '../../services/themes/common/iconExtensionPoint.js'; +import { TokenClassificationExtensionPoints } from '../../services/themes/common/tokenClassificationExtensionPoint.js'; +import { LanguageConfigurationFileHandler } from '../../contrib/codeEditor/common/languageConfigurationExtensionPoint.js'; +import { StatusBarItemsExtensionPoint } from './statusBarExtensionPoint.js'; // --- mainThread participants -import './mainThreadLocalization'; -import './mainThreadBulkEdits'; -import './mainThreadLanguageModels'; -import './mainThreadChatAgents2'; -import './mainThreadChatVariables'; -import './mainThreadLanguageModelTools'; -import './mainThreadEmbeddings'; -import './mainThreadCodeInsets'; -import './mainThreadCLICommands'; -import './mainThreadClipboard'; -import './mainThreadCommands'; -import './mainThreadConfiguration'; -import './mainThreadConsole'; -import './mainThreadDebugService'; -import './mainThreadDecorations'; -import './mainThreadDiagnostics'; -import './mainThreadDialogs'; -import './mainThreadDocumentContentProviders'; -import './mainThreadDocuments'; -import './mainThreadDocumentsAndEditors'; -import './mainThreadEditor'; -import './mainThreadEditors'; -import './mainThreadEditorTabs'; -import './mainThreadErrors'; -import './mainThreadExtensionService'; -import './mainThreadFileSystem'; -import './mainThreadFileSystemEventService'; -import './mainThreadLanguageFeatures'; -import './mainThreadLanguages'; -import './mainThreadLogService'; -import './mainThreadMessageService'; -import './mainThreadManagedSockets'; -import './mainThreadOutputService'; -import './mainThreadProgress'; -import './mainThreadQuickDiff'; -import './mainThreadQuickOpen'; -import './mainThreadRemoteConnectionData'; -import './mainThreadSaveParticipant'; -import './mainThreadSpeech'; -import './mainThreadEditSessionIdentityParticipant'; -import './mainThreadSCM'; -import './mainThreadSearch'; -import './mainThreadStatusBar'; -import './mainThreadStorage'; -import './mainThreadTelemetry'; -import './mainThreadTerminalService'; -import './mainThreadTerminalShellIntegration'; -import './mainThreadTheming'; -import './mainThreadTreeViews'; -import './mainThreadDownloadService'; -import './mainThreadUrls'; -import './mainThreadUriOpeners'; -import './mainThreadWindow'; -import './mainThreadWebviewManager'; -import './mainThreadWorkspace'; -import './mainThreadComments'; -import './mainThreadNotebook'; -import './mainThreadNotebookKernels'; -import './mainThreadNotebookDocumentsAndEditors'; -import './mainThreadNotebookRenderers'; -import './mainThreadNotebookSaveParticipant'; -import './mainThreadInteractive'; -import './mainThreadTask'; -import './mainThreadLabelService'; -import './mainThreadTunnelService'; -import './mainThreadAuthentication'; -import './mainThreadTimeline'; -import './mainThreadTesting'; -import './mainThreadSecretState'; -import './mainThreadShare'; -import './mainThreadProfileContentHandlers'; -import './mainThreadAiRelatedInformation'; -import './mainThreadAiEmbeddingVector'; +import './mainThreadLocalization.js'; +import './mainThreadBulkEdits.js'; +import './mainThreadLanguageModels.js'; +import './mainThreadChatAgents2.js'; +import './mainThreadChatVariables.js'; +import './mainThreadChatCodeMapper.js'; +import './mainThreadLanguageModelTools.js'; +import './mainThreadEmbeddings.js'; +import './mainThreadCodeInsets.js'; +import './mainThreadCLICommands.js'; +import './mainThreadClipboard.js'; +import './mainThreadCommands.js'; +import './mainThreadConfiguration.js'; +import './mainThreadConsole.js'; +import './mainThreadDebugService.js'; +import './mainThreadDecorations.js'; +import './mainThreadDiagnostics.js'; +import './mainThreadDialogs.js'; +import './mainThreadDocumentContentProviders.js'; +import './mainThreadDocuments.js'; +import './mainThreadDocumentsAndEditors.js'; +import './mainThreadEditor.js'; +import './mainThreadEditors.js'; +import './mainThreadEditorTabs.js'; +import './mainThreadErrors.js'; +import './mainThreadExtensionService.js'; +import './mainThreadFileSystem.js'; +import './mainThreadFileSystemEventService.js'; +import './mainThreadLanguageFeatures.js'; +import './mainThreadLanguages.js'; +import './mainThreadLogService.js'; +import './mainThreadMessageService.js'; +import './mainThreadManagedSockets.js'; +import './mainThreadOutputService.js'; +import './mainThreadProgress.js'; +import './mainThreadQuickDiff.js'; +import './mainThreadQuickOpen.js'; +import './mainThreadRemoteConnectionData.js'; +import './mainThreadSaveParticipant.js'; +import './mainThreadSpeech.js'; +import './mainThreadEditSessionIdentityParticipant.js'; +import './mainThreadSCM.js'; +import './mainThreadSearch.js'; +import './mainThreadStatusBar.js'; +import './mainThreadStorage.js'; +import './mainThreadTelemetry.js'; +import './mainThreadTerminalService.js'; +import './mainThreadTerminalShellIntegration.js'; +import './mainThreadTheming.js'; +import './mainThreadTreeViews.js'; +import './mainThreadDownloadService.js'; +import './mainThreadUrls.js'; +import './mainThreadUriOpeners.js'; +import './mainThreadWindow.js'; +import './mainThreadWebviewManager.js'; +import './mainThreadWorkspace.js'; +import './mainThreadComments.js'; +import './mainThreadNotebook.js'; +import './mainThreadNotebookKernels.js'; +import './mainThreadNotebookDocumentsAndEditors.js'; +import './mainThreadNotebookRenderers.js'; +import './mainThreadNotebookSaveParticipant.js'; +import './mainThreadInteractive.js'; +import './mainThreadTask.js'; +import './mainThreadLabelService.js'; +import './mainThreadTunnelService.js'; +import './mainThreadAuthentication.js'; +import './mainThreadTimeline.js'; +import './mainThreadTesting.js'; +import './mainThreadSecretState.js'; +import './mainThreadShare.js'; +import './mainThreadProfileContentHandlers.js'; +import './mainThreadAiRelatedInformation.js'; +import './mainThreadAiEmbeddingVector.js'; export class ExtensionPoints implements IWorkbenchContribution { diff --git a/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.ts b/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.ts index 954679e2c..68906b6ce 100644 --- a/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.ts +++ b/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { ExtHostAiEmbeddingVectorShape, ExtHostContext, MainContext, MainThreadAiEmbeddingVectorShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IAiEmbeddingVectorProvider, IAiEmbeddingVectorService } from 'vs/workbench/services/aiEmbeddingVector/common/aiEmbeddingVectorService'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { ExtHostAiEmbeddingVectorShape, ExtHostContext, MainContext, MainThreadAiEmbeddingVectorShape } from '../common/extHost.protocol.js'; +import { IAiEmbeddingVectorProvider, IAiEmbeddingVectorService } from '../../services/aiEmbeddingVector/common/aiEmbeddingVectorService.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadAiEmbeddingVector) export class MainThreadAiEmbeddingVector extends Disposable implements MainThreadAiEmbeddingVectorShape { diff --git a/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.ts b/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.ts index e254b5f41..722866e71 100644 --- a/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.ts +++ b/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { ExtHostAiRelatedInformationShape, ExtHostContext, MainContext, MainThreadAiRelatedInformationShape } from 'vs/workbench/api/common/extHost.protocol'; -import { RelatedInformationType } from 'vs/workbench/api/common/extHostTypes'; -import { IAiRelatedInformationProvider, IAiRelatedInformationService, RelatedInformationResult } from 'vs/workbench/services/aiRelatedInformation/common/aiRelatedInformation'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { ExtHostAiRelatedInformationShape, ExtHostContext, MainContext, MainThreadAiRelatedInformationShape } from '../common/extHost.protocol.js'; +import { RelatedInformationType } from '../common/extHostTypes.js'; +import { IAiRelatedInformationProvider, IAiRelatedInformationService, RelatedInformationResult } from '../../services/aiRelatedInformation/common/aiRelatedInformation.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadAiRelatedInformation) export class MainThreadAiRelatedInformation extends Disposable implements MainThreadAiRelatedInformationShape { diff --git a/src/vs/workbench/api/browser/mainThreadAuthentication.ts b/src/vs/workbench/api/browser/mainThreadAuthentication.ts index c1500981d..18d3c2ffc 100644 --- a/src/vs/workbench/api/browser/mainThreadAuthentication.ts +++ b/src/vs/workbench/api/browser/mainThreadAuthentication.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import * as nls from 'vs/nls'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IAuthenticationCreateSessionOptions, AuthenticationSession, AuthenticationSessionsChangeEvent, IAuthenticationProvider, IAuthenticationService, IAuthenticationExtensionsService, INTERNAL_AUTH_PROVIDER_PREFIX as INTERNAL_MODEL_AUTH_PROVIDER_PREFIX, AuthenticationSessionAccount, IAuthenticationProviderSessionOptions } from 'vs/workbench/services/authentication/common/authentication'; -import { ExtHostAuthenticationShape, ExtHostContext, MainContext, MainThreadAuthenticationShape } from '../common/extHost.protocol'; -import { IDialogService, IPromptButton } from 'vs/platform/dialogs/common/dialogs'; -import Severity from 'vs/base/common/severity'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { ActivationKind, IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IAuthenticationAccessService } from 'vs/workbench/services/authentication/browser/authenticationAccessService'; -import { IAuthenticationUsageService } from 'vs/workbench/services/authentication/browser/authenticationUsageService'; -import { getAuthenticationProviderActivationEvent } from 'vs/workbench/services/authentication/browser/authenticationService'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { CancellationError } from 'vs/base/common/errors'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import * as nls from '../../../nls.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IAuthenticationCreateSessionOptions, AuthenticationSession, AuthenticationSessionsChangeEvent, IAuthenticationProvider, IAuthenticationService, IAuthenticationExtensionsService, INTERNAL_AUTH_PROVIDER_PREFIX as INTERNAL_MODEL_AUTH_PROVIDER_PREFIX, AuthenticationSessionAccount, IAuthenticationProviderSessionOptions } from '../../services/authentication/common/authentication.js'; +import { ExtHostAuthenticationShape, ExtHostContext, MainContext, MainThreadAuthenticationShape } from '../common/extHost.protocol.js'; +import { IDialogService, IPromptButton } from '../../../platform/dialogs/common/dialogs.js'; +import Severity from '../../../base/common/severity.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { ActivationKind, IExtensionService } from '../../services/extensions/common/extensions.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IAuthenticationAccessService } from '../../services/authentication/browser/authenticationAccessService.js'; +import { IAuthenticationUsageService } from '../../services/authentication/browser/authenticationUsageService.js'; +import { getAuthenticationProviderActivationEvent } from '../../services/authentication/browser/authenticationService.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { CancellationError } from '../../../base/common/errors.js'; interface AuthenticationForceNewSessionOptions { detail?: string; @@ -89,6 +89,10 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu this._register(this.authenticationService.onDidChangeSessions(e => { this._proxy.$onDidChangeAuthenticationSessions(e.providerId, e.label); })); + this._register(this.authenticationExtensionsService.onDidChangeAccountPreference(e => { + const providerInfo = this.authenticationService.getProvider(e.providerId); + this._proxy.$onDidChangeAuthenticationSessions(providerInfo.id, providerInfo.label, e.extensionIds); + })); } async $registerAuthenticationProvider(id: string, label: string, supportsMultipleAccounts: boolean): Promise { @@ -203,21 +207,19 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu if (options.clearSessionPreference) { // Clearing the session preference is usually paired with createIfNone, so just remove the preference and // defer to the rest of the logic in this function to choose the session. - this.authenticationExtensionsService.removeSessionPreference(providerId, extensionId, scopes); + this._removeAccountPreference(extensionId, providerId, scopes); } + const matchingAccountPreferenceSession = this._getAccountPreference(extensionId, providerId, scopes, sessions); + // Check if the sessions we have are valid if (!options.forceNewSession && sessions.length) { - if (provider.supportsMultipleAccounts) { - // If we have an existing session preference, use that. If not, we'll return any valid session at the end of this function. - const existingSessionPreference = this.authenticationExtensionsService.getSessionPreference(providerId, extensionId, scopes); - if (existingSessionPreference) { - const matchingSession = sessions.find(session => session.id === existingSessionPreference); - if (matchingSession && this.authenticationAccessService.isAccessAllowed(providerId, matchingSession.account.label, extensionId)) { - return matchingSession; - } - } - } else if (this.authenticationAccessService.isAccessAllowed(providerId, sessions[0].account.label, extensionId)) { + // If we have an existing session preference, use that. If not, we'll return any valid session at the end of this function. + if (matchingAccountPreferenceSession && this.authenticationAccessService.isAccessAllowed(providerId, matchingAccountPreferenceSession.account.label, extensionId)) { + return matchingAccountPreferenceSession; + } + // If we only have one account for a single auth provider, lets just check if it's allowed and return it if it is. + if (!provider.supportsMultipleAccounts && this.authenticationAccessService.isAccessAllowed(providerId, sessions[0].account.label, extensionId)) { return sessions[0]; } } @@ -244,12 +246,7 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu ? await this.authenticationExtensionsService.selectSession(providerId, extensionId, extensionName, scopes, sessions) : sessions[0]; } else { - let accountToCreate: AuthenticationSessionAccount | undefined = options.account; - if (!accountToCreate) { - const sessionIdToRecreate = this.authenticationExtensionsService.getSessionPreference(providerId, extensionId, scopes); - accountToCreate = sessionIdToRecreate ? sessions.find(session => session.id === sessionIdToRecreate)?.account : undefined; - } - + const accountToCreate: AuthenticationSessionAccount | undefined = options.account ?? matchingAccountPreferenceSession?.account; do { session = await this.authenticationService.createSession(providerId, scopes, { activateImmediate: true, account: accountToCreate }); } while ( @@ -260,15 +257,16 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu } this.authenticationAccessService.updateAllowedExtensions(providerId, session.account.label, [{ id: extensionId, name: extensionName, allowed: true }]); - this.authenticationExtensionsService.updateSessionPreference(providerId, extensionId, session); + this._updateAccountPreference(extensionId, providerId, session); return session; } - // For the silent flows, if we have a session, even though it may not be the user's preference, we'll return it anyway because it might be for a specific - // set of scopes. - const validSession = sessions.find(session => this.authenticationAccessService.isAccessAllowed(providerId, session.account.label, extensionId)); - if (validSession) { - return validSession; + // For the silent flows, if we have a session but we don't have a session preference, we'll return the first one that is valid. + if (!matchingAccountPreferenceSession && !this.authenticationExtensionsService.getAccountPreference(extensionId, providerId)) { + const validSession = sessions.find(session => this.authenticationAccessService.isAccessAllowed(providerId, session.account.label, extensionId)); + if (validSession) { + return validSession; + } } // passive flows (silent or default) @@ -307,4 +305,41 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu }; this.telemetryService.publicLog2<{ extensionId: string; providerId: string }, AuthProviderUsageClassification>('authentication.providerUsage', { providerId, extensionId }); } + + //#region Account Preferences + // TODO@TylerLeonhardt: Update this after a few iterations to no longer fallback to the session preference + + private _getAccountPreference(extensionId: string, providerId: string, scopes: string[], sessions: ReadonlyArray): AuthenticationSession | undefined { + if (sessions.length === 0) { + return undefined; + } + const accountNamePreference = this.authenticationExtensionsService.getAccountPreference(extensionId, providerId); + if (accountNamePreference) { + const session = sessions.find(session => session.account.label === accountNamePreference); + return session; + } + + const sessionIdPreference = this.authenticationExtensionsService.getSessionPreference(providerId, extensionId, scopes); + if (sessionIdPreference) { + const session = sessions.find(session => session.id === sessionIdPreference); + if (session) { + // Migrate the session preference to the account preference + this.authenticationExtensionsService.updateAccountPreference(extensionId, providerId, session.account); + return session; + } + } + return undefined; + } + + private _updateAccountPreference(extensionId: string, providerId: string, session: AuthenticationSession): void { + this.authenticationExtensionsService.updateAccountPreference(extensionId, providerId, session.account); + this.authenticationExtensionsService.updateSessionPreference(providerId, extensionId, session); + } + + private _removeAccountPreference(extensionId: string, providerId: string, scopes: string[]): void { + this.authenticationExtensionsService.removeAccountPreference(extensionId, providerId); + this.authenticationExtensionsService.removeSessionPreference(providerId, extensionId, scopes); + } + + //#endregion } diff --git a/src/vs/workbench/api/browser/mainThreadBulkEdits.ts b/src/vs/workbench/api/browser/mainThreadBulkEdits.ts index dfd425729..a82377228 100644 --- a/src/vs/workbench/api/browser/mainThreadBulkEdits.ts +++ b/src/vs/workbench/api/browser/mainThreadBulkEdits.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer, decodeBase64 } from 'vs/base/common/buffer'; -import { revive } from 'vs/base/common/marshalling'; -import { IBulkEditService, ResourceFileEdit, ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; -import { WorkspaceEdit } from 'vs/editor/common/languages'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IWorkspaceCellEditDto, IWorkspaceEditDto, IWorkspaceFileEditDto, MainContext, MainThreadBulkEditsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ResourceNotebookCellEdit } from 'vs/workbench/contrib/bulkEdit/browser/bulkCellEdits'; -import { CellEditType } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { VSBuffer, decodeBase64 } from '../../../base/common/buffer.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { IBulkEditService, ResourceFileEdit, ResourceTextEdit } from '../../../editor/browser/services/bulkEditService.js'; +import { WorkspaceEdit } from '../../../editor/common/languages.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { IWorkspaceCellEditDto, IWorkspaceEditDto, IWorkspaceFileEditDto, MainContext, MainThreadBulkEditsShape } from '../common/extHost.protocol.js'; +import { ResourceNotebookCellEdit } from '../../contrib/bulkEdit/browser/bulkCellEdits.js'; +import { CellEditType } from '../../contrib/notebook/common/notebookCommon.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; @extHostNamedCustomer(MainContext.MainThreadBulkEdits) diff --git a/src/vs/workbench/api/browser/mainThreadCLICommands.ts b/src/vs/workbench/api/browser/mainThreadCLICommands.ts index 03a03f9c2..c8aed8587 100644 --- a/src/vs/workbench/api/browser/mainThreadCLICommands.ts +++ b/src/vs/workbench/api/browser/mainThreadCLICommands.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Schemas } from 'vs/base/common/network'; -import { isWeb } from 'vs/base/common/platform'; -import { isString } from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { IExtensionGalleryService, IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionManagementCLI } from 'vs/platform/extensionManagement/common/extensionManagementCLI'; -import { getExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { AbstractMessageLogger, ILogger, LogLevel } from 'vs/platform/log/common/log'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IOpenWindowOptions, IWindowOpenable } from 'vs/platform/window/common/window'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IExtensionManagementServerService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; -import { IExtensionManifestPropertiesService } from 'vs/workbench/services/extensions/common/extensionManifestPropertiesService'; +import { Schemas } from '../../../base/common/network.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { isString } from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js'; +import { IExtensionGalleryService, IExtensionManagementService } from '../../../platform/extensionManagement/common/extensionManagement.js'; +import { ExtensionManagementCLI } from '../../../platform/extensionManagement/common/extensionManagementCLI.js'; +import { getExtensionId } from '../../../platform/extensionManagement/common/extensionManagementUtil.js'; +import { IExtensionManifest } from '../../../platform/extensions/common/extensions.js'; +import { IInstantiationService, ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { ILabelService } from '../../../platform/label/common/label.js'; +import { AbstractMessageLogger, ILogger, LogLevel } from '../../../platform/log/common/log.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { IOpenWindowOptions, IWindowOpenable } from '../../../platform/window/common/window.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { IExtensionManagementServerService } from '../../services/extensionManagement/common/extensionManagement.js'; +import { IExtensionManifestPropertiesService } from '../../services/extensions/common/extensionManifestPropertiesService.js'; // this class contains the commands that the CLI server is reying on diff --git a/src/vs/workbench/api/browser/mainThreadChatAgents2.ts b/src/vs/workbench/api/browser/mainThreadChatAgents2.ts index ec9be12fe..a61d91c78 100644 --- a/src/vs/workbench/api/browser/mainThreadChatAgents2.ts +++ b/src/vs/workbench/api/browser/mainThreadChatAgents2.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DeferredPromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable, DisposableMap, IDisposable } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { getWordAtText } from 'vs/editor/common/core/wordHelper'; -import { CompletionContext, CompletionItem, CompletionItemKind, CompletionList } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostChatAgentsShape2, ExtHostContext, IChatParticipantMetadata, IChatProgressDto, IDynamicChatAgentProps, IExtensionChatAgentMetadata, MainContext, MainThreadChatAgentsShape2 } from 'vs/workbench/api/common/extHost.protocol'; -import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat'; -import { ChatInputPart } from 'vs/workbench/contrib/chat/browser/chatInputPart'; -import { AddDynamicVariableAction, IAddDynamicVariableContext } from 'vs/workbench/contrib/chat/browser/contrib/chatDynamicVariables'; -import { ChatAgentLocation, IChatAgentHistoryEntry, IChatAgentImplementation, IChatAgentRequest, IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { ChatRequestAgentPart } from 'vs/workbench/contrib/chat/common/chatParserTypes'; -import { ChatRequestParser } from 'vs/workbench/contrib/chat/common/chatRequestParser'; -import { IChatContentReference, IChatFollowup, IChatProgress, IChatService, IChatTask, IChatWarningMessage } from 'vs/workbench/contrib/chat/common/chatService'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; +import { DeferredPromise } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { Disposable, DisposableMap, IDisposable } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { escapeRegExpCharacters } from '../../../base/common/strings.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Position } from '../../../editor/common/core/position.js'; +import { Range } from '../../../editor/common/core/range.js'; +import { getWordAtText } from '../../../editor/common/core/wordHelper.js'; +import { CompletionContext, CompletionItem, CompletionItemKind, CompletionList } from '../../../editor/common/languages.js'; +import { ITextModel } from '../../../editor/common/model.js'; +import { ILanguageFeaturesService } from '../../../editor/common/services/languageFeatures.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostChatAgentsShape2, ExtHostContext, IChatParticipantMetadata, IChatProgressDto, IDynamicChatAgentProps, IExtensionChatAgentMetadata, MainContext, MainThreadChatAgentsShape2 } from '../common/extHost.protocol.js'; +import { IChatWidgetService } from '../../contrib/chat/browser/chat.js'; +import { ChatInputPart } from '../../contrib/chat/browser/chatInputPart.js'; +import { AddDynamicVariableAction, IAddDynamicVariableContext } from '../../contrib/chat/browser/contrib/chatDynamicVariables.js'; +import { ChatAgentLocation, IChatAgentHistoryEntry, IChatAgentImplementation, IChatAgentRequest, IChatAgentService } from '../../contrib/chat/common/chatAgents.js'; +import { ChatRequestAgentPart } from '../../contrib/chat/common/chatParserTypes.js'; +import { ChatRequestParser } from '../../contrib/chat/common/chatRequestParser.js'; +import { IChatContentReference, IChatFollowup, IChatProgress, IChatService, IChatTask, IChatWarningMessage } from '../../contrib/chat/common/chatService.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; interface AgentData { dispose: () => void; @@ -39,7 +39,7 @@ interface AgentData { hasFollowups?: boolean; } -class MainThreadChatTask implements IChatTask { +export class MainThreadChatTask implements IChatTask { public readonly kind = 'progressTask'; public readonly deferred = new DeferredPromise(); @@ -160,8 +160,8 @@ export class MainThreadChatAgents2 extends Disposable implements MainThreadChatA return this._proxy.$provideFollowups(request, handle, result, { history }, token); }, - provideWelcomeMessage: (location: ChatAgentLocation, token: CancellationToken) => { - return this._proxy.$provideWelcomeMessage(handle, location, token); + provideWelcomeMessage: (token: CancellationToken) => { + return this._proxy.$provideWelcomeMessage(handle, token); }, provideChatTitle: (history, token) => { return this._proxy.$provideChatTitle(handle, history, token); diff --git a/src/vs/workbench/api/browser/mainThreadChatCodeMapper.ts b/src/vs/workbench/api/browser/mainThreadChatCodeMapper.ts new file mode 100644 index 000000000..abacb824c --- /dev/null +++ b/src/vs/workbench/api/browser/mainThreadChatCodeMapper.ts @@ -0,0 +1,62 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableMap, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { ICodeMapperProvider, ICodeMapperRequest, ICodeMapperResponse, ICodeMapperService } from '../../contrib/chat/common/chatCodeMapperService.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostCodeMapperShape, ExtHostContext, ICodeMapperProgressDto, ICodeMapperRequestDto, MainContext, MainThreadCodeMapperShape } from '../common/extHost.protocol.js'; + +@extHostNamedCustomer(MainContext.MainThreadCodeMapper) +export class MainThreadChatCodemapper extends Disposable implements MainThreadCodeMapperShape { + + private providers = this._register(new DisposableMap()); + private readonly _proxy: ExtHostCodeMapperShape; + private static _requestHandlePool: number = 0; + private _responseMap = new Map(); + + constructor( + extHostContext: IExtHostContext, + @ICodeMapperService private readonly codeMapperService: ICodeMapperService + ) { + super(); + this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostCodeMapper); + } + + $registerCodeMapperProvider(handle: number): void { + const impl: ICodeMapperProvider = { + mapCode: async (uiRequest: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken) => { + const requestId = String(MainThreadChatCodemapper._requestHandlePool++); + this._responseMap.set(requestId, response); + const extHostRequest: ICodeMapperRequestDto = { + requestId, + codeBlocks: uiRequest.codeBlocks, + conversation: uiRequest.conversation + }; + try { + return await this._proxy.$mapCode(handle, extHostRequest, token).then((result) => result ?? undefined); + } finally { + this._responseMap.delete(requestId); + } + } + }; + + const disposable = this.codeMapperService.registerCodeMapperProvider(handle, impl); + this.providers.set(handle, disposable); + } + + $unregisterCodeMapperProvider(handle: number): void { + this.providers.deleteAndDispose(handle); + } + + $handleProgress(requestId: string, data: ICodeMapperProgressDto): Promise { + const response = this._responseMap.get(requestId); + if (response) { + const resource = URI.revive(data.uri); + response.textEdit(resource, data.edits); + } + return Promise.resolve(); + } +} diff --git a/src/vs/workbench/api/browser/mainThreadChatVariables.ts b/src/vs/workbench/api/browser/mainThreadChatVariables.ts index 9e08e5d14..9897a5e8f 100644 --- a/src/vs/workbench/api/browser/mainThreadChatVariables.ts +++ b/src/vs/workbench/api/browser/mainThreadChatVariables.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableMap } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { ExtHostChatVariablesShape, ExtHostContext, IChatVariableResolverProgressDto, MainContext, MainThreadChatVariablesShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IChatRequestVariableValue, IChatVariableData, IChatVariableResolverProgress, IChatVariablesService } from 'vs/workbench/contrib/chat/common/chatVariables'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { DisposableMap } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { ExtHostChatVariablesShape, ExtHostContext, IChatVariableResolverProgressDto, MainContext, MainThreadChatVariablesShape } from '../common/extHost.protocol.js'; +import { IChatRequestVariableValue, IChatVariableData, IChatVariableResolverProgress, IChatVariablesService } from '../../contrib/chat/common/chatVariables.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadChatVariables) export class MainThreadChatVariables implements MainThreadChatVariablesShape { diff --git a/src/vs/workbench/api/browser/mainThreadClipboard.ts b/src/vs/workbench/api/browser/mainThreadClipboard.ts index 11be3e647..911c72cc8 100644 --- a/src/vs/workbench/api/browser/mainThreadClipboard.ts +++ b/src/vs/workbench/api/browser/mainThreadClipboard.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { MainContext, MainThreadClipboardShape } from '../common/extHost.protocol'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { MainContext, MainThreadClipboardShape } from '../common/extHost.protocol.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; @extHostNamedCustomer(MainContext.MainThreadClipboard) export class MainThreadClipboard implements MainThreadClipboardShape { diff --git a/src/vs/workbench/api/browser/mainThreadCodeInsets.ts b/src/vs/workbench/api/browser/mainThreadCodeInsets.ts index 3fa0eef96..efc220d3c 100644 --- a/src/vs/workbench/api/browser/mainThreadCodeInsets.ts +++ b/src/vs/workbench/api/browser/mainThreadCodeInsets.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getWindow } from 'vs/base/browser/dom'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IActiveCodeEditor, IViewZone } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { reviveWebviewContentOptions } from 'vs/workbench/api/browser/mainThreadWebviews'; -import { ExtHostContext, ExtHostEditorInsetsShape, IWebviewContentOptions, MainContext, MainThreadEditorInsetsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IWebviewService, IWebviewElement } from 'vs/workbench/contrib/webview/browser/webview'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { getWindow } from '../../../base/browser/dom.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { isEqual } from '../../../base/common/resources.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IActiveCodeEditor, IViewZone } from '../../../editor/browser/editorBrowser.js'; +import { ICodeEditorService } from '../../../editor/browser/services/codeEditorService.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { reviveWebviewContentOptions } from './mainThreadWebviews.js'; +import { ExtHostContext, ExtHostEditorInsetsShape, IWebviewContentOptions, MainContext, MainThreadEditorInsetsShape } from '../common/extHost.protocol.js'; +import { IWebviewService, IWebviewElement } from '../../contrib/webview/browser/webview.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; // todo@jrieken move these things back into something like contrib/insets class EditorWebviewZone implements IViewZone { diff --git a/src/vs/workbench/api/browser/mainThreadCommands.ts b/src/vs/workbench/api/browser/mainThreadCommands.ts index 47e8acbbf..9e92c453f 100644 --- a/src/vs/workbench/api/browser/mainThreadCommands.ts +++ b/src/vs/workbench/api/browser/mainThreadCommands.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableMap, IDisposable } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { CommandsRegistry, ICommandMetadata, ICommandService } from 'vs/platform/commands/common/commands'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { Dto, SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { ExtHostCommandsShape, ExtHostContext, MainContext, MainThreadCommandsShape } from '../common/extHost.protocol'; -import { isString } from 'vs/base/common/types'; +import { DisposableMap, IDisposable } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { CommandsRegistry, ICommandMetadata, ICommandService } from '../../../platform/commands/common/commands.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { Dto, SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; +import { ExtHostCommandsShape, ExtHostContext, MainContext, MainThreadCommandsShape } from '../common/extHost.protocol.js'; +import { isString } from '../../../base/common/types.js'; @extHostNamedCustomer(MainContext.MainThreadCommands) diff --git a/src/vs/workbench/api/browser/mainThreadComments.ts b/src/vs/workbench/api/browser/mainThreadComments.ts index 1504c0d20..c68f3c251 100644 --- a/src/vs/workbench/api/browser/mainThreadComments.ts +++ b/src/vs/workbench/api/browser/mainThreadComments.ts @@ -3,33 +3,33 @@ * 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, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import * as languages from 'vs/editor/common/languages'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ICommentController, ICommentService } from 'vs/workbench/contrib/comments/browser/commentService'; -import { CommentsPanel } from 'vs/workbench/contrib/comments/browser/commentsView'; -import { CommentProviderFeatures, ExtHostCommentsShape, ExtHostContext, MainContext, MainThreadCommentsShape, CommentThreadChanges } from '../common/extHost.protocol'; -import { COMMENTS_VIEW_ID, COMMENTS_VIEW_STORAGE_ID, COMMENTS_VIEW_TITLE } from 'vs/workbench/contrib/comments/browser/commentsTreeViewer'; -import { ViewContainer, IViewContainersRegistry, Extensions as ViewExtensions, ViewContainerLocation, IViewsRegistry, IViewDescriptorService } from 'vs/workbench/common/views'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer'; -import { Codicon } from 'vs/base/common/codicons'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { localize } from 'vs/nls'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; -import { Schemas } from 'vs/base/common/network'; -import { IViewsService } from 'vs/workbench/services/views/common/viewsService'; -import { MarshalledCommentThread } from 'vs/workbench/common/comments'; -import { revealCommentThread } from 'vs/workbench/contrib/comments/browser/commentsController'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IRange, Range } from '../../../editor/common/core/range.js'; +import * as languages from '../../../editor/common/languages.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ICommentController, ICommentService } from '../../contrib/comments/browser/commentService.js'; +import { CommentsPanel } from '../../contrib/comments/browser/commentsView.js'; +import { CommentProviderFeatures, ExtHostCommentsShape, ExtHostContext, MainContext, MainThreadCommentsShape, CommentThreadChanges } from '../common/extHost.protocol.js'; +import { COMMENTS_VIEW_ID, COMMENTS_VIEW_STORAGE_ID, COMMENTS_VIEW_TITLE } from '../../contrib/comments/browser/commentsTreeViewer.js'; +import { ViewContainer, IViewContainersRegistry, Extensions as ViewExtensions, ViewContainerLocation, IViewsRegistry, IViewDescriptorService } from '../../common/views.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { ViewPaneContainer } from '../../browser/parts/views/viewPaneContainer.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { registerIcon } from '../../../platform/theme/common/iconRegistry.js'; +import { localize } from '../../../nls.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { ICellRange } from '../../contrib/notebook/common/notebookRange.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IViewsService } from '../../services/views/common/viewsService.js'; +import { MarshalledCommentThread } from '../../common/comments.js'; +import { revealCommentThread } from '../../contrib/comments/browser/commentsController.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; export class MainThreadCommentThread implements languages.CommentThread { private _input?: languages.CommentInput; @@ -85,7 +85,6 @@ export class MainThreadCommentThread implements languages.CommentThread { set range(range: T | undefined) { this._range = range; - this._onDidChangeRange.fire(this._range); } get range(): T | undefined { @@ -103,9 +102,6 @@ export class MainThreadCommentThread implements languages.CommentThread { return this._canReply; } - private readonly _onDidChangeRange = new Emitter(); - public onDidChangeRange = this._onDidChangeRange.event; - private _collapsibleState: languages.CommentThreadCollapsibleState | undefined; get collapsibleState() { return this._collapsibleState; @@ -222,7 +218,6 @@ export class MainThreadCommentThread implements languages.CommentThread { this._onDidChangeComments.dispose(); this._onDidChangeInput.dispose(); this._onDidChangeLabel.dispose(); - this._onDidChangeRange.dispose(); this._onDidChangeState.dispose(); } @@ -291,7 +286,13 @@ export class MainThreadCommentController implements ICommentController { private _features: CommentProviderFeatures ) { } + get activeComment() { + return this._activeComment; + } + + private _activeComment: { thread: languages.CommentThread; comment?: languages.Comment } | undefined; async setActiveCommentAndThread(commentInfo: { thread: languages.CommentThread; comment?: languages.Comment } | undefined) { + this._activeComment = commentInfo; return this._proxy.$setActiveComment(this._handle, commentInfo ? { commentThreadHandle: commentInfo.thread.commentThreadHandle, uniqueIdInThread: commentInfo.comment?.uniqueIdInThread } : undefined); } diff --git a/src/vs/workbench/api/browser/mainThreadConfiguration.ts b/src/vs/workbench/api/browser/mainThreadConfiguration.ts index deb82c813..86891475a 100644 --- a/src/vs/workbench/api/browser/mainThreadConfiguration.ts +++ b/src/vs/workbench/api/browser/mainThreadConfiguration.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope, getScopes } from 'vs/platform/configuration/common/configurationRegistry'; -import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { MainThreadConfigurationShape, MainContext, ExtHostContext, IConfigurationInitData } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ConfigurationTarget, IConfigurationService, IConfigurationOverrides } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { URI } from '../../../base/common/uri.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope, getScopes } from '../../../platform/configuration/common/configurationRegistry.js'; +import { IWorkspaceContextService, WorkbenchState } from '../../../platform/workspace/common/workspace.js'; +import { MainThreadConfigurationShape, MainContext, ExtHostContext, IConfigurationInitData } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ConfigurationTarget, IConfigurationService, IConfigurationOverrides } from '../../../platform/configuration/common/configuration.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; @extHostNamedCustomer(MainContext.MainThreadConfiguration) export class MainThreadConfiguration implements MainThreadConfigurationShape { diff --git a/src/vs/workbench/api/browser/mainThreadConsole.ts b/src/vs/workbench/api/browser/mainThreadConsole.ts index c942d6094..d81a9a787 100644 --- a/src/vs/workbench/api/browser/mainThreadConsole.ts +++ b/src/vs/workbench/api/browser/mainThreadConsole.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { MainContext, MainThreadConsoleShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IRemoteConsoleLog, log } from 'vs/base/common/console'; -import { logRemoteEntry, logRemoteEntryIfError } from 'vs/workbench/services/extensions/common/remoteConsoleUtil'; -import { parseExtensionDevOptions } from 'vs/workbench/services/extensions/common/extensionDevOptions'; -import { ILogService } from 'vs/platform/log/common/log'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { MainContext, MainThreadConsoleShape } from '../common/extHost.protocol.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { IRemoteConsoleLog, log } from '../../../base/common/console.js'; +import { logRemoteEntry, logRemoteEntryIfError } from '../../services/extensions/common/remoteConsoleUtil.js'; +import { parseExtensionDevOptions } from '../../services/extensions/common/extensionDevOptions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; @extHostNamedCustomer(MainContext.MainThreadConsole) export class MainThreadConsole implements MainThreadConsoleShape { diff --git a/src/vs/workbench/api/browser/mainThreadCustomEditors.ts b/src/vs/workbench/api/browser/mainThreadCustomEditors.ts index 3f992a4cf..4fb33a99f 100644 --- a/src/vs/workbench/api/browser/mainThreadCustomEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadCustomEditors.ts @@ -3,47 +3,47 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { multibyteAwareBtoa } from 'vs/base/browser/dom'; -import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { isCancellationError, onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableMap, DisposableStore, IReference } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { basename } from 'vs/base/common/path'; -import { isEqual, isEqualOrParent, toLocalResource } from 'vs/base/common/resources'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { localize } from 'vs/nls'; -import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { FileOperation, IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IUndoRedoService, UndoRedoElementType } from 'vs/platform/undoRedo/common/undoRedo'; -import { MainThreadWebviewPanels } from 'vs/workbench/api/browser/mainThreadWebviewPanels'; -import { MainThreadWebviews, reviveWebviewExtension } from 'vs/workbench/api/browser/mainThreadWebviews'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { IRevertOptions, ISaveOptions } from 'vs/workbench/common/editor'; -import { CustomEditorInput } from 'vs/workbench/contrib/customEditor/browser/customEditorInput'; -import { CustomDocumentBackupData } from 'vs/workbench/contrib/customEditor/browser/customEditorInputFactory'; -import { ICustomEditorModel, ICustomEditorService } from 'vs/workbench/contrib/customEditor/common/customEditor'; -import { CustomTextEditorModel } from 'vs/workbench/contrib/customEditor/common/customTextEditorModel'; -import { ExtensionKeyedWebviewOriginStore, WebviewExtensionDescription } from 'vs/workbench/contrib/webview/browser/webview'; -import { WebviewInput } from 'vs/workbench/contrib/webviewPanel/browser/webviewEditorInput'; -import { IWebviewWorkbenchService } from 'vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService'; -import { editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { ResourceWorkingCopy } from 'vs/workbench/services/workingCopy/common/resourceWorkingCopy'; -import { IWorkingCopy, IWorkingCopyBackup, IWorkingCopySaveEvent, NO_TYPE_ID, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy'; -import { IWorkingCopyFileService, WorkingCopyFileEvent } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; +import { multibyteAwareBtoa } from '../../../base/browser/dom.js'; +import { CancelablePromise, createCancelablePromise } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { isCancellationError, onUnexpectedError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableMap, DisposableStore, IReference } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { basename } from '../../../base/common/path.js'; +import { isEqual, isEqualOrParent, toLocalResource } from '../../../base/common/resources.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { localize } from '../../../nls.js'; +import { IFileDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { FileOperation, IFileService } from '../../../platform/files/common/files.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILabelService } from '../../../platform/label/common/label.js'; +import { IStorageService } from '../../../platform/storage/common/storage.js'; +import { IUndoRedoService, UndoRedoElementType } from '../../../platform/undoRedo/common/undoRedo.js'; +import { MainThreadWebviewPanels } from './mainThreadWebviewPanels.js'; +import { MainThreadWebviews, reviveWebviewExtension } from './mainThreadWebviews.js'; +import * as extHostProtocol from '../common/extHost.protocol.js'; +import { IRevertOptions, ISaveOptions } from '../../common/editor.js'; +import { CustomEditorInput } from '../../contrib/customEditor/browser/customEditorInput.js'; +import { CustomDocumentBackupData } from '../../contrib/customEditor/browser/customEditorInputFactory.js'; +import { ICustomEditorModel, ICustomEditorService } from '../../contrib/customEditor/common/customEditor.js'; +import { CustomTextEditorModel } from '../../contrib/customEditor/common/customTextEditorModel.js'; +import { ExtensionKeyedWebviewOriginStore, WebviewExtensionDescription } from '../../contrib/webview/browser/webview.js'; +import { WebviewInput } from '../../contrib/webviewPanel/browser/webviewEditorInput.js'; +import { IWebviewWorkbenchService } from '../../contrib/webviewPanel/browser/webviewWorkbenchService.js'; +import { editorGroupToColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { IEditorGroupsService } from '../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IPathService } from '../../services/path/common/pathService.js'; +import { ResourceWorkingCopy } from '../../services/workingCopy/common/resourceWorkingCopy.js'; +import { IWorkingCopy, IWorkingCopyBackup, IWorkingCopySaveEvent, NO_TYPE_ID, WorkingCopyCapabilities } from '../../services/workingCopy/common/workingCopy.js'; +import { IWorkingCopyFileService, WorkingCopyFileEvent } from '../../services/workingCopy/common/workingCopyFileService.js'; +import { IWorkingCopyService } from '../../services/workingCopy/common/workingCopyService.js'; const enum CustomEditorModelType { Custom, @@ -389,18 +389,7 @@ class MainThreadCustomEditorModel extends ResourceWorkingCopy implements ICustom this._register(workingCopyService.registerWorkingCopy(this)); this._register(extensionService.onWillStop(e => { - if (!this.isDirty()) { - return; - } - - e.veto((async () => { - const didSave = await this.save(); - if (!didSave) { - // Veto - return true; - } - return false; // Don't veto - })(), localize('vetoExtHostRestart', "Custom editor '{0}' could not be saved.", this.name)); + e.veto(true, localize('vetoExtHostRestart', "A custom editor for '{0}' is open.", this.name)); })); } diff --git a/src/vs/workbench/api/browser/mainThreadDebugService.ts b/src/vs/workbench/api/browser/mainThreadDebugService.ts index 36b5a4df0..cccdce7eb 100644 --- a/src/vs/workbench/api/browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/browser/mainThreadDebugService.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableMap, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { URI as uri, UriComponents } from 'vs/base/common/uri'; -import { IDebugService, IConfig, IDebugConfigurationProvider, IBreakpoint, IFunctionBreakpoint, IBreakpointData, IDebugAdapter, IDebugAdapterDescriptorFactory, IDebugSession, IDebugAdapterFactory, IDataBreakpoint, IDebugSessionOptions, IInstructionBreakpoint, DebugConfigurationProviderTriggerKind, IDebugVisualization, DataBreakpointSetType } from 'vs/workbench/contrib/debug/common/debug'; +import { DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { URI as uri, UriComponents } from '../../../base/common/uri.js'; +import { IDebugService, IConfig, IDebugConfigurationProvider, IBreakpoint, IFunctionBreakpoint, IBreakpointData, IDebugAdapter, IDebugAdapterDescriptorFactory, IDebugSession, IDebugAdapterFactory, IDataBreakpoint, IDebugSessionOptions, IInstructionBreakpoint, DebugConfigurationProviderTriggerKind, IDebugVisualization, DataBreakpointSetType } from '../../contrib/debug/common/debug.js'; import { ExtHostContext, ExtHostDebugServiceShape, MainThreadDebugServiceShape, DebugSessionUUID, MainContext, IBreakpointsDeltaDto, ISourceMultiBreakpointDto, ISourceBreakpointDto, IFunctionBreakpointDto, IDebugSessionDto, IDataBreakpointDto, IStartDebuggingOptions, IDebugConfiguration, IThreadFocusDto, IStackFrameFocusDto -} from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import severity from 'vs/base/common/severity'; -import { AbstractDebugAdapter } from 'vs/workbench/contrib/debug/common/abstractDebugAdapter'; -import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { convertToVSCPaths, convertToDAPaths, isSessionAttach } from 'vs/workbench/contrib/debug/common/debugUtils'; -import { ErrorNoTelemetry } from 'vs/base/common/errors'; -import { IDebugVisualizerService } from 'vs/workbench/contrib/debug/common/debugVisualizers'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { Event } from 'vs/base/common/event'; -import { isDefined } from 'vs/base/common/types'; +} from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import severity from '../../../base/common/severity.js'; +import { AbstractDebugAdapter } from '../../contrib/debug/common/abstractDebugAdapter.js'; +import { IWorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; +import { convertToVSCPaths, convertToDAPaths, isSessionAttach } from '../../contrib/debug/common/debugUtils.js'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; +import { IDebugVisualizerService } from '../../contrib/debug/common/debugVisualizers.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { Event } from '../../../base/common/event.js'; +import { isDefined } from '../../../base/common/types.js'; @extHostNamedCustomer(MainContext.MainThreadDebugService) export class MainThreadDebugService implements MainThreadDebugServiceShape, IDebugAdapterFactory { @@ -46,7 +46,7 @@ export class MainThreadDebugService implements MainThreadDebugServiceShape, IDeb this._toDispose.add(debugService.onDidNewSession(session => { this._proxy.$acceptDebugSessionStarted(this.getSessionDto(session)); const store = sessionListeners.get(session); - store!.add(session.onDidChangeName(name => { + store?.add(session.onDidChangeName(name => { this._proxy.$acceptDebugSessionNameChanged(this.getSessionDto(session), name); })); })); diff --git a/src/vs/workbench/api/browser/mainThreadDecorations.ts b/src/vs/workbench/api/browser/mainThreadDecorations.ts index 46ae4275b..9363c8bb9 100644 --- a/src/vs/workbench/api/browser/mainThreadDecorations.ts +++ b/src/vs/workbench/api/browser/mainThreadDecorations.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Emitter } from 'vs/base/common/event'; -import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { ExtHostContext, MainContext, MainThreadDecorationsShape, ExtHostDecorationsShape, DecorationData, DecorationRequest } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IDecorationsService, IDecorationData } from 'vs/workbench/services/decorations/common/decorations'; -import { CancellationToken } from 'vs/base/common/cancellation'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Emitter } from '../../../base/common/event.js'; +import { IDisposable, dispose } from '../../../base/common/lifecycle.js'; +import { ExtHostContext, MainContext, MainThreadDecorationsShape, ExtHostDecorationsShape, DecorationData, DecorationRequest } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IDecorationsService, IDecorationData } from '../../services/decorations/common/decorations.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; class DecorationRequestsQueue { diff --git a/src/vs/workbench/api/browser/mainThreadDiagnostics.ts b/src/vs/workbench/api/browser/mainThreadDiagnostics.ts index 0fcc79603..df4491d4e 100644 --- a/src/vs/workbench/api/browser/mainThreadDiagnostics.ts +++ b/src/vs/workbench/api/browser/mainThreadDiagnostics.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMarkerService, IMarkerData } from 'vs/platform/markers/common/markers'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { MainThreadDiagnosticsShape, MainContext, ExtHostDiagnosticsShape, ExtHostContext } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { IMarkerService, IMarkerData } from '../../../platform/markers/common/markers.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { MainThreadDiagnosticsShape, MainContext, ExtHostDiagnosticsShape, ExtHostContext } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; @extHostNamedCustomer(MainContext.MainThreadDiagnostics) export class MainThreadDiagnostics implements MainThreadDiagnosticsShape { diff --git a/src/vs/workbench/api/browser/mainThreadDialogs.ts b/src/vs/workbench/api/browser/mainThreadDialogs.ts index 424b70bcc..4ab41cf26 100644 --- a/src/vs/workbench/api/browser/mainThreadDialogs.ts +++ b/src/vs/workbench/api/browser/mainThreadDialogs.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { MainThreadDiaglogsShape, MainContext, MainThreadDialogOpenOptions, MainThreadDialogSaveOptions } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IFileDialogService, IOpenDialogOptions, ISaveDialogOptions } from 'vs/platform/dialogs/common/dialogs'; -import { Schemas } from 'vs/base/common/network'; +import { URI } from '../../../base/common/uri.js'; +import { MainThreadDiaglogsShape, MainContext, MainThreadDialogOpenOptions, MainThreadDialogSaveOptions } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IFileDialogService, IOpenDialogOptions, ISaveDialogOptions } from '../../../platform/dialogs/common/dialogs.js'; +import { Schemas } from '../../../base/common/network.js'; @extHostNamedCustomer(MainContext.MainThreadDialogs) export class MainThreadDialogs implements MainThreadDiaglogsShape { diff --git a/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.ts b/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.ts index 1acbcf23d..7ff4687fd 100644 --- a/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.ts +++ b/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import { dispose, DisposableMap } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostDocumentContentProvidersShape, MainContext, MainThreadDocumentContentProvidersShape } from '../common/extHost.protocol'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { dispose, DisposableMap } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { EditOperation } from '../../../editor/common/core/editOperation.js'; +import { Range } from '../../../editor/common/core/range.js'; +import { ITextModel } from '../../../editor/common/model.js'; +import { IEditorWorkerService } from '../../../editor/common/services/editorWorker.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { ITextModelService } from '../../../editor/common/services/resolverService.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostDocumentContentProvidersShape, MainContext, MainThreadDocumentContentProvidersShape } from '../common/extHost.protocol.js'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; @extHostNamedCustomer(MainContext.MainThreadDocumentContentProviders) export class MainThreadDocumentContentProviders implements MainThreadDocumentContentProvidersShape { diff --git a/src/vs/workbench/api/browser/mainThreadDocuments.ts b/src/vs/workbench/api/browser/mainThreadDocuments.ts index 02d36af38..6ded63e34 100644 --- a/src/vs/workbench/api/browser/mainThreadDocuments.ts +++ b/src/vs/workbench/api/browser/mainThreadDocuments.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { IReference, dispose, Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ITextModel, shouldSynchronizeModel } from 'vs/editor/common/model'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { IFileService, FileOperation } from 'vs/platform/files/common/files'; -import { ExtHostContext, ExtHostDocumentsShape, MainThreadDocumentsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { toLocalResource, extUri, IExtUri } from 'vs/base/common/resources'; -import { IWorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { ResourceMap } from 'vs/base/common/map'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ErrorNoTelemetry } from 'vs/base/common/errors'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { IReference, dispose, Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ITextModel, shouldSynchronizeModel } from '../../../editor/common/model.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { ITextModelService } from '../../../editor/common/services/resolverService.js'; +import { IFileService, FileOperation } from '../../../platform/files/common/files.js'; +import { ExtHostContext, ExtHostDocumentsShape, MainThreadDocumentsShape } from '../common/extHost.protocol.js'; +import { ITextFileService } from '../../services/textfile/common/textfiles.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { toLocalResource, extUri, IExtUri } from '../../../base/common/resources.js'; +import { IWorkingCopyFileService } from '../../services/workingCopy/common/workingCopyFileService.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IPathService } from '../../services/path/common/pathService.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; export class BoundModelReferenceCollection { diff --git a/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.ts b/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.ts index dc20f23f9..c7a3dcea7 100644 --- a/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { combinedDisposable, DisposableStore, DisposableMap } from 'vs/base/common/lifecycle'; -import { ICodeEditor, isCodeEditor, isDiffEditor, IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IEditor } from 'vs/editor/common/editorCommon'; -import { ITextModel, shouldSynchronizeModel } from 'vs/editor/common/model'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { extHostCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { MainThreadDocuments } from 'vs/workbench/api/browser/mainThreadDocuments'; -import { MainThreadTextEditor } from 'vs/workbench/api/browser/mainThreadEditor'; -import { MainThreadTextEditors } from 'vs/workbench/api/browser/mainThreadEditors'; -import { ExtHostContext, ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta, IModelAddedData, ITextEditorAddData, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { AbstractTextEditor } from 'vs/workbench/browser/parts/editor/textEditor'; -import { IEditorPane } from 'vs/workbench/common/editor'; -import { EditorGroupColumn, editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IWorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { diffSets, diffMaps } from 'vs/base/common/collections'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { ViewContainerLocation } from 'vs/workbench/common/views'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { Event } from '../../../base/common/event.js'; +import { combinedDisposable, DisposableStore, DisposableMap } from '../../../base/common/lifecycle.js'; +import { ICodeEditor, isCodeEditor, isDiffEditor, IActiveCodeEditor } from '../../../editor/browser/editorBrowser.js'; +import { ICodeEditorService } from '../../../editor/browser/services/codeEditorService.js'; +import { IEditor } from '../../../editor/common/editorCommon.js'; +import { ITextModel, shouldSynchronizeModel } from '../../../editor/common/model.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { ITextModelService } from '../../../editor/common/services/resolverService.js'; +import { IFileService } from '../../../platform/files/common/files.js'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { MainThreadDocuments } from './mainThreadDocuments.js'; +import { MainThreadTextEditor } from './mainThreadEditor.js'; +import { MainThreadTextEditors } from './mainThreadEditors.js'; +import { ExtHostContext, ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta, IModelAddedData, ITextEditorAddData, MainContext } from '../common/extHost.protocol.js'; +import { AbstractTextEditor } from '../../browser/parts/editor/textEditor.js'; +import { IEditorPane } from '../../common/editor.js'; +import { EditorGroupColumn, editorGroupToColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { IEditorGroupsService } from '../../services/editor/common/editorGroupsService.js'; +import { ITextFileService } from '../../services/textfile/common/textfiles.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { IWorkingCopyFileService } from '../../services/workingCopy/common/workingCopyFileService.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; +import { IPathService } from '../../services/path/common/pathService.js'; +import { diffSets, diffMaps } from '../../../base/common/collections.js'; +import { IPaneCompositePartService } from '../../services/panecomposite/browser/panecomposite.js'; +import { ViewContainerLocation } from '../../common/views.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; class TextEditorSnapshot { diff --git a/src/vs/workbench/api/browser/mainThreadDownloadService.ts b/src/vs/workbench/api/browser/mainThreadDownloadService.ts index d8c25cadd..33d4e7989 100644 --- a/src/vs/workbench/api/browser/mainThreadDownloadService.ts +++ b/src/vs/workbench/api/browser/mainThreadDownloadService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { MainContext, MainThreadDownloadServiceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IDownloadService } from 'vs/platform/download/common/download'; -import { UriComponents, URI } from 'vs/base/common/uri'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { MainContext, MainThreadDownloadServiceShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IDownloadService } from '../../../platform/download/common/download.js'; +import { UriComponents, URI } from '../../../base/common/uri.js'; @extHostNamedCustomer(MainContext.MainThreadDownloadService) export class MainThreadDownloadService extends Disposable implements MainThreadDownloadServiceShape { diff --git a/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.ts b/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.ts index c3dc11500..db70e241a 100644 --- a/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.ts +++ b/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { extHostCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { raceCancellationError } from 'vs/base/common/async'; -import { IEditSessionIdentityCreateParticipant, IEditSessionIdentityService } from 'vs/platform/workspace/common/editSessions'; -import { ExtHostContext, ExtHostWorkspaceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { localize } from '../../../nls.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { raceCancellationError } from '../../../base/common/async.js'; +import { IEditSessionIdentityCreateParticipant, IEditSessionIdentityService } from '../../../platform/workspace/common/editSessions.js'; +import { ExtHostContext, ExtHostWorkspaceShape } from '../common/extHost.protocol.js'; +import { WorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; class ExtHostEditSessionIdentityCreateParticipant implements IEditSessionIdentityCreateParticipant { diff --git a/src/vs/workbench/api/browser/mainThreadEditor.ts b/src/vs/workbench/api/browser/mainThreadEditor.ts index 575c40337..7dd214449 100644 --- a/src/vs/workbench/api/browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/browser/mainThreadEditor.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { RenderLineNumbersType, TextEditorCursorStyle, cursorStyleToString, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IDecorationOptions, ScrollType } from 'vs/editor/common/editorCommon'; -import { ITextModel, ITextModelUpdateOptions } from 'vs/editor/common/model'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IModelService } from 'vs/editor/common/services/model'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { IApplyEditsOptions, IEditorPropertiesChangeData, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, IUndoStopOptions, TextEditorRevealType } from 'vs/workbench/api/common/extHost.protocol'; -import { IEditorPane } from 'vs/workbench/common/editor'; -import { equals } from 'vs/base/common/arrays'; -import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { MainThreadDocuments } from 'vs/workbench/api/browser/mainThreadDocuments'; -import { ISnippetEdit } from 'vs/editor/contrib/snippet/browser/snippetSession'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../editor/browser/editorBrowser.js'; +import { RenderLineNumbersType, TextEditorCursorStyle, cursorStyleToString, EditorOption } from '../../../editor/common/config/editorOptions.js'; +import { IRange, Range } from '../../../editor/common/core/range.js'; +import { ISelection, Selection } from '../../../editor/common/core/selection.js'; +import { IDecorationOptions, ScrollType } from '../../../editor/common/editorCommon.js'; +import { ITextModel, ITextModelUpdateOptions } from '../../../editor/common/model.js'; +import { ISingleEditOperation } from '../../../editor/common/core/editOperation.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { SnippetController2 } from '../../../editor/contrib/snippet/browser/snippetController2.js'; +import { IApplyEditsOptions, IEditorPropertiesChangeData, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, IUndoStopOptions, TextEditorRevealType } from '../common/extHost.protocol.js'; +import { IEditorPane } from '../../common/editor.js'; +import { equals } from '../../../base/common/arrays.js'; +import { CodeEditorStateFlag, EditorState } from '../../../editor/contrib/editorState/browser/editorState.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; +import { SnippetParser } from '../../../editor/contrib/snippet/browser/snippetParser.js'; +import { MainThreadDocuments } from './mainThreadDocuments.js'; +import { ISnippetEdit } from '../../../editor/contrib/snippet/browser/snippetSession.js'; export interface IFocusTracker { onGainedFocus(): void; diff --git a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts index 9bf27279d..9d0d3555b 100644 --- a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts +++ b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { DisposableMap, DisposableStore } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { AnyInputDto, ExtHostContext, IEditorTabDto, IEditorTabGroupDto, IExtHostEditorTabsShape, MainContext, MainThreadEditorTabsShape, TabInputKind, TabModelOperationKind, TextDiffInputDto } from 'vs/workbench/api/common/extHost.protocol'; -import { EditorResourceAccessor, GroupModelChangeKind, SideBySideEditor } from 'vs/workbench/common/editor'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { isGroupEditorMoveEvent } from 'vs/workbench/common/editor/editorGroupModel'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; -import { ChatEditorInput } from 'vs/workbench/contrib/chat/browser/chatEditorInput'; -import { CustomEditorInput } from 'vs/workbench/contrib/customEditor/browser/customEditorInput'; -import { InteractiveEditorInput } from 'vs/workbench/contrib/interactive/browser/interactiveEditorInput'; -import { MergeEditorInput } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput'; -import { MultiDiffEditorInput } from 'vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditorInput'; -import { NotebookEditorInput } from 'vs/workbench/contrib/notebook/common/notebookEditorInput'; -import { TerminalEditorInput } from 'vs/workbench/contrib/terminal/browser/terminalEditorInput'; -import { WebviewInput } from 'vs/workbench/contrib/webviewPanel/browser/webviewEditorInput'; -import { columnToEditorGroup, EditorGroupColumn, editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { GroupDirection, IEditorGroup, IEditorGroupsService, preferredSideBySideGroupDirection } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorsChangeEvent, IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { Event } from '../../../base/common/event.js'; +import { DisposableMap, DisposableStore } from '../../../base/common/lifecycle.js'; +import { isEqual } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { AnyInputDto, ExtHostContext, IEditorTabDto, IEditorTabGroupDto, IExtHostEditorTabsShape, MainContext, MainThreadEditorTabsShape, TabInputKind, TabModelOperationKind, TextDiffInputDto } from '../common/extHost.protocol.js'; +import { EditorResourceAccessor, GroupModelChangeKind, SideBySideEditor } from '../../common/editor.js'; +import { DiffEditorInput } from '../../common/editor/diffEditorInput.js'; +import { isGroupEditorMoveEvent } from '../../common/editor/editorGroupModel.js'; +import { EditorInput } from '../../common/editor/editorInput.js'; +import { SideBySideEditorInput } from '../../common/editor/sideBySideEditorInput.js'; +import { AbstractTextResourceEditorInput } from '../../common/editor/textResourceEditorInput.js'; +import { ChatEditorInput } from '../../contrib/chat/browser/chatEditorInput.js'; +import { CustomEditorInput } from '../../contrib/customEditor/browser/customEditorInput.js'; +import { InteractiveEditorInput } from '../../contrib/interactive/browser/interactiveEditorInput.js'; +import { MergeEditorInput } from '../../contrib/mergeEditor/browser/mergeEditorInput.js'; +import { MultiDiffEditorInput } from '../../contrib/multiDiffEditor/browser/multiDiffEditorInput.js'; +import { NotebookEditorInput } from '../../contrib/notebook/common/notebookEditorInput.js'; +import { TerminalEditorInput } from '../../contrib/terminal/browser/terminalEditorInput.js'; +import { WebviewInput } from '../../contrib/webviewPanel/browser/webviewEditorInput.js'; +import { columnToEditorGroup, EditorGroupColumn, editorGroupToColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { GroupDirection, IEditorGroup, IEditorGroupsService, preferredSideBySideGroupDirection } from '../../services/editor/common/editorGroupsService.js'; +import { IEditorsChangeEvent, IEditorService, SIDE_GROUP } from '../../services/editor/common/editorService.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; interface TabInfo { tab: IEditorTabDto; diff --git a/src/vs/workbench/api/browser/mainThreadEditors.ts b/src/vs/workbench/api/browser/mainThreadEditors.ts index 84bc6f34f..a51ada95d 100644 --- a/src/vs/workbench/api/browser/mainThreadEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadEditors.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { illegalArgument } from 'vs/base/common/errors'; -import { IDisposable, dispose, DisposableStore } from 'vs/base/common/lifecycle'; -import { equals as objectEquals } from 'vs/base/common/objects'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IRange } from 'vs/editor/common/core/range'; -import { ISelection } from 'vs/editor/common/core/selection'; -import { IDecorationOptions, IDecorationRenderOptions } from 'vs/editor/common/editorCommon'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ITextEditorOptions, IResourceEditorInput, EditorActivation, EditorResolution } from 'vs/platform/editor/common/editor'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { MainThreadTextEditor } from 'vs/workbench/api/browser/mainThreadEditor'; -import { ExtHostContext, ExtHostEditorsShape, IApplyEditsOptions, ITextDocumentShowOptions, ITextEditorConfigurationUpdate, ITextEditorPositionData, IUndoStopOptions, MainThreadTextEditorsShape, TextEditorRevealType } from 'vs/workbench/api/common/extHost.protocol'; -import { editorGroupToColumn, columnToEditorGroup, EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { IChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IEditorControl } from 'vs/workbench/common/editor'; -import { getCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { DirtyDiffContribution } from 'vs/workbench/contrib/scm/browser/dirtydiffDecorator'; +import { illegalArgument } from '../../../base/common/errors.js'; +import { IDisposable, dispose, DisposableStore } from '../../../base/common/lifecycle.js'; +import { equals as objectEquals } from '../../../base/common/objects.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ICodeEditorService } from '../../../editor/browser/services/codeEditorService.js'; +import { IRange } from '../../../editor/common/core/range.js'; +import { ISelection } from '../../../editor/common/core/selection.js'; +import { IDecorationOptions, IDecorationRenderOptions } from '../../../editor/common/editorCommon.js'; +import { ISingleEditOperation } from '../../../editor/common/core/editOperation.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { ITextEditorOptions, IResourceEditorInput, EditorActivation, EditorResolution } from '../../../platform/editor/common/editor.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { MainThreadTextEditor } from './mainThreadEditor.js'; +import { ExtHostContext, ExtHostEditorsShape, IApplyEditsOptions, ITextDocumentShowOptions, ITextEditorConfigurationUpdate, ITextEditorPositionData, IUndoStopOptions, MainThreadTextEditorsShape, TextEditorRevealType } from '../common/extHost.protocol.js'; +import { editorGroupToColumn, columnToEditorGroup, EditorGroupColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { IEditorGroupsService } from '../../services/editor/common/editorGroupsService.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { IWorkingCopyService } from '../../services/workingCopy/common/workingCopyService.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { IChange } from '../../../editor/common/diff/legacyLinesDiffComputer.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IEditorControl } from '../../common/editor.js'; +import { getCodeEditor, ICodeEditor } from '../../../editor/browser/editorBrowser.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { DirtyDiffContribution } from '../../contrib/scm/browser/dirtydiffDecorator.js'; export interface IMainThreadEditorLocator { getEditor(id: string): MainThreadTextEditor | undefined; diff --git a/src/vs/workbench/api/browser/mainThreadEmbeddings.ts b/src/vs/workbench/api/browser/mainThreadEmbeddings.ts index 776c471e1..de8c19a22 100644 --- a/src/vs/workbench/api/browser/mainThreadEmbeddings.ts +++ b/src/vs/workbench/api/browser/mainThreadEmbeddings.ts @@ -3,13 +3,13 @@ * 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 { DisposableMap, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ExtHostContext, ExtHostEmbeddingsShape, MainContext, MainThreadEmbeddingsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableMap, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ExtHostContext, ExtHostEmbeddingsShape, MainContext, MainThreadEmbeddingsShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; interface IEmbeddingsProvider { diff --git a/src/vs/workbench/api/browser/mainThreadErrors.ts b/src/vs/workbench/api/browser/mainThreadErrors.ts index e15911799..becba7680 100644 --- a/src/vs/workbench/api/browser/mainThreadErrors.ts +++ b/src/vs/workbench/api/browser/mainThreadErrors.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SerializedError, onUnexpectedError, transformErrorFromSerialization } from 'vs/base/common/errors'; -import { extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { MainContext, MainThreadErrorsShape } from 'vs/workbench/api/common/extHost.protocol'; +import { SerializedError, onUnexpectedError, transformErrorFromSerialization } from '../../../base/common/errors.js'; +import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { MainContext, MainThreadErrorsShape } from '../common/extHost.protocol.js'; @extHostNamedCustomer(MainContext.MainThreadErrors) export class MainThreadErrors implements MainThreadErrorsShape { diff --git a/src/vs/workbench/api/browser/mainThreadExtensionService.ts b/src/vs/workbench/api/browser/mainThreadExtensionService.ts index 7c4db0a5d..faf19a0dc 100644 --- a/src/vs/workbench/api/browser/mainThreadExtensionService.ts +++ b/src/vs/workbench/api/browser/mainThreadExtensionService.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Action } from 'vs/base/common/actions'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { SerializedError, transformErrorFromSerialization } from 'vs/base/common/errors'; -import { FileAccess } from 'vs/base/common/network'; -import Severity from 'vs/base/common/severity'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IRemoteConnectionData, ManagedRemoteConnection, RemoteConnection, RemoteConnectionType, ResolvedAuthority, WebSocketRemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { ExtHostContext, ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtension, IExtensionsWorkbenchService } from 'vs/workbench/contrib/extensions/common/extensions'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { EnablementState, IWorkbenchExtensionEnablementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; -import { ExtensionHostKind } from 'vs/workbench/services/extensions/common/extensionHostKind'; -import { IExtensionDescriptionDelta } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { IExtensionHostProxy, IResolveAuthorityResult } from 'vs/workbench/services/extensions/common/extensionHostProxy'; -import { ActivationKind, ExtensionActivationReason, IExtensionService, IInternalExtensionService, MissingExtensionDependency } from 'vs/workbench/services/extensions/common/extensions'; -import { extHostNamedCustomer, IExtHostContext, IInternalExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { Dto } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { ITimerService } from 'vs/workbench/services/timer/browser/timerService'; +import { Action } from '../../../base/common/actions.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { SerializedError, transformErrorFromSerialization } from '../../../base/common/errors.js'; +import { FileAccess } from '../../../base/common/network.js'; +import Severity from '../../../base/common/severity.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { ILocalExtension } from '../../../platform/extensionManagement/common/extensionManagement.js'; +import { areSameExtensions } from '../../../platform/extensionManagement/common/extensionManagementUtil.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { IRemoteConnectionData, ManagedRemoteConnection, RemoteConnection, RemoteConnectionType, ResolvedAuthority, WebSocketRemoteConnection } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { ExtHostContext, ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape } from '../common/extHost.protocol.js'; +import { IExtension, IExtensionsWorkbenchService } from '../../contrib/extensions/common/extensions.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { EnablementState, IWorkbenchExtensionEnablementService } from '../../services/extensionManagement/common/extensionManagement.js'; +import { ExtensionHostKind } from '../../services/extensions/common/extensionHostKind.js'; +import { IExtensionDescriptionDelta } from '../../services/extensions/common/extensionHostProtocol.js'; +import { IExtensionHostProxy, IResolveAuthorityResult } from '../../services/extensions/common/extensionHostProxy.js'; +import { ActivationKind, ExtensionActivationReason, IExtensionService, IInternalExtensionService, MissingExtensionDependency } from '../../services/extensions/common/extensions.js'; +import { extHostNamedCustomer, IExtHostContext, IInternalExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { Dto } from '../../services/extensions/common/proxyIdentifier.js'; +import { IHostService } from '../../services/host/browser/host.js'; +import { ITimerService } from '../../services/timer/browser/timerService.js'; @extHostNamedCustomer(MainContext.MainThreadExtensionService) export class MainThreadExtensionService implements MainThreadExtensionServiceShape { diff --git a/src/vs/workbench/api/browser/mainThreadFileSystem.ts b/src/vs/workbench/api/browser/mainThreadFileSystem.ts index e0f9359f0..295fb7543 100644 --- a/src/vs/workbench/api/browser/mainThreadFileSystem.ts +++ b/src/vs/workbench/api/browser/mainThreadFileSystem.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { IDisposable, toDisposable, DisposableStore, DisposableMap } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IFileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IStat, IWatchOptions, FileType, IFileOverwriteOptions, IFileDeleteOptions, IFileOpenOptions, FileOperationError, FileOperationResult, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileFolderCopyCapability, FilePermission, toFileSystemProviderErrorCode, IFileStatWithPartialMetadata, IFileStat } from 'vs/platform/files/common/files'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostFileSystemShape, IFileChangeDto, MainContext, MainThreadFileSystemShape } from '../common/extHost.protocol'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IDisposable, toDisposable, DisposableStore, DisposableMap } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IFileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IStat, IWatchOptions, FileType, IFileOverwriteOptions, IFileDeleteOptions, IFileOpenOptions, FileOperationError, FileOperationResult, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileFolderCopyCapability, FilePermission, toFileSystemProviderErrorCode, IFileStatWithPartialMetadata, IFileStat } from '../../../platform/files/common/files.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostFileSystemShape, IFileChangeDto, MainContext, MainThreadFileSystemShape } from '../common/extHost.protocol.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; @extHostNamedCustomer(MainContext.MainThreadFileSystem) export class MainThreadFileSystem implements MainThreadFileSystemShape { diff --git a/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts b/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts index 22976049d..572acf839 100644 --- a/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts +++ b/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts @@ -3,31 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableMap, DisposableStore } from 'vs/base/common/lifecycle'; -import { FileOperation, IFileService, IFilesConfiguration, IWatchOptions } from 'vs/platform/files/common/files'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostFileSystemEventServiceShape, MainContext, MainThreadFileSystemEventServiceShape } from '../common/extHost.protocol'; -import { localize } from 'vs/nls'; -import { IWorkingCopyFileOperationParticipant, IWorkingCopyFileService, SourceTargetPair, IFileOperationUndoRedoInfo } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; -import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; -import { raceCancellation } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import Severity from 'vs/base/common/severity'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { reviveWorkspaceEditDto } from 'vs/workbench/api/browser/mainThreadBulkEdits'; -import { GLOBSTAR } from 'vs/base/common/glob'; -import { rtrim } from 'vs/base/common/strings'; -import { UriComponents, URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { normalizeWatcherPattern } from 'vs/platform/files/common/watcher'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { DisposableMap, DisposableStore } from '../../../base/common/lifecycle.js'; +import { FileOperation, IFileService, IWatchOptions } from '../../../platform/files/common/files.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostFileSystemEventServiceShape, MainContext, MainThreadFileSystemEventServiceShape } from '../common/extHost.protocol.js'; +import { localize } from '../../../nls.js'; +import { IWorkingCopyFileOperationParticipant, IWorkingCopyFileService, SourceTargetPair, IFileOperationUndoRedoInfo } from '../../services/workingCopy/common/workingCopyFileService.js'; +import { IBulkEditService } from '../../../editor/browser/services/bulkEditService.js'; +import { IProgressService, ProgressLocation } from '../../../platform/progress/common/progress.js'; +import { raceCancellation } from '../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import Severity from '../../../base/common/severity.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../platform/storage/common/storage.js'; +import { Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { reviveWorkspaceEditDto } from './mainThreadBulkEdits.js'; +import { UriComponents, URI } from '../../../base/common/uri.js'; @extHostNamedCustomer(MainContext.MainThreadFileSystemEventService) export class MainThreadFileSystemEventService implements MainThreadFileSystemEventServiceShape { @@ -50,9 +45,7 @@ export class MainThreadFileSystemEventService implements MainThreadFileSystemEve @ILogService logService: ILogService, @IEnvironmentService envService: IEnvironmentService, @IUriIdentityService uriIdentService: IUriIdentityService, - @IWorkspaceContextService private readonly _contextService: IWorkspaceContextService, @ILogService private readonly _logService: ILogService, - @IConfigurationService private readonly _configurationService: IConfigurationService ) { this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostFileSystemEventService); @@ -234,9 +227,9 @@ export class MainThreadFileSystemEventService implements MainThreadFileSystemEve } } - // Correlated file watching is taken as is + // Correlated file watching: use an exclusive `createWatcher()` if (correlate) { - this._logService.trace(`MainThreadFileSystemEventService#$watch(): request to start watching correlated (extension: ${extensionId}, path: ${uri.toString(true)}, recursive: ${opts.recursive}, session: ${session})`); + this._logService.trace(`MainThreadFileSystemEventService#$watch(): request to start watching correlated (extension: ${extensionId}, path: ${uri.toString(true)}, recursive: ${opts.recursive}, session: ${session}, excludes: ${JSON.stringify(opts.excludes)}, includes: ${JSON.stringify(opts.includes)})`); const watcherDisposables = new DisposableStore(); const subscription = watcherDisposables.add(this._fileService.createWatcher(uri, opts)); @@ -252,60 +245,9 @@ export class MainThreadFileSystemEventService implements MainThreadFileSystemEve this._watches.set(session, watcherDisposables); } - // Uncorrelated file watching gets special treatment + // Uncorrelated file watching: via shared `watch()` else { - this._logService.trace(`MainThreadFileSystemEventService#$watch(): request to start watching uncorrelated (extension: ${extensionId}, path: ${uri.toString(true)}, recursive: ${opts.recursive}, session: ${session})`); - - const workspaceFolder = this._contextService.getWorkspaceFolder(uri); - - // Automatically add `files.watcherExclude` patterns when watching - // recursively to give users a chance to configure exclude rules - // for reducing the overhead of watching recursively - if (opts.recursive && opts.excludes.length === 0) { - const config = this._configurationService.getValue(); - if (config.files?.watcherExclude) { - for (const key in config.files.watcherExclude) { - if (key && config.files.watcherExclude[key] === true) { - opts.excludes.push(key); - } - } - } - } - - // Non-recursive watching inside the workspace will overlap with - // our standard workspace watchers. To prevent duplicate events, - // we only want to include events for files that are otherwise - // excluded via `files.watcherExclude`. As such, we configure - // to include each configured exclude pattern so that only those - // events are reported that are otherwise excluded. - // However, we cannot just use the pattern as is, because a pattern - // such as `bar` for a exclude, will work to exclude any of - // `/bar` but will not work as include for files within - // `bar` unless a suffix of `/**` if added. - // (https://github.com/microsoft/vscode/issues/148245) - else if (!opts.recursive && workspaceFolder) { - const config = this._configurationService.getValue(); - if (config.files?.watcherExclude) { - for (const key in config.files.watcherExclude) { - if (key && config.files.watcherExclude[key] === true) { - if (!opts.includes) { - opts.includes = []; - } - - const includePattern = `${rtrim(key, '/')}/${GLOBSTAR}`; - opts.includes.push(normalizeWatcherPattern(workspaceFolder.uri.fsPath, includePattern)); - } - } - } - - // Still ignore watch request if there are actually no configured - // exclude rules, because in that case our default recursive watcher - // should be able to take care of all events. - if (!opts.includes || opts.includes.length === 0) { - this._logService.trace(`MainThreadFileSystemEventService#$watch(): ignoring request to start watching because path is inside workspace and no excludes are configured (extension: ${extensionId}, path: ${uri.toString(true)}, recursive: ${opts.recursive}, session: ${session})`); - return; - } - } + this._logService.trace(`MainThreadFileSystemEventService#$watch(): request to start watching uncorrelated (extension: ${extensionId}, path: ${uri.toString(true)}, recursive: ${opts.recursive}, session: ${session}, excludes: ${JSON.stringify(opts.excludes)}, includes: ${JSON.stringify(opts.includes)})`); const subscription = this._fileService.watch(uri, opts); this._watches.set(session, subscription); diff --git a/src/vs/workbench/api/browser/mainThreadInteractive.ts b/src/vs/workbench/api/browser/mainThreadInteractive.ts index 36b227a69..abcc61ff9 100644 --- a/src/vs/workbench/api/browser/mainThreadInteractive.ts +++ b/src/vs/workbench/api/browser/mainThreadInteractive.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { ExtHostContext, ExtHostInteractiveShape, MainContext, MainThreadInteractiveShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IInteractiveDocumentService } from 'vs/workbench/contrib/interactive/browser/interactiveDocumentService'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../editor/common/languages/modesRegistry.js'; +import { ExtHostContext, ExtHostInteractiveShape, MainContext, MainThreadInteractiveShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IInteractiveDocumentService } from '../../contrib/interactive/browser/interactiveDocumentService.js'; @extHostNamedCustomer(MainContext.MainThreadInteractive) export class MainThreadInteractive implements MainThreadInteractiveShape { diff --git a/src/vs/workbench/api/browser/mainThreadLabelService.ts b/src/vs/workbench/api/browser/mainThreadLabelService.ts index 8ade55d44..4b3db1a43 100644 --- a/src/vs/workbench/api/browser/mainThreadLabelService.ts +++ b/src/vs/workbench/api/browser/mainThreadLabelService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { ILabelService, ResourceLabelFormatter } from 'vs/platform/label/common/label'; -import { MainContext, MainThreadLabelServiceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { ILabelService, ResourceLabelFormatter } from '../../../platform/label/common/label.js'; +import { MainContext, MainThreadLabelServiceShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadLabelService) export class MainThreadLabelService extends Disposable implements MainThreadLabelServiceShape { diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index 629af25ae..c591ed677 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -3,38 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { createStringDataTransferItem, IReadonlyVSDataTransfer, VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { CancellationError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { HierarchicalKind } from 'vs/base/common/hierarchicalKind'; -import { combinedDisposable, Disposable, DisposableMap, toDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { revive } from 'vs/base/common/marshalling'; -import { mixin } from 'vs/base/common/objects'; -import { URI } from 'vs/base/common/uri'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { Position as EditorPosition, IPosition } from 'vs/editor/common/core/position'; -import { Range as EditorRange, IRange } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import * as languages from 'vs/editor/common/languages'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IndentationRule, LanguageConfiguration, OnEnterRule } from 'vs/editor/common/languages/languageConfiguration'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { decodeSemanticTokensDto } from 'vs/editor/common/services/semanticTokensDto'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { reviveWorkspaceEditDto } from 'vs/workbench/api/browser/mainThreadBulkEdits'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { DataTransferFileCache } from 'vs/workbench/api/common/shared/dataTransferCache'; -import * as callh from 'vs/workbench/contrib/callHierarchy/common/callHierarchy'; -import * as search from 'vs/workbench/contrib/search/common/search'; -import * as typeh from 'vs/workbench/contrib/typeHierarchy/common/typeHierarchy'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostLanguageFeaturesShape, HoverWithId, ICallHierarchyItemDto, ICodeActionDto, ICodeActionProviderMetadataDto, IdentifiableInlineCompletion, IdentifiableInlineCompletions, IdentifiableInlineEdit, IDocumentDropEditDto, IDocumentDropEditProviderMetadata, IDocumentFilterDto, IIndentationRuleDto, IInlayHintDto, ILanguageConfigurationDto, ILanguageWordDefinitionDto, ILinkDto, ILocationDto, ILocationLinkDto, IOnEnterRuleDto, IPasteEditDto, IPasteEditProviderMetadataDto, IRegExpDto, ISignatureHelpProviderMetadataDto, ISuggestDataDto, ISuggestDataDtoField, ISuggestResultDtoField, ITypeHierarchyItemDto, IWorkspaceSymbolDto, MainContext, MainThreadLanguageFeaturesShape } from '../common/extHost.protocol'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { createStringDataTransferItem, IReadonlyVSDataTransfer, VSDataTransfer } from '../../../base/common/dataTransfer.js'; +import { CancellationError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { HierarchicalKind } from '../../../base/common/hierarchicalKind.js'; +import { combinedDisposable, Disposable, DisposableMap, toDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { mixin } from '../../../base/common/objects.js'; +import { URI } from '../../../base/common/uri.js'; +import { ISingleEditOperation } from '../../../editor/common/core/editOperation.js'; +import { Position as EditorPosition, IPosition } from '../../../editor/common/core/position.js'; +import { Range as EditorRange, IRange } from '../../../editor/common/core/range.js'; +import { Selection } from '../../../editor/common/core/selection.js'; +import * as languages from '../../../editor/common/languages.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { IndentationRule, LanguageConfiguration, OnEnterRule } from '../../../editor/common/languages/languageConfiguration.js'; +import { ILanguageConfigurationService } from '../../../editor/common/languages/languageConfigurationRegistry.js'; +import { ITextModel } from '../../../editor/common/model.js'; +import { ILanguageFeaturesService } from '../../../editor/common/services/languageFeatures.js'; +import { decodeSemanticTokensDto } from '../../../editor/common/services/semanticTokensDto.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { reviveWorkspaceEditDto } from './mainThreadBulkEdits.js'; +import * as typeConvert from '../common/extHostTypeConverters.js'; +import { DataTransferFileCache } from '../common/shared/dataTransferCache.js'; +import * as callh from '../../contrib/callHierarchy/common/callHierarchy.js'; +import * as search from '../../contrib/search/common/search.js'; +import * as typeh from '../../contrib/typeHierarchy/common/typeHierarchy.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostLanguageFeaturesShape, HoverWithId, ICallHierarchyItemDto, ICodeActionDto, ICodeActionProviderMetadataDto, IdentifiableInlineCompletion, IdentifiableInlineCompletions, IdentifiableInlineEdit, IDocumentDropEditDto, IDocumentDropEditProviderMetadata, IDocumentFilterDto, IIndentationRuleDto, IInlayHintDto, ILanguageConfigurationDto, ILanguageWordDefinitionDto, ILinkDto, ILocationDto, ILocationLinkDto, IOnEnterRuleDto, IPasteEditDto, IPasteEditProviderMetadataDto, IRegExpDto, ISignatureHelpProviderMetadataDto, ISuggestDataDto, ISuggestDataDtoField, ISuggestResultDtoField, ITypeHierarchyItemDto, IWorkspaceSymbolDto, MainContext, MainThreadLanguageFeaturesShape } from '../common/extHost.protocol.js'; @extHostNamedCustomer(MainContext.MainThreadLanguageFeatures) export class MainThreadLanguageFeatures extends Disposable implements MainThreadLanguageFeaturesShape { @@ -613,8 +613,8 @@ export class MainThreadLanguageFeatures extends Disposable implements MainThread provideInlineCompletions: async (model: ITextModel, position: EditorPosition, context: languages.InlineCompletionContext, token: CancellationToken): Promise => { return this._proxy.$provideInlineCompletions(handle, model.uri, position, context, token); }, - provideInlineEdits: async (model: ITextModel, range: EditorRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise => { - return this._proxy.$provideInlineEdits(handle, model.uri, range, context, token); + provideInlineEditsForRange: async (model: ITextModel, range: EditorRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise => { + return this._proxy.$provideInlineEditsForRange(handle, model.uri, range, context, token); }, handleItemDidShow: async (completions: IdentifiableInlineCompletions, item: IdentifiableInlineCompletion, updatedInsertText: string): Promise => { if (supportsHandleEvents) { diff --git a/src/vs/workbench/api/browser/mainThreadLanguageModelTools.ts b/src/vs/workbench/api/browser/mainThreadLanguageModelTools.ts index 411f58162..de592ed2c 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageModelTools.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageModelTools.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { ExtHostContext, ExtHostLanguageModelToolsShape, MainContext, MainThreadLanguageModelToolsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { CountTokensCallback, ILanguageModelToolsService, IToolData, IToolInvocation, IToolResult } from 'vs/workbench/contrib/chat/common/languageModelToolsService'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { CountTokensCallback, ILanguageModelToolsService, IToolData, IToolInvocation, IToolResult } from '../../contrib/chat/common/languageModelToolsService.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostLanguageModelToolsShape, MainContext, MainThreadLanguageModelToolsShape } from '../common/extHost.protocol.js'; @extHostNamedCustomer(MainContext.MainThreadLanguageModelTools) export class MainThreadLanguageModelTools extends Disposable implements MainThreadLanguageModelToolsShape { @@ -30,8 +30,8 @@ export class MainThreadLanguageModelTools extends Disposable implements MainThre return Array.from(this._languageModelToolsService.getTools()); } - $invokeTool(dto: IToolInvocation, token: CancellationToken): Promise { - return this._languageModelToolsService.invokeTool( + async $invokeTool(dto: IToolInvocation, token: CancellationToken): Promise { + return await this._languageModelToolsService.invokeTool( dto, (input, token) => this._proxy.$countTokensForInvocation(dto.callId, input, token), token, @@ -47,9 +47,9 @@ export class MainThreadLanguageModelTools extends Disposable implements MainThre return fn(input, token); } - $registerTool(name: string): void { + $registerTool(id: string): void { const disposable = this._languageModelToolsService.registerToolImplementation( - name, + id, { invoke: async (dto, countTokens, token) => { try { @@ -59,8 +59,10 @@ export class MainThreadLanguageModelTools extends Disposable implements MainThre this._countTokenCallbacks.delete(dto.callId); } }, + provideToolConfirmationMessages: (participantName, parameters, token) => this._proxy.$provideToolConfirmationMessages(id, participantName, parameters, token), + provideToolInvocationMessage: (parameters, token) => this._proxy.$provideToolInvocationMessage(id, parameters, token), }); - this._tools.set(name, disposable); + this._tools.set(id, disposable); } $unregisterTool(name: string): void { diff --git a/src/vs/workbench/api/browser/mainThreadLanguageModels.ts b/src/vs/workbench/api/browser/mainThreadLanguageModels.ts index adea66548..6e1ee3afe 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageModels.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageModels.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AsyncIterableSource, DeferredPromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { SerializedError, transformErrorForSerialization, transformErrorFromSerialization } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostLanguageModelsShape, ExtHostContext, MainContext, MainThreadLanguageModelsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ILanguageModelStatsService } from 'vs/workbench/contrib/chat/common/languageModelStats'; -import { ILanguageModelChatMetadata, IChatResponseFragment, ILanguageModelsService, IChatMessage, ILanguageModelChatSelector, ILanguageModelChatResponse } from 'vs/workbench/contrib/chat/common/languageModels'; -import { IAuthenticationAccessService } from 'vs/workbench/services/authentication/browser/authenticationAccessService'; -import { AuthenticationSession, AuthenticationSessionsChangeEvent, IAuthenticationProvider, IAuthenticationService, INTERNAL_AUTH_PROVIDER_PREFIX } from 'vs/workbench/services/authentication/common/authentication'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; +import { AsyncIterableSource, DeferredPromise } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { SerializedError, transformErrorForSerialization, transformErrorFromSerialization } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostLanguageModelsShape, ExtHostContext, MainContext, MainThreadLanguageModelsShape } from '../common/extHost.protocol.js'; +import { ILanguageModelStatsService } from '../../contrib/chat/common/languageModelStats.js'; +import { ILanguageModelChatMetadata, IChatResponseFragment, ILanguageModelsService, IChatMessage, ILanguageModelChatSelector, ILanguageModelChatResponse } from '../../contrib/chat/common/languageModels.js'; +import { IAuthenticationAccessService } from '../../services/authentication/browser/authenticationAccessService.js'; +import { AuthenticationSession, AuthenticationSessionsChangeEvent, IAuthenticationProvider, IAuthenticationService, INTERNAL_AUTH_PROVIDER_PREFIX } from '../../services/authentication/common/authentication.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; @extHostNamedCustomer(MainContext.MainThreadLanguageModels) export class MainThreadLanguageModels implements MainThreadLanguageModelsShape { diff --git a/src/vs/workbench/api/browser/mainThreadLanguages.ts b/src/vs/workbench/api/browser/mainThreadLanguages.ts index 7ec1932f4..05e8176ed 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguages.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguages.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelService } from 'vs/editor/common/services/model'; -import { MainThreadLanguagesShape, MainContext, ExtHostContext, ExtHostLanguagesShape } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { ILanguageStatus, ILanguageStatusService } from 'vs/workbench/services/languageStatus/common/languageStatusService'; -import { DisposableMap, DisposableStore } from 'vs/base/common/lifecycle'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { MainThreadLanguagesShape, MainContext, ExtHostContext, ExtHostLanguagesShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IPosition } from '../../../editor/common/core/position.js'; +import { IRange, Range } from '../../../editor/common/core/range.js'; +import { StandardTokenType } from '../../../editor/common/encodedTokenAttributes.js'; +import { ITextModelService } from '../../../editor/common/services/resolverService.js'; +import { ILanguageStatus, ILanguageStatusService } from '../../services/languageStatus/common/languageStatusService.js'; +import { DisposableMap, DisposableStore } from '../../../base/common/lifecycle.js'; @extHostNamedCustomer(MainContext.MainThreadLanguages) export class MainThreadLanguages implements MainThreadLanguagesShape { diff --git a/src/vs/workbench/api/browser/mainThreadLocalization.ts b/src/vs/workbench/api/browser/mainThreadLocalization.ts index af85618a6..43b588743 100644 --- a/src/vs/workbench/api/browser/mainThreadLocalization.ts +++ b/src/vs/workbench/api/browser/mainThreadLocalization.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainContext, MainThreadLocalizationShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IFileService } from 'vs/platform/files/common/files'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { ILanguagePackService } from 'vs/platform/languagePacks/common/languagePacks'; +import { MainContext, MainThreadLocalizationShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IFileService } from '../../../platform/files/common/files.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ILanguagePackService } from '../../../platform/languagePacks/common/languagePacks.js'; @extHostNamedCustomer(MainContext.MainThreadLocalization) export class MainThreadLocalization extends Disposable implements MainThreadLocalizationShape { diff --git a/src/vs/workbench/api/browser/mainThreadLogService.ts b/src/vs/workbench/api/browser/mainThreadLogService.ts index da8ac21f4..5e1271bc1 100644 --- a/src/vs/workbench/api/browser/mainThreadLogService.ts +++ b/src/vs/workbench/api/browser/mainThreadLogService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ILoggerOptions, ILoggerResource, ILoggerService, ILogService, isLogLevel, log, LogLevel, LogLevelToString, parseLogLevel } from 'vs/platform/log/common/log'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ExtHostContext, MainThreadLoggerShape, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { UriComponents, URI, UriDto } from 'vs/base/common/uri'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ILoggerOptions, ILoggerResource, ILoggerService, ILogService, isLogLevel, log, LogLevel, LogLevelToString, parseLogLevel } from '../../../platform/log/common/log.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { ExtHostContext, MainThreadLoggerShape, MainContext } from '../common/extHost.protocol.js'; +import { UriComponents, URI, UriDto } from '../../../base/common/uri.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; @extHostNamedCustomer(MainContext.MainThreadLogger) export class MainThreadLoggerService implements MainThreadLoggerShape { diff --git a/src/vs/workbench/api/browser/mainThreadManagedSockets.ts b/src/vs/workbench/api/browser/mainThreadManagedSockets.ts index 5cae55702..8bd8f0213 100644 --- a/src/vs/workbench/api/browser/mainThreadManagedSockets.ts +++ b/src/vs/workbench/api/browser/mainThreadManagedSockets.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ISocket, SocketCloseEventType } from 'vs/base/parts/ipc/common/ipc.net'; -import { ManagedSocket, RemoteSocketHalf, connectManagedSocket } from 'vs/platform/remote/common/managedSocket'; -import { ManagedRemoteConnection, RemoteConnectionType } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { IRemoteSocketFactoryService, ISocketFactory } from 'vs/platform/remote/common/remoteSocketFactoryService'; -import { ExtHostContext, ExtHostManagedSocketsShape, MainContext, MainThreadManagedSocketsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { ISocket, SocketCloseEventType } from '../../../base/parts/ipc/common/ipc.net.js'; +import { ManagedSocket, RemoteSocketHalf, connectManagedSocket } from '../../../platform/remote/common/managedSocket.js'; +import { ManagedRemoteConnection, RemoteConnectionType } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { IRemoteSocketFactoryService, ISocketFactory } from '../../../platform/remote/common/remoteSocketFactoryService.js'; +import { ExtHostContext, ExtHostManagedSocketsShape, MainContext, MainThreadManagedSocketsShape } from '../common/extHost.protocol.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadManagedSockets) export class MainThreadManagedSockets extends Disposable implements MainThreadManagedSocketsShape { diff --git a/src/vs/workbench/api/browser/mainThreadMessageService.ts b/src/vs/workbench/api/browser/mainThreadMessageService.ts index 5cf20960f..0cb411469 100644 --- a/src/vs/workbench/api/browser/mainThreadMessageService.ts +++ b/src/vs/workbench/api/browser/mainThreadMessageService.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import Severity from 'vs/base/common/severity'; -import { IAction, toAction } from 'vs/base/common/actions'; -import { MainThreadMessageServiceShape, MainContext, MainThreadMessageOptions } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IDialogService, IPromptButton } from 'vs/platform/dialogs/common/dialogs'; -import { INotificationService, INotificationSource } from 'vs/platform/notification/common/notification'; -import { Event } from 'vs/base/common/event'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IDisposable } from 'vs/base/common/lifecycle'; +import * as nls from '../../../nls.js'; +import Severity from '../../../base/common/severity.js'; +import { IAction, toAction } from '../../../base/common/actions.js'; +import { MainThreadMessageServiceShape, MainContext, MainThreadMessageOptions } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IDialogService, IPromptButton } from '../../../platform/dialogs/common/dialogs.js'; +import { INotificationService, INotificationSource } from '../../../platform/notification/common/notification.js'; +import { Event } from '../../../base/common/event.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; @extHostNamedCustomer(MainContext.MainThreadMessageService) export class MainThreadMessageService implements MainThreadMessageServiceShape { diff --git a/src/vs/workbench/api/browser/mainThreadNotebook.ts b/src/vs/workbench/api/browser/mainThreadNotebook.ts index b50fee352..927151c9e 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebook.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebook.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ILogService } from 'vs/platform/log/common/log'; -import { NotebookDto } from 'vs/workbench/api/browser/mainThreadNotebookDto'; -import { INotebookCellStatusBarService } from 'vs/workbench/contrib/notebook/common/notebookCellStatusBarService'; -import { INotebookCellStatusBarItemProvider, INotebookContributionData, INotebookExclusiveDocumentFilter, NotebookData, NotebookExtensionDescription, TransientOptions } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { INotebookService, SimpleNotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookService'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { ExtHostContext, ExtHostNotebookShape, MainContext, MainThreadNotebookShape } from '../common/extHost.protocol'; -import { IRelativePattern } from 'vs/base/common/glob'; -import { revive } from 'vs/base/common/marshalling'; -import { INotebookFileMatchNoModel } from 'vs/workbench/contrib/search/common/searchNotebookHelpers'; -import { NotebookPriorityInfo } from 'vs/workbench/contrib/search/common/search'; -import { coalesce } from 'vs/base/common/arrays'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { DisposableStore, dispose, IDisposable } from '../../../base/common/lifecycle.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { assertType } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { NotebookDto } from './mainThreadNotebookDto.js'; +import { INotebookCellStatusBarService } from '../../contrib/notebook/common/notebookCellStatusBarService.js'; +import { INotebookCellStatusBarItemProvider, INotebookContributionData, INotebookExclusiveDocumentFilter, NotebookData, NotebookExtensionDescription, TransientOptions } from '../../contrib/notebook/common/notebookCommon.js'; +import { INotebookService, SimpleNotebookProviderInfo } from '../../contrib/notebook/common/notebookService.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; +import { ExtHostContext, ExtHostNotebookShape, MainContext, MainThreadNotebookShape } from '../common/extHost.protocol.js'; +import { IRelativePattern } from '../../../base/common/glob.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { INotebookFileMatchNoModel } from '../../contrib/search/common/searchNotebookHelpers.js'; +import { NotebookPriorityInfo } from '../../contrib/search/common/search.js'; +import { coalesce } from '../../../base/common/arrays.js'; @extHostNamedCustomer(MainContext.MainThreadNotebook) export class MainThreadNotebooks implements MainThreadNotebookShape { diff --git a/src/vs/workbench/api/browser/mainThreadNotebookDocuments.ts b/src/vs/workbench/api/browser/mainThreadNotebookDocuments.ts index 73a5b5a7d..c2d1234aa 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookDocuments.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookDocuments.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { BoundModelReferenceCollection } from 'vs/workbench/api/browser/mainThreadDocuments'; -import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel'; -import { NotebookCellsChangeType } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { ExtHostContext, ExtHostNotebookDocumentsShape, MainThreadNotebookDocumentsShape, NotebookCellDto, NotebookCellsChangedEventDto, NotebookDataDto } from '../common/extHost.protocol'; -import { NotebookDto } from 'vs/workbench/api/browser/mainThreadNotebookDto'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { DisposableStore, dispose } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { BoundModelReferenceCollection } from './mainThreadDocuments.js'; +import { NotebookTextModel } from '../../contrib/notebook/common/model/notebookTextModel.js'; +import { NotebookCellsChangeType } from '../../contrib/notebook/common/notebookCommon.js'; +import { INotebookEditorModelResolverService } from '../../contrib/notebook/common/notebookEditorModelResolverService.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { ExtHostContext, ExtHostNotebookDocumentsShape, MainThreadNotebookDocumentsShape, NotebookCellDto, NotebookCellsChangedEventDto, NotebookDataDto } from '../common/extHost.protocol.js'; +import { NotebookDto } from './mainThreadNotebookDto.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; export class MainThreadNotebookDocuments implements MainThreadNotebookDocumentsShape { diff --git a/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.ts b/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.ts index b13e8fb2d..89c8975eb 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { diffMaps, diffSets } from 'vs/base/common/collections'; -import { combinedDisposable, DisposableStore, DisposableMap } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { MainThreadNotebookDocuments } from 'vs/workbench/api/browser/mainThreadNotebookDocuments'; -import { NotebookDto } from 'vs/workbench/api/browser/mainThreadNotebookDto'; -import { MainThreadNotebookEditors } from 'vs/workbench/api/browser/mainThreadNotebookEditors'; -import { extHostCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { getNotebookEditorFromEditorPane, IActiveNotebookEditor, INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; -import { INotebookEditorService } from 'vs/workbench/contrib/notebook/browser/services/notebookEditorService'; -import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel'; -import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { ExtHostContext, ExtHostNotebookShape, INotebookDocumentsAndEditorsDelta, INotebookEditorAddData, INotebookModelAddedData, MainContext } from '../common/extHost.protocol'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { diffMaps, diffSets } from '../../../base/common/collections.js'; +import { combinedDisposable, DisposableStore, DisposableMap } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { MainThreadNotebookDocuments } from './mainThreadNotebookDocuments.js'; +import { NotebookDto } from './mainThreadNotebookDto.js'; +import { MainThreadNotebookEditors } from './mainThreadNotebookEditors.js'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { editorGroupToColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { getNotebookEditorFromEditorPane, IActiveNotebookEditor, INotebookEditor } from '../../contrib/notebook/browser/notebookBrowser.js'; +import { INotebookEditorService } from '../../contrib/notebook/browser/services/notebookEditorService.js'; +import { NotebookTextModel } from '../../contrib/notebook/common/model/notebookTextModel.js'; +import { INotebookService } from '../../contrib/notebook/common/notebookService.js'; +import { IEditorGroupsService } from '../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { ExtHostContext, ExtHostNotebookShape, INotebookDocumentsAndEditorsDelta, INotebookEditorAddData, INotebookModelAddedData, MainContext } from '../common/extHost.protocol.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; interface INotebookAndEditorDelta { removedDocuments: URI[]; @@ -239,7 +239,8 @@ export class MainThreadNotebooksAndEditors { documentUri: add.textModel.uri, selections: add.getSelections(), visibleRanges: add.visibleRanges, - viewColumn: pane && editorGroupToColumn(this._editorGroupService, pane.group) + viewColumn: pane && editorGroupToColumn(this._editorGroupService, pane.group), + viewType: add.getViewModel().viewType }; } } diff --git a/src/vs/workbench/api/browser/mainThreadNotebookDto.ts b/src/vs/workbench/api/browser/mainThreadNotebookDto.ts index 9c7f5d67f..5ba3a3b3f 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookDto.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookDto.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import * as notebookCommon from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { CellExecutionUpdateType } from 'vs/workbench/contrib/notebook/common/notebookExecutionService'; -import { ICellExecuteUpdate, ICellExecutionComplete } from 'vs/workbench/contrib/notebook/common/notebookExecutionStateService'; +import * as extHostProtocol from '../common/extHost.protocol.js'; +import * as notebookCommon from '../../contrib/notebook/common/notebookCommon.js'; +import { CellExecutionUpdateType } from '../../contrib/notebook/common/notebookExecutionService.js'; +import { ICellExecuteUpdate, ICellExecutionComplete } from '../../contrib/notebook/common/notebookExecutionStateService.js'; export namespace NotebookDto { diff --git a/src/vs/workbench/api/browser/mainThreadNotebookEditors.ts b/src/vs/workbench/api/browser/mainThreadNotebookEditors.ts index 95bf3c600..79449f391 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookEditors.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import { equals } from 'vs/base/common/objects'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { EditorActivation } from 'vs/platform/editor/common/editor'; -import { getNotebookEditorFromEditorPane, INotebookEditor, INotebookEditorOptions } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; -import { INotebookEditorService } from 'vs/workbench/contrib/notebook/browser/services/notebookEditorService'; -import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; -import { columnToEditorGroup, editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostNotebookEditorsShape, INotebookDocumentShowOptions, INotebookEditorViewColumnInfo, MainThreadNotebookEditorsShape, NotebookEditorRevealType } from '../common/extHost.protocol'; +import { DisposableStore, dispose } from '../../../base/common/lifecycle.js'; +import { equals } from '../../../base/common/objects.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { EditorActivation } from '../../../platform/editor/common/editor.js'; +import { getNotebookEditorFromEditorPane, INotebookEditor, INotebookEditorOptions } from '../../contrib/notebook/browser/notebookBrowser.js'; +import { INotebookEditorService } from '../../contrib/notebook/browser/services/notebookEditorService.js'; +import { ICellRange } from '../../contrib/notebook/common/notebookRange.js'; +import { columnToEditorGroup, editorGroupToColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { IEditorGroupsService } from '../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostNotebookEditorsShape, INotebookDocumentShowOptions, INotebookEditorViewColumnInfo, MainThreadNotebookEditorsShape, NotebookEditorRevealType } from '../common/extHost.protocol.js'; class MainThreadNotebook { diff --git a/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts b/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts index 678825ac6..8c38e1464 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { combinedDisposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { NotebookDto } from 'vs/workbench/api/browser/mainThreadNotebookDto'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; -import { INotebookEditorService } from 'vs/workbench/contrib/notebook/browser/services/notebookEditorService'; -import { INotebookCellExecution, INotebookExecution, INotebookExecutionStateService, NotebookExecutionType } from 'vs/workbench/contrib/notebook/common/notebookExecutionStateService'; -import { IKernelSourceActionProvider, INotebookKernel, INotebookKernelChangeEvent, INotebookKernelDetectionTask, INotebookKernelService, VariablesResult } from 'vs/workbench/contrib/notebook/common/notebookKernelService'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { ExtHostContext, ExtHostNotebookKernelsShape, ICellExecuteUpdateDto, ICellExecutionCompleteDto, INotebookKernelDto2, MainContext, MainThreadNotebookKernelsShape } from '../common/extHost.protocol'; -import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService'; -import { AsyncIterableObject, AsyncIterableSource } from 'vs/base/common/async'; +import { isNonEmptyArray } from '../../../base/common/arrays.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { NotebookDto } from './mainThreadNotebookDto.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { INotebookEditor } from '../../contrib/notebook/browser/notebookBrowser.js'; +import { INotebookEditorService } from '../../contrib/notebook/browser/services/notebookEditorService.js'; +import { INotebookCellExecution, INotebookExecution, INotebookExecutionStateService, NotebookExecutionType } from '../../contrib/notebook/common/notebookExecutionStateService.js'; +import { IKernelSourceActionProvider, INotebookKernel, INotebookKernelChangeEvent, INotebookKernelDetectionTask, INotebookKernelService, VariablesResult } from '../../contrib/notebook/common/notebookKernelService.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; +import { ExtHostContext, ExtHostNotebookKernelsShape, ICellExecuteUpdateDto, ICellExecutionCompleteDto, INotebookKernelDto2, MainContext, MainThreadNotebookKernelsShape } from '../common/extHost.protocol.js'; +import { INotebookService } from '../../contrib/notebook/common/notebookService.js'; +import { AsyncIterableObject, AsyncIterableSource } from '../../../base/common/async.js'; abstract class MainThreadKernel implements INotebookKernel { private readonly _onDidChange = new Emitter(); @@ -151,6 +151,16 @@ export class MainThreadNotebookKernels implements MainThreadNotebookKernelsShape this._proxy.$cellExecutionChanged(e.notebook, e.cellHandle, e.changed?.state); } })); + + this._disposables.add(this._notebookKernelService.onDidChangeSelectedNotebooks(e => { + for (const [handle, [kernel,]] of this._kernels) { + if (e.oldKernel === kernel.id) { + this._proxy.$acceptNotebookAssociation(handle, e.notebook, false); + } else if (e.newKernel === kernel.id) { + this._proxy.$acceptNotebookAssociation(handle, e.notebook, true); + } + } + })); } dispose(): void { @@ -262,16 +272,10 @@ export class MainThreadNotebookKernels implements MainThreadNotebookKernelsShape } }(data, this._languageService); - const listener = this._notebookKernelService.onDidChangeSelectedNotebooks(e => { - if (e.oldKernel === kernel.id) { - this._proxy.$acceptNotebookAssociation(handle, e.notebook, false); - } else if (e.newKernel === kernel.id) { - this._proxy.$acceptNotebookAssociation(handle, e.notebook, true); - } - }); - - const registration = this._notebookKernelService.registerKernel(kernel); - this._kernels.set(handle, [kernel, combinedDisposable(listener, registration)]); + const disposables = this._disposables.add(new DisposableStore()); + // Ensure _kernels is up to date before we register a kernel. + this._kernels.set(handle, [kernel, disposables]); + disposables.add(this._notebookKernelService.registerKernel(kernel)); } $updateKernel(handle: number, data: Partial): void { diff --git a/src/vs/workbench/api/browser/mainThreadNotebookRenderers.ts b/src/vs/workbench/api/browser/mainThreadNotebookRenderers.ts index b7c9bb85d..c0c9aef4e 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookRenderers.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookRenderers.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { ExtHostContext, ExtHostNotebookRenderersShape, MainContext, MainThreadNotebookRenderersShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { INotebookRendererMessagingService } from 'vs/workbench/contrib/notebook/common/notebookRendererMessagingService'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { ExtHostContext, ExtHostNotebookRenderersShape, MainContext, MainThreadNotebookRenderersShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { INotebookRendererMessagingService } from '../../contrib/notebook/common/notebookRendererMessagingService.js'; @extHostNamedCustomer(MainContext.MainThreadNotebookRenderers) export class MainThreadNotebookRenderers extends Disposable implements MainThreadNotebookRenderersShape { diff --git a/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.ts b/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.ts index dd1784418..13711b2a9 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IProgressStep, IProgress } from 'vs/platform/progress/common/progress'; -import { extHostCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostNotebookDocumentSaveParticipantShape } from '../common/extHost.protocol'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { raceCancellationError } from 'vs/base/common/async'; -import { IStoredFileWorkingCopySaveParticipant, IStoredFileWorkingCopySaveParticipantContext, IWorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IStoredFileWorkingCopy, IStoredFileWorkingCopyModel } from 'vs/workbench/services/workingCopy/common/storedFileWorkingCopy'; -import { NotebookFileWorkingCopyModel } from 'vs/workbench/contrib/notebook/common/notebookEditorModel'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { localize } from '../../../nls.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { IProgressStep, IProgress } from '../../../platform/progress/common/progress.js'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostNotebookDocumentSaveParticipantShape } from '../common/extHost.protocol.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { raceCancellationError } from '../../../base/common/async.js'; +import { IStoredFileWorkingCopySaveParticipant, IStoredFileWorkingCopySaveParticipantContext, IWorkingCopyFileService } from '../../services/workingCopy/common/workingCopyFileService.js'; +import { IStoredFileWorkingCopy, IStoredFileWorkingCopyModel } from '../../services/workingCopy/common/storedFileWorkingCopy.js'; +import { NotebookFileWorkingCopyModel } from '../../contrib/notebook/common/notebookEditorModel.js'; class ExtHostNotebookDocumentSaveParticipant implements IStoredFileWorkingCopySaveParticipant { diff --git a/src/vs/workbench/api/browser/mainThreadOutputService.ts b/src/vs/workbench/api/browser/mainThreadOutputService.ts index 077f09583..2fa6443b3 100644 --- a/src/vs/workbench/api/browser/mainThreadOutputService.ts +++ b/src/vs/workbench/api/browser/mainThreadOutputService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Registry } from 'vs/platform/registry/common/platform'; -import { Extensions, IOutputChannelRegistry, IOutputService, IOutputChannel, OUTPUT_VIEW_ID, OutputChannelUpdateMode } from 'vs/workbench/services/output/common/output'; -import { MainThreadOutputServiceShape, MainContext, ExtHostOutputServiceShape, ExtHostContext } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { UriComponents, URI } from 'vs/base/common/uri'; -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; -import { IViewsService } from 'vs/workbench/services/views/common/viewsService'; -import { isNumber } from 'vs/base/common/types'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { Extensions, IOutputChannelRegistry, IOutputService, IOutputChannel, OUTPUT_VIEW_ID, OutputChannelUpdateMode } from '../../services/output/common/output.js'; +import { MainThreadOutputServiceShape, MainContext, ExtHostOutputServiceShape, ExtHostContext } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { UriComponents, URI } from '../../../base/common/uri.js'; +import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { Event } from '../../../base/common/event.js'; +import { IViewsService } from '../../services/views/common/viewsService.js'; +import { isNumber } from '../../../base/common/types.js'; @extHostNamedCustomer(MainContext.MainThreadOutputService) export class MainThreadOutputService extends Disposable implements MainThreadOutputServiceShape { diff --git a/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.ts b/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.ts index 357f1a2c3..ed7d917bb 100644 --- a/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.ts +++ b/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Disposable, DisposableMap, IDisposable } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostContext, ExtHostProfileContentHandlersShape, MainContext, MainThreadProfileContentHandlersShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ISaveProfileResult, IUserDataProfileImportExportService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Disposable, DisposableMap, IDisposable } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { URI } from '../../../base/common/uri.js'; +import { ExtHostContext, ExtHostProfileContentHandlersShape, MainContext, MainThreadProfileContentHandlersShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ISaveProfileResult, IUserDataProfileImportExportService } from '../../services/userDataProfile/common/userDataProfile.js'; @extHostNamedCustomer(MainContext.MainThreadProfileContentHandlers) export class MainThreadProfileContentHandlers extends Disposable implements MainThreadProfileContentHandlersShape { diff --git a/src/vs/workbench/api/browser/mainThreadProgress.ts b/src/vs/workbench/api/browser/mainThreadProgress.ts index beec4789a..6606b0d64 100644 --- a/src/vs/workbench/api/browser/mainThreadProgress.ts +++ b/src/vs/workbench/api/browser/mainThreadProgress.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IProgress, IProgressService, IProgressStep, ProgressLocation, IProgressOptions, IProgressNotificationOptions } from 'vs/platform/progress/common/progress'; -import { MainThreadProgressShape, MainContext, ExtHostProgressShape, ExtHostContext } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { Action } from 'vs/base/common/actions'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { localize } from 'vs/nls'; +import { IProgress, IProgressService, IProgressStep, ProgressLocation, IProgressOptions, IProgressNotificationOptions } from '../../../platform/progress/common/progress.js'; +import { MainThreadProgressShape, MainContext, ExtHostProgressShape, ExtHostContext } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { Action } from '../../../base/common/actions.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { localize } from '../../../nls.js'; class ManageExtensionAction extends Action { constructor(extensionId: string, label: string, commandService: ICommandService) { diff --git a/src/vs/workbench/api/browser/mainThreadQuickDiff.ts b/src/vs/workbench/api/browser/mainThreadQuickDiff.ts index d5312097e..541de6b2b 100644 --- a/src/vs/workbench/api/browser/mainThreadQuickDiff.ts +++ b/src/vs/workbench/api/browser/mainThreadQuickDiff.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { DisposableMap, IDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtHostContext, ExtHostQuickDiffShape, IDocumentFilterDto, MainContext, MainThreadQuickDiffShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IQuickDiffService, QuickDiffProvider } from 'vs/workbench/contrib/scm/common/quickDiff'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { DisposableMap, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ExtHostContext, ExtHostQuickDiffShape, IDocumentFilterDto, MainContext, MainThreadQuickDiffShape } from '../common/extHost.protocol.js'; +import { IQuickDiffService, QuickDiffProvider } from '../../contrib/scm/common/quickDiff.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadQuickDiff) export class MainThreadQuickDiff implements MainThreadQuickDiffShape { diff --git a/src/vs/workbench/api/browser/mainThreadQuickOpen.ts b/src/vs/workbench/api/browser/mainThreadQuickOpen.ts index 7d8ca24b5..eefc335a0 100644 --- a/src/vs/workbench/api/browser/mainThreadQuickOpen.ts +++ b/src/vs/workbench/api/browser/mainThreadQuickOpen.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IPickOptions, IInputOptions, IQuickInputService, IQuickInput, IQuickPick, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { ExtHostContext, MainThreadQuickOpenShape, ExtHostQuickOpenShape, TransferQuickPickItem, MainContext, TransferQuickInput, TransferQuickInputButton, IInputBoxOptions, TransferQuickPickItemOrSeparator } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { URI } from 'vs/base/common/uri'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { IPickOptions, IInputOptions, IQuickInputService, IQuickInput, IQuickPick, IQuickPickItem } from '../../../platform/quickinput/common/quickInput.js'; +import { ExtHostContext, MainThreadQuickOpenShape, ExtHostQuickOpenShape, TransferQuickPickItem, MainContext, TransferQuickInput, TransferQuickInputButton, IInputBoxOptions, TransferQuickPickItemOrSeparator } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { URI } from '../../../base/common/uri.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; interface QuickInputSession { input: IQuickInput; diff --git a/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.ts b/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.ts index abcaa4cc7..6d3fdb822 100644 --- a/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.ts +++ b/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { extHostCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostExtensionServiceShape } from '../common/extHost.protocol'; -import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostExtensionServiceShape } from '../common/extHost.protocol.js'; +import { IRemoteAuthorityResolverService } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; @extHostCustomer export class MainThreadRemoteConnectionData extends Disposable { diff --git a/src/vs/workbench/api/browser/mainThreadSCM.ts b/src/vs/workbench/api/browser/mainThreadSCM.ts index f0feffa08..3a90525f8 100644 --- a/src/vs/workbench/api/browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/browser/mainThreadSCM.ts @@ -3,30 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Barrier } from 'vs/base/common/async'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Event, Emitter } from 'vs/base/common/event'; -import { derived, observableValue, observableValueOpts } from 'vs/base/common/observable'; -import { IDisposable, DisposableStore, combinedDisposable, dispose, Disposable } from 'vs/base/common/lifecycle'; -import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, IInputValidation, ISCMViewService, InputValidationType, ISCMActionButtonDescriptor } from 'vs/workbench/contrib/scm/common/scm'; -import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, SCMHistoryItemGroupDto, SCMHistoryItemDto } from '../common/extHost.protocol'; -import { Command } from 'vs/editor/common/languages'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { CancellationToken } from 'vs/base/common/cancellation'; -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 { ResourceTree } from 'vs/base/common/resourceTree'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { basename } from 'vs/base/common/resources'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextModelContentProvider, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { Schemas } from 'vs/base/common/network'; -import { ITextModel } from 'vs/editor/common/model'; +import { Barrier } from '../../../base/common/async.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { IObservable, observableValue, observableValueOpts, transaction } from '../../../base/common/observable.js'; +import { IDisposable, DisposableStore, combinedDisposable, dispose, Disposable } from '../../../base/common/lifecycle.js'; +import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, IInputValidation, ISCMViewService, InputValidationType, ISCMActionButtonDescriptor } from '../../contrib/scm/common/scm.js'; +import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, SCMHistoryItemDto, SCMHistoryItemRefsChangeEventDto, SCMHistoryItemRefDto } from '../common/extHost.protocol.js'; +import { Command } from '../../../editor/common/languages.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IQuickDiffService, QuickDiffProvider } from '../../contrib/scm/common/quickDiff.js'; +import { ISCMHistoryItem, ISCMHistoryItemChange, ISCMHistoryItemRef, ISCMHistoryItemRefsChangeEvent, ISCMHistoryOptions, ISCMHistoryProvider } from '../../contrib/scm/common/history.js'; +import { ResourceTree } from '../../../base/common/resourceTree.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { IWorkspaceContextService } from '../../../platform/workspace/common/workspace.js'; +import { basename } from '../../../base/common/resources.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { ITextModelContentProvider, ITextModelService } from '../../../editor/common/services/resolverService.js'; +import { Schemas } from '../../../base/common/network.js'; +import { ITextModel } from '../../../editor/common/model.js'; +import { structuralEquals } from '../../../base/common/equals.js'; +import { historyItemBaseRefColor, historyItemRefColor, historyItemRemoteRefColor } from '../../contrib/scm/browser/scmHistory.js'; +import { ColorIdentifier } from '../../../platform/theme/common/colorUtils.js'; function getIconFromIconDto(iconDto?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon): URI | { light: URI; dark: URI } | ThemeIcon | undefined { if (iconDto === undefined) { @@ -42,10 +45,19 @@ function getIconFromIconDto(iconDto?: UriComponents | { light: UriComponents; da } function toISCMHistoryItem(historyItemDto: SCMHistoryItemDto): ISCMHistoryItem { - const icon = getIconFromIconDto(historyItemDto.icon); - const labels = historyItemDto.labels?.map(l => ({ title: l.title, icon: getIconFromIconDto(l.icon) })); + const references = historyItemDto.references?.map(r => ({ + ...r, icon: getIconFromIconDto(r.icon) + })); - return { ...historyItemDto, icon, labels }; + const newLineIndex = historyItemDto.message.indexOf('\n'); + const subject = newLineIndex === -1 ? + historyItemDto.message : `${historyItemDto.message.substring(0, newLineIndex)}\u2026`; + + return { ...historyItemDto, subject, references }; +} + +function toISCMHistoryItemRef(historyItemRefDto?: SCMHistoryItemRefDto, color?: ColorIdentifier): ISCMHistoryItemRef | undefined { + return historyItemRefDto ? { ...historyItemRefDto, icon: getIconFromIconDto(historyItemRefDto.icon), color: color } : undefined; } class SCMInputBoxContentProvider extends Disposable implements ITextModelContentProvider { @@ -160,40 +172,43 @@ class MainThreadSCMResource implements ISCMResource { } class MainThreadSCMHistoryProvider implements ISCMHistoryProvider { - readonly currentHistoryItemGroupId = derived(this, reader => this.currentHistoryItemGroup.read(reader)?.id); - readonly currentHistoryItemGroupName = derived(this, reader => this.currentHistoryItemGroup.read(reader)?.name); - readonly currentHistoryItemGroupRevision = derived(this, reader => this.currentHistoryItemGroup.read(reader)?.revision); - readonly currentHistoryItemGroupRemoteId = derived(this, reader => this.currentHistoryItemGroup.read(reader)?.remote?.id); - readonly currentHistoryItemGroupRemoteRevision = derived(this, reader => this.currentHistoryItemGroup.read(reader)?.remote?.revision); - - private readonly _currentHistoryItemGroup = observableValueOpts({ owner: this, equalsFn: () => false }, undefined); - get currentHistoryItemGroup() { return this._currentHistoryItemGroup; } + private readonly _historyItemRef = observableValueOpts({ + owner: this, + equalsFn: structuralEquals + }, undefined); + get historyItemRef(): IObservable { return this._historyItemRef; } + + private readonly _historyItemRemoteRef = observableValueOpts({ + owner: this, + equalsFn: structuralEquals + }, undefined); + get historyItemRemoteRef(): IObservable { return this._historyItemRemoteRef; } + + private readonly _historyItemBaseRef = observableValueOpts({ + owner: this, + equalsFn: structuralEquals + }, undefined); + get historyItemBaseRef(): IObservable { return this._historyItemBaseRef; } + + private readonly _historyItemRefChanges = observableValue(this, { added: [], modified: [], removed: [], silent: false }); + get historyItemRefChanges(): IObservable { return this._historyItemRefChanges; } constructor(private readonly proxy: ExtHostSCMShape, private readonly handle: number) { } - 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); + async resolveHistoryItemRefsCommonAncestor(historyItemRefs: string[]): Promise { + return this.proxy.$resolveHistoryItemRefsCommonAncestor(this.handle, historyItemRefs, CancellationToken.None); } - async resolveHistoryItemGroupCommonAncestor2(historyItemGroupIds: string[]): Promise { - return this.proxy.$resolveHistoryItemGroupCommonAncestor2(this.handle, historyItemGroupIds, CancellationToken.None); + async provideHistoryItemRefs(historyItemsRefs?: string[]): Promise { + const historyItemRefs = await this.proxy.$provideHistoryItemRefs(this.handle, historyItemsRefs, CancellationToken.None); + return historyItemRefs?.map(ref => ({ ...ref, icon: getIconFromIconDto(ref.icon) })); } - async provideHistoryItems(historyItemGroupId: string, options: ISCMHistoryOptions): Promise { - const historyItems = await this.proxy.$provideHistoryItems(this.handle, historyItemGroupId, options, CancellationToken.None); + async provideHistoryItems(options: ISCMHistoryOptions): Promise { + const historyItems = await this.proxy.$provideHistoryItems(this.handle, options, CancellationToken.None); return historyItems?.map(historyItem => toISCMHistoryItem(historyItem)); } - async provideHistoryItems2(options: ISCMHistoryOptions): Promise { - const historyItems = await this.proxy.$provideHistoryItems2(this.handle, options, CancellationToken.None); - return historyItems?.map(historyItem => toISCMHistoryItem(historyItem)); - } - - async provideHistoryItemSummary(historyItemId: string, historyItemParentId: string | undefined): Promise { - const historyItem = await this.proxy.$provideHistoryItemSummary(this.handle, historyItemId, historyItemParentId, CancellationToken.None); - return historyItem ? toISCMHistoryItem(historyItem) : undefined; - } - async provideHistoryItemChanges(historyItemId: string, historyItemParentId: string | undefined): Promise { const changes = await this.proxy.$provideHistoryItemChanges(this.handle, historyItemId, historyItemParentId, CancellationToken.None); return changes?.map(change => ({ @@ -204,8 +219,20 @@ class MainThreadSCMHistoryProvider implements ISCMHistoryProvider { })); } - $onDidChangeCurrentHistoryItemGroup(historyItemGroup: ISCMHistoryItemGroup | undefined): void { - this._currentHistoryItemGroup.set(historyItemGroup, undefined); + $onDidChangeCurrentHistoryItemRefs(historyItemRef?: SCMHistoryItemRefDto, historyItemRemoteRef?: SCMHistoryItemRefDto, historyItemBaseRef?: SCMHistoryItemRefDto): void { + transaction(tx => { + this._historyItemRef.set(toISCMHistoryItemRef(historyItemRef, historyItemRefColor), tx); + this._historyItemRemoteRef.set(toISCMHistoryItemRef(historyItemRemoteRef, historyItemRemoteRefColor), tx); + this._historyItemBaseRef.set(toISCMHistoryItemRef(historyItemBaseRef, historyItemBaseRefColor), tx); + }); + } + + $onDidChangeHistoryItemRefs(historyItemRefs: SCMHistoryItemRefsChangeEventDto): void { + const added = historyItemRefs.added.map(ref => toISCMHistoryItemRef(ref)!); + const modified = historyItemRefs.modified.map(ref => toISCMHistoryItemRef(ref)!); + const removed = historyItemRefs.removed.map(ref => toISCMHistoryItemRef(ref)!); + + this._historyItemRefChanges.set({ added, modified, removed, silent: historyItemRefs.silent }, undefined); } } @@ -436,12 +463,20 @@ class MainThreadSCMProvider implements ISCMProvider, QuickDiffProvider { return result && URI.revive(result); } - $onDidChangeHistoryProviderCurrentHistoryItemGroup(currentHistoryItemGroup?: SCMHistoryItemGroupDto): void { + $onDidChangeHistoryProviderCurrentHistoryItemRefs(historyItemRef?: SCMHistoryItemRefDto, historyItemRemoteRef?: SCMHistoryItemRefDto, historyItemBaseRef?: SCMHistoryItemRefDto): void { if (!this.historyProvider.get()) { return; } - this._historyProvider.get()?.$onDidChangeCurrentHistoryItemGroup(currentHistoryItemGroup); + this._historyProvider.get()?.$onDidChangeCurrentHistoryItemRefs(historyItemRef, historyItemRemoteRef, historyItemBaseRef); + } + + $onDidChangeHistoryProviderHistoryItemRefs(historyItemRefs: SCMHistoryItemRefsChangeEventDto): void { + if (!this.historyProvider.get()) { + return; + } + + this._historyProvider.get()?.$onDidChangeHistoryItemRefs(historyItemRefs); } toJSON(): any { @@ -677,7 +712,19 @@ export class MainThreadSCM implements MainThreadSCMShape { } } - async $onDidChangeHistoryProviderCurrentHistoryItemGroup(sourceControlHandle: number, historyItemGroup: SCMHistoryItemGroupDto | undefined): Promise { + async $onDidChangeHistoryProviderCurrentHistoryItemRefs(sourceControlHandle: number, historyItemRef?: SCMHistoryItemRefDto, historyItemRemoteRef?: SCMHistoryItemRefDto, historyItemBaseRef?: SCMHistoryItemRefDto): Promise { + await this._repositoryBarriers.get(sourceControlHandle)?.wait(); + const repository = this._repositories.get(sourceControlHandle); + + if (!repository) { + return; + } + + const provider = repository.provider as MainThreadSCMProvider; + provider.$onDidChangeHistoryProviderCurrentHistoryItemRefs(historyItemRef, historyItemRemoteRef, historyItemBaseRef); + } + + async $onDidChangeHistoryProviderHistoryItemRefs(sourceControlHandle: number, historyItemRefs: SCMHistoryItemRefsChangeEventDto): Promise { await this._repositoryBarriers.get(sourceControlHandle)?.wait(); const repository = this._repositories.get(sourceControlHandle); @@ -686,6 +733,6 @@ export class MainThreadSCM implements MainThreadSCMShape { } const provider = repository.provider as MainThreadSCMProvider; - provider.$onDidChangeHistoryProviderCurrentHistoryItemGroup(historyItemGroup); + provider.$onDidChangeHistoryProviderHistoryItemRefs(historyItemRefs); } } diff --git a/src/vs/workbench/api/browser/mainThreadSaveParticipant.ts b/src/vs/workbench/api/browser/mainThreadSaveParticipant.ts index a8c110c2e..9070caa10 100644 --- a/src/vs/workbench/api/browser/mainThreadSaveParticipant.ts +++ b/src/vs/workbench/api/browser/mainThreadSaveParticipant.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { shouldSynchronizeModel } from 'vs/editor/common/model'; -import { localize } from 'vs/nls'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IProgressStep, IProgress } from 'vs/platform/progress/common/progress'; -import { extHostCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ITextFileSaveParticipant, ITextFileService, ITextFileEditorModel, ITextFileSaveParticipantContext } from 'vs/workbench/services/textfile/common/textfiles'; -import { ExtHostContext, ExtHostDocumentSaveParticipantShape } from '../common/extHost.protocol'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { raceCancellationError } from 'vs/base/common/async'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { shouldSynchronizeModel } from '../../../editor/common/model.js'; +import { localize } from '../../../nls.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { IProgressStep, IProgress } from '../../../platform/progress/common/progress.js'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ITextFileSaveParticipant, ITextFileService, ITextFileEditorModel, ITextFileSaveParticipantContext } from '../../services/textfile/common/textfiles.js'; +import { ExtHostContext, ExtHostDocumentSaveParticipantShape } from '../common/extHost.protocol.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { raceCancellationError } from '../../../base/common/async.js'; class ExtHostSaveParticipant implements ITextFileSaveParticipant { diff --git a/src/vs/workbench/api/browser/mainThreadSearch.ts b/src/vs/workbench/api/browser/mainThreadSearch.ts index 9b1af87b5..9f7772a2f 100644 --- a/src/vs/workbench/api/browser/mainThreadSearch.ts +++ b/src/vs/workbench/api/browser/mainThreadSearch.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IFileMatch, IFileQuery, IRawFileMatch2, ISearchComplete, ISearchCompleteStats, ISearchProgressItem, ISearchQuery, ISearchResultProvider, ISearchService, ITextQuery, QueryType, SearchProviderType } from 'vs/workbench/services/search/common/search'; -import { ExtHostContext, ExtHostSearchShape, MainContext, MainThreadSearchShape } from '../common/extHost.protocol'; -import { revive } from 'vs/base/common/marshalling'; -import * as Constants from 'vs/workbench/contrib/search/common/constants'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { DisposableStore, dispose, IDisposable } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IFileMatch, IFileQuery, IRawFileMatch2, ISearchComplete, ISearchCompleteStats, ISearchProgressItem, ISearchQuery, ISearchResultProvider, ISearchService, ITextQuery, QueryType, SearchProviderType } from '../../services/search/common/search.js'; +import { ExtHostContext, ExtHostSearchShape, MainContext, MainThreadSearchShape } from '../common/extHost.protocol.js'; +import { revive } from '../../../base/common/marshalling.js'; +import * as Constants from '../../contrib/search/common/constants.js'; +import { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; @extHostNamedCustomer(MainContext.MainThreadSearch) export class MainThreadSearch implements MainThreadSearchShape { @@ -110,6 +110,7 @@ class RemoteSearchProvider implements ISearchResultProvider, IDisposable { private readonly _registrations = new DisposableStore(); private readonly _searches = new Map(); + private cachedAIName: string | undefined; constructor( searchService: ISearchService, @@ -121,6 +122,13 @@ class RemoteSearchProvider implements ISearchResultProvider, IDisposable { this._registrations.add(searchService.registerSearchResultProvider(this._scheme, type, this)); } + async getAIName(): Promise { + if (this.cachedAIName === undefined) { + this.cachedAIName = await this._proxy.$getAIName(this._handle); + } + return this.cachedAIName; + } + dispose(): void { this._registrations.dispose(); } diff --git a/src/vs/workbench/api/browser/mainThreadSecretState.ts b/src/vs/workbench/api/browser/mainThreadSecretState.ts index 2c70d06f1..4fe8ac9c7 100644 --- a/src/vs/workbench/api/browser/mainThreadSecretState.ts +++ b/src/vs/workbench/api/browser/mainThreadSecretState.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostSecretStateShape, MainContext, MainThreadSecretStateShape } from '../common/extHost.protocol'; -import { ILogService } from 'vs/platform/log/common/log'; -import { SequencerByKey } from 'vs/base/common/async'; -import { ISecretStorageService } from 'vs/platform/secrets/common/secrets'; -import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostSecretStateShape, MainContext, MainThreadSecretStateShape } from '../common/extHost.protocol.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { SequencerByKey } from '../../../base/common/async.js'; +import { ISecretStorageService } from '../../../platform/secrets/common/secrets.js'; +import { IBrowserWorkbenchEnvironmentService } from '../../services/environment/browser/environmentService.js'; @extHostNamedCustomer(MainContext.MainThreadSecretState) export class MainThreadSecretState extends Disposable implements MainThreadSecretStateShape { diff --git a/src/vs/workbench/api/browser/mainThreadShare.ts b/src/vs/workbench/api/browser/mainThreadShare.ts index d517c23c9..cb63bb3fd 100644 --- a/src/vs/workbench/api/browser/mainThreadShare.ts +++ b/src/vs/workbench/api/browser/mainThreadShare.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostContext, ExtHostShareShape, IDocumentFilterDto, MainContext, MainThreadShareShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IShareProvider, IShareService, IShareableItem } from 'vs/workbench/contrib/share/common/share'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IDisposable, dispose } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { ExtHostContext, ExtHostShareShape, IDocumentFilterDto, MainContext, MainThreadShareShape } from '../common/extHost.protocol.js'; +import { IShareProvider, IShareService, IShareableItem } from '../../contrib/share/common/share.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; @extHostNamedCustomer(MainContext.MainThreadShare) export class MainThreadShare implements MainThreadShareShape { diff --git a/src/vs/workbench/api/browser/mainThreadSpeech.ts b/src/vs/workbench/api/browser/mainThreadSpeech.ts index 6dbb90337..e2e0ad577 100644 --- a/src/vs/workbench/api/browser/mainThreadSpeech.ts +++ b/src/vs/workbench/api/browser/mainThreadSpeech.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { raceCancellation } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostContext, ExtHostSpeechShape, MainContext, MainThreadSpeechShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IKeywordRecognitionEvent, ISpeechProviderMetadata, ISpeechService, ISpeechToTextEvent, ITextToSpeechEvent, TextToSpeechStatus } from 'vs/workbench/contrib/speech/common/speechService'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { raceCancellation } from '../../../base/common/async.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostContext, ExtHostSpeechShape, MainContext, MainThreadSpeechShape } from '../common/extHost.protocol.js'; +import { IKeywordRecognitionEvent, ISpeechProviderMetadata, ISpeechService, ISpeechToTextEvent, ITextToSpeechEvent, TextToSpeechStatus } from '../../contrib/speech/common/speechService.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; type SpeechToTextSession = { readonly onDidChange: Emitter; diff --git a/src/vs/workbench/api/browser/mainThreadStatusBar.ts b/src/vs/workbench/api/browser/mainThreadStatusBar.ts index 00eb17f49..4988e519f 100644 --- a/src/vs/workbench/api/browser/mainThreadStatusBar.ts +++ b/src/vs/workbench/api/browser/mainThreadStatusBar.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainThreadStatusBarShape, MainContext, ExtHostContext, StatusBarItemDto } from '../common/extHost.protocol'; -import { ThemeColor } from 'vs/base/common/themables'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { Command } from 'vs/editor/common/languages'; -import { IAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IExtensionStatusBarItemService, StatusBarUpdateKind } from 'vs/workbench/api/browser/statusBarExtensionPoint'; -import { IStatusbarEntry, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar'; +import { MainThreadStatusBarShape, MainContext, ExtHostContext, StatusBarItemDto } from '../common/extHost.protocol.js'; +import { ThemeColor } from '../../../base/common/themables.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { Command } from '../../../editor/common/languages.js'; +import { IAccessibilityInformation } from '../../../platform/accessibility/common/accessibility.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IExtensionStatusBarItemService, StatusBarUpdateKind } from './statusBarExtensionPoint.js'; +import { IStatusbarEntry, StatusbarAlignment } from '../../services/statusbar/browser/statusbar.js'; @extHostNamedCustomer(MainContext.MainThreadStatusBar) export class MainThreadStatusBar implements MainThreadStatusBarShape { diff --git a/src/vs/workbench/api/browser/mainThreadStorage.ts b/src/vs/workbench/api/browser/mainThreadStorage.ts index 1d2fa2d80..a801e9713 100644 --- a/src/vs/workbench/api/browser/mainThreadStorage.ts +++ b/src/vs/workbench/api/browser/mainThreadStorage.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; -import { MainThreadStorageShape, MainContext, ExtHostStorageShape, ExtHostContext } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { isWeb } from 'vs/base/common/platform'; -import { IExtensionIdWithVersion, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { migrateExtensionStorage } from 'vs/workbench/services/extensions/common/extensionStorageMigration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; +import { IStorageService, StorageScope } from '../../../platform/storage/common/storage.js'; +import { MainThreadStorageShape, MainContext, ExtHostStorageShape, ExtHostContext } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { IExtensionIdWithVersion, IExtensionStorageService } from '../../../platform/extensionManagement/common/extensionStorage.js'; +import { migrateExtensionStorage } from '../../services/extensions/common/extensionStorageMigration.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; @extHostNamedCustomer(MainContext.MainThreadStorage) export class MainThreadStorage implements MainThreadStorageShape { diff --git a/src/vs/workbench/api/browser/mainThreadTask.ts b/src/vs/workbench/api/browser/mainThreadTask.ts index 9c37c5979..3dc0326ef 100644 --- a/src/vs/workbench/api/browser/mainThreadTask.ts +++ b/src/vs/workbench/api/browser/mainThreadTask.ts @@ -3,37 +3,37 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../nls.js'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import * as Types from 'vs/base/common/types'; -import * as Platform from 'vs/base/common/platform'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import * as Types from '../../../base/common/types.js'; +import * as Platform from '../../../base/common/platform.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; -import { IWorkspace, IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { IWorkspace, IWorkspaceContextService, IWorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; import { ContributedTask, ConfiguringTask, KeyedTaskIdentifier, ITaskExecution, Task, ITaskEvent, TaskEventKind, IPresentationOptions, CommandOptions, ICommandConfiguration, RuntimeType, CustomTask, TaskScope, TaskSource, TaskSourceKind, IExtensionTaskSource, IRunOptions, ITaskSet, TaskGroup, TaskDefinition, PresentationOptions, RunOptions -} from 'vs/workbench/contrib/tasks/common/tasks'; +} from '../../contrib/tasks/common/tasks.js'; -import { IResolveSet, IResolvedVariables } from 'vs/workbench/contrib/tasks/common/taskSystem'; -import { ITaskService, ITaskFilter, ITaskProvider } from 'vs/workbench/contrib/tasks/common/taskService'; +import { IResolveSet, IResolvedVariables } from '../../contrib/tasks/common/taskSystem.js'; +import { ITaskService, ITaskFilter, ITaskProvider } from '../../contrib/tasks/common/taskService.js'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, MainThreadTaskShape, ExtHostTaskShape, MainContext } from 'vs/workbench/api/common/extHost.protocol'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, MainThreadTaskShape, ExtHostTaskShape, MainContext } from '../common/extHost.protocol.js'; import { ITaskDefinitionDTO, ITaskExecutionDTO, IProcessExecutionOptionsDTO, ITaskPresentationOptionsDTO, IProcessExecutionDTO, IShellExecutionDTO, IShellExecutionOptionsDTO, ICustomExecutionDTO, ITaskDTO, ITaskSourceDTO, ITaskHandleDTO, ITaskFilterDTO, ITaskProcessStartedDTO, ITaskProcessEndedDTO, ITaskSystemInfoDTO, IRunOptionsDTO, ITaskGroupDTO -} from 'vs/workbench/api/common/shared/tasks'; -import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; -import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; -import { ErrorNoTelemetry } from 'vs/base/common/errors'; +} from '../common/shared/tasks.js'; +import { IConfigurationResolverService } from '../../services/configurationResolver/common/configurationResolver.js'; +import { ConfigurationTarget } from '../../../platform/configuration/common/configuration.js'; +import { ErrorNoTelemetry } from '../../../base/common/errors.js'; namespace TaskExecutionDTO { export function from(value: ITaskExecution): ITaskExecutionDTO { diff --git a/src/vs/workbench/api/browser/mainThreadTelemetry.ts b/src/vs/workbench/api/browser/mainThreadTelemetry.ts index 1728a106f..ab72a2abd 100644 --- a/src/vs/workbench/api/browser/mainThreadTelemetry.ts +++ b/src/vs/workbench/api/browser/mainThreadTelemetry.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; -import { ITelemetryService, TelemetryLevel, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry'; -import { supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostTelemetryShape, MainContext, MainThreadTelemetryShape } from '../common/extHost.protocol'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { IProductService } from '../../../platform/product/common/productService.js'; +import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from '../../../platform/telemetry/common/gdprTypings.js'; +import { ITelemetryService, TelemetryLevel, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SETTING_ID } from '../../../platform/telemetry/common/telemetry.js'; +import { supportsTelemetry } from '../../../platform/telemetry/common/telemetryUtils.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostTelemetryShape, MainContext, MainThreadTelemetryShape } from '../common/extHost.protocol.js'; @extHostNamedCustomer(MainContext.MainThreadTelemetry) export class MainThreadTelemetry extends Disposable implements MainThreadTelemetryShape { diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 663c3fa57..b184d4908 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, Disposable, IDisposable, MutableDisposable, combinedDisposable } from 'vs/base/common/lifecycle'; -import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, TerminalLaunchConfig, ITerminalDimensionsDto, ExtHostTerminalIdentifier, TerminalQuickFix, ITerminalCommandDto } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { URI } from 'vs/base/common/uri'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProcessProperty, IProcessReadyWindowsPty, IShellLaunchConfig, IShellLaunchConfigDto, ITerminalOutputMatch, ITerminalOutputMatcher, ProcessPropertyType, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal'; -import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; -import { ITerminalEditorService, ITerminalExternalLinkProvider, ITerminalGroupService, ITerminalInstance, ITerminalLink, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; -import { TerminalProcessExtHostProxy } from 'vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy'; -import { IEnvironmentVariableService } from 'vs/workbench/contrib/terminal/common/environmentVariable'; -import { deserializeEnvironmentDescriptionMap, deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariableShared'; -import { IStartExtensionTerminalRequest, ITerminalProcessExtHostProxy, ITerminalProfileResolverService, ITerminalProfileService } from 'vs/workbench/contrib/terminal/common/terminal'; -import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { OperatingSystem, OS } from 'vs/base/common/platform'; +import { DisposableStore, Disposable, IDisposable, MutableDisposable, combinedDisposable } from '../../../base/common/lifecycle.js'; +import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, TerminalLaunchConfig, ITerminalDimensionsDto, ExtHostTerminalIdentifier, TerminalQuickFix, ITerminalCommandDto } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { URI } from '../../../base/common/uri.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IProcessProperty, IProcessReadyWindowsPty, IShellLaunchConfig, IShellLaunchConfigDto, ITerminalOutputMatch, ITerminalOutputMatcher, ProcessPropertyType, TerminalExitReason, TerminalLocation } from '../../../platform/terminal/common/terminal.js'; +import { TerminalDataBufferer } from '../../../platform/terminal/common/terminalDataBuffering.js'; +import { ITerminalEditorService, ITerminalExternalLinkProvider, ITerminalGroupService, ITerminalInstance, ITerminalLink, ITerminalService } from '../../contrib/terminal/browser/terminal.js'; +import { TerminalProcessExtHostProxy } from '../../contrib/terminal/browser/terminalProcessExtHostProxy.js'; +import { IEnvironmentVariableService } from '../../contrib/terminal/common/environmentVariable.js'; +import { deserializeEnvironmentDescriptionMap, deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from '../../../platform/terminal/common/environmentVariableShared.js'; +import { IStartExtensionTerminalRequest, ITerminalProcessExtHostProxy, ITerminalProfileResolverService, ITerminalProfileService } from '../../contrib/terminal/common/terminal.js'; +import { IRemoteAgentService } from '../../services/remote/common/remoteAgentService.js'; +import { OperatingSystem, OS } from '../../../base/common/platform.js'; import { TerminalEditorLocationOptions } from 'vscode'; -import { Promises } from 'vs/base/common/async'; -import { ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable'; -import { ITerminalLinkProviderService } from 'vs/workbench/contrib/terminalContrib/links/browser/links'; -import { ITerminalQuickFixService, ITerminalQuickFix, TerminalQuickFixType } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix'; -import { TerminalCapability } from 'vs/platform/terminal/common/capabilities/capabilities'; +import { Promises } from '../../../base/common/async.js'; +import { ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection } from '../../../platform/terminal/common/environmentVariable.js'; +import { ITerminalLinkProviderService } from '../../contrib/terminalContrib/links/browser/links.js'; +import { ITerminalQuickFixService, ITerminalQuickFix, TerminalQuickFixType } from '../../contrib/terminalContrib/quickFix/browser/quickFix.js'; +import { TerminalCapability } from '../../../platform/terminal/common/capabilities/capabilities.js'; @extHostNamedCustomer(MainContext.MainThreadTerminalService) export class MainThreadTerminalService implements MainThreadTerminalServiceShape { diff --git a/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts b/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts index 3429833aa..de804627b 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { Disposable, toDisposable, type IDisposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { TerminalCapability, type ITerminalCommand } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { ExtHostContext, MainContext, type ExtHostTerminalShellIntegrationShape, type MainThreadTerminalShellIntegrationShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { extHostNamedCustomer, type IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { TerminalShellExecutionCommandLineConfidence } from 'vs/workbench/api/common/extHostTypes'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, toDisposable, type IDisposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { TerminalCapability, type ITerminalCommand } from '../../../platform/terminal/common/capabilities/capabilities.js'; +import { ExtHostContext, MainContext, type ExtHostTerminalShellIntegrationShape, type MainThreadTerminalShellIntegrationShape } from '../common/extHost.protocol.js'; +import { ITerminalService } from '../../contrib/terminal/browser/terminal.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { extHostNamedCustomer, type IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { TerminalShellExecutionCommandLineConfidence } from '../common/extHostTypes.js'; @extHostNamedCustomer(MainContext.MainThreadTerminalShellIntegration) export class MainThreadTerminalShellIntegration extends Disposable implements MainThreadTerminalShellIntegrationShape { diff --git a/src/vs/workbench/api/browser/mainThreadTesting.ts b/src/vs/workbench/api/browser/mainThreadTesting.ts index 706feac6e..b2369b89f 100644 --- a/src/vs/workbench/api/browser/mainThreadTesting.ts +++ b/src/vs/workbench/api/browser/mainThreadTesting.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ISettableObservable, observableValue, transaction } from 'vs/base/common/observable'; -import { WellDefinedPrefixTree } from 'vs/base/common/prefixTree'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Range } from 'vs/editor/common/core/range'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { TestCoverage } from 'vs/workbench/contrib/testing/common/testCoverage'; -import { TestId } from 'vs/workbench/contrib/testing/common/testId'; -import { ITestProfileService } from 'vs/workbench/contrib/testing/common/testProfileService'; -import { LiveTestResult } from 'vs/workbench/contrib/testing/common/testResult'; -import { ITestResultService } from 'vs/workbench/contrib/testing/common/testResultService'; -import { IMainThreadTestController, ITestService } from 'vs/workbench/contrib/testing/common/testService'; -import { CoverageDetails, ExtensionRunTestsRequest, IFileCoverage, ITestItem, ITestMessage, ITestRunProfile, ITestRunTask, ResolvedTestRunRequest, TestControllerCapability, TestResultState, TestRunProfileBitset, TestsDiffOp } from 'vs/workbench/contrib/testing/common/testTypes'; -import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostTestingShape, ILocationDto, ITestControllerPatch, MainContext, MainThreadTestingShape } from '../common/extHost.protocol'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ISettableObservable, observableValue, transaction } from '../../../base/common/observable.js'; +import { WellDefinedPrefixTree } from '../../../base/common/prefixTree.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Range } from '../../../editor/common/core/range.js'; +import { IUriIdentityService } from '../../../platform/uriIdentity/common/uriIdentity.js'; +import { TestCoverage } from '../../contrib/testing/common/testCoverage.js'; +import { TestId } from '../../contrib/testing/common/testId.js'; +import { ITestProfileService } from '../../contrib/testing/common/testProfileService.js'; +import { LiveTestResult } from '../../contrib/testing/common/testResult.js'; +import { ITestResultService } from '../../contrib/testing/common/testResultService.js'; +import { IMainThreadTestController, ITestService } from '../../contrib/testing/common/testService.js'; +import { CoverageDetails, ExtensionRunTestsRequest, IFileCoverage, ITestItem, ITestMessage, ITestRunProfile, ITestRunTask, ResolvedTestRunRequest, TestControllerCapability, TestResultState, TestRunProfileBitset, TestsDiffOp } from '../../contrib/testing/common/testTypes.js'; +import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostTestingShape, ILocationDto, ITestControllerPatch, MainContext, MainThreadTestingShape } from '../common/extHost.protocol.js'; @extHostNamedCustomer(MainContext.MainThreadTesting) export class MainThreadTesting extends Disposable implements MainThreadTestingShape { diff --git a/src/vs/workbench/api/browser/mainThreadTheming.ts b/src/vs/workbench/api/browser/mainThreadTheming.ts index 083da270b..9b5bd6eee 100644 --- a/src/vs/workbench/api/browser/mainThreadTheming.ts +++ b/src/vs/workbench/api/browser/mainThreadTheming.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainContext, ExtHostThemingShape, ExtHostContext, MainThreadThemingShape } from '../common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { MainContext, ExtHostThemingShape, ExtHostContext, MainThreadThemingShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; @extHostNamedCustomer(MainContext.MainThreadTheming) export class MainThreadTheming implements MainThreadThemingShape { diff --git a/src/vs/workbench/api/browser/mainThreadTimeline.ts b/src/vs/workbench/api/browser/mainThreadTimeline.ts index 1cffecdef..a7c61df1f 100644 --- a/src/vs/workbench/api/browser/mainThreadTimeline.ts +++ b/src/vs/workbench/api/browser/mainThreadTimeline.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { ILogService } from 'vs/platform/log/common/log'; -import { MainContext, MainThreadTimelineShape, ExtHostTimelineShape, ExtHostContext } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { TimelineChangeEvent, TimelineOptions, TimelineProviderDescriptor, ITimelineService, Timeline } from 'vs/workbench/contrib/timeline/common/timeline'; -import { revive } from 'vs/base/common/marshalling'; +import { Emitter } from '../../../base/common/event.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { MainContext, MainThreadTimelineShape, ExtHostTimelineShape, ExtHostContext } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { TimelineChangeEvent, TimelineOptions, TimelineProviderDescriptor, ITimelineService, Timeline } from '../../contrib/timeline/common/timeline.js'; +import { revive } from '../../../base/common/marshalling.js'; @extHostNamedCustomer(MainContext.MainThreadTimeline) export class MainThreadTimeline implements MainThreadTimelineShape { diff --git a/src/vs/workbench/api/browser/mainThreadTreeViews.ts b/src/vs/workbench/api/browser/mainThreadTreeViews.ts index eefa3c78a..2671f5b38 100644 --- a/src/vs/workbench/api/browser/mainThreadTreeViews.ts +++ b/src/vs/workbench/api/browser/mainThreadTreeViews.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableMap, DisposableStore } from 'vs/base/common/lifecycle'; -import { ExtHostContext, MainThreadTreeViewsShape, ExtHostTreeViewsShape, MainContext, CheckboxUpdate } from 'vs/workbench/api/common/extHost.protocol'; -import { ITreeViewDataProvider, ITreeItem, ITreeView, IViewsRegistry, ITreeViewDescriptor, IRevealOptions, Extensions, ResolvableTreeItem, ITreeViewDragAndDropController, IViewBadge, NoTreeViewError } from 'vs/workbench/common/views'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { distinct } from 'vs/base/common/arrays'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { isUndefinedOrNull, isNumber } from 'vs/base/common/types'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { createStringDataTransferItem, VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { DataTransferFileCache } from 'vs/workbench/api/common/shared/dataTransferCache'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IViewsService } from 'vs/workbench/services/views/common/viewsService'; +import { Disposable, DisposableMap, DisposableStore } from '../../../base/common/lifecycle.js'; +import { ExtHostContext, MainThreadTreeViewsShape, ExtHostTreeViewsShape, MainContext, CheckboxUpdate } from '../common/extHost.protocol.js'; +import { ITreeViewDataProvider, ITreeItem, ITreeView, IViewsRegistry, ITreeViewDescriptor, IRevealOptions, Extensions, ResolvableTreeItem, ITreeViewDragAndDropController, IViewBadge, NoTreeViewError } from '../../common/views.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { distinct } from '../../../base/common/arrays.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { isUndefinedOrNull, isNumber } from '../../../base/common/types.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { createStringDataTransferItem, VSDataTransfer } from '../../../base/common/dataTransfer.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { DataTransferFileCache } from '../common/shared/dataTransferCache.js'; +import * as typeConvert from '../common/extHostTypeConverters.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IViewsService } from '../../services/views/common/viewsService.js'; @extHostNamedCustomer(MainContext.MainThreadTreeViews) export class MainThreadTreeViews extends Disposable implements MainThreadTreeViewsShape { diff --git a/src/vs/workbench/api/browser/mainThreadTunnelService.ts b/src/vs/workbench/api/browser/mainThreadTunnelService.ts index 5b8cf2637..4aa5a7c1d 100644 --- a/src/vs/workbench/api/browser/mainThreadTunnelService.ts +++ b/src/vs/workbench/api/browser/mainThreadTunnelService.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { MainThreadTunnelServiceShape, MainContext, ExtHostContext, ExtHostTunnelServiceShape, CandidatePortSource, PortAttributesSelector, TunnelDto } from 'vs/workbench/api/common/extHost.protocol'; -import { TunnelDtoConverter } from 'vs/workbench/api/common/extHostTunnelService'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { IRemoteExplorerService, PORT_AUTO_FORWARD_SETTING, PORT_AUTO_SOURCE_SETTING, PORT_AUTO_SOURCE_SETTING_HYBRID, PORT_AUTO_SOURCE_SETTING_OUTPUT } from 'vs/workbench/services/remote/common/remoteExplorerService'; -import { ITunnelProvider, ITunnelService, TunnelCreationOptions, TunnelProviderFeatures, TunnelOptions, RemoteTunnel, ProvidedPortAttributes, PortAttributesProvider, TunnelProtocol } from 'vs/platform/tunnel/common/tunnel'; -import { Disposable } from 'vs/base/common/lifecycle'; -import type { TunnelDescription } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { CandidatePort, TunnelCloseReason, TunnelSource, forwardedPortsViewEnabled, makeAddress } from 'vs/workbench/services/remote/common/tunnelModel'; +import * as nls from '../../../nls.js'; +import { MainThreadTunnelServiceShape, MainContext, ExtHostContext, ExtHostTunnelServiceShape, CandidatePortSource, PortAttributesSelector, TunnelDto } from '../common/extHost.protocol.js'; +import { TunnelDtoConverter } from '../common/extHostTunnelService.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IRemoteExplorerService, PORT_AUTO_FORWARD_SETTING, PORT_AUTO_SOURCE_SETTING, PORT_AUTO_SOURCE_SETTING_HYBRID, PORT_AUTO_SOURCE_SETTING_OUTPUT, PortsEnablement } from '../../services/remote/common/remoteExplorerService.js'; +import { ITunnelProvider, ITunnelService, TunnelCreationOptions, TunnelProviderFeatures, TunnelOptions, RemoteTunnel, ProvidedPortAttributes, PortAttributesProvider, TunnelProtocol } from '../../../platform/tunnel/common/tunnel.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import type { TunnelDescription } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { INotificationService, Severity } from '../../../platform/notification/common/notification.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IRemoteAgentService } from '../../services/remote/common/remoteAgentService.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from '../../../platform/configuration/common/configurationRegistry.js'; +import { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; +import { CandidatePort, TunnelCloseReason, TunnelSource, forwardedPortsFeaturesEnabled, makeAddress } from '../../services/remote/common/tunnelModel.js'; @extHostNamedCustomer(MainContext.MainThreadTunnelService) export class MainThreadTunnelService extends Disposable implements MainThreadTunnelServiceShape, PortAttributesProvider { @@ -50,18 +50,20 @@ export class MainThreadTunnelService extends Disposable implements MainThreadTun async $setRemoteTunnelService(processId: number): Promise { this.remoteExplorerService.namedProcesses.set(processId, 'Code Extension Host'); - if (this.remoteExplorerService.portsFeaturesEnabled) { + if (this.remoteExplorerService.portsFeaturesEnabled === PortsEnablement.AdditionalFeatures) { this._proxy.$registerCandidateFinder(this.processFindingEnabled()); } else { this._register(this.remoteExplorerService.onEnabledPortsFeatures(() => this._proxy.$registerCandidateFinder(this.processFindingEnabled()))); } this._register(this.configurationService.onDidChangeConfiguration(async (e) => { - if (e.affectsConfiguration(PORT_AUTO_FORWARD_SETTING) || e.affectsConfiguration(PORT_AUTO_SOURCE_SETTING)) { + if ((this.remoteExplorerService.portsFeaturesEnabled === PortsEnablement.AdditionalFeatures) && (e.affectsConfiguration(PORT_AUTO_FORWARD_SETTING) || e.affectsConfiguration(PORT_AUTO_SOURCE_SETTING))) { return this._proxy.$registerCandidateFinder(this.processFindingEnabled()); } })); - this._register(this.tunnelService.onAddedTunnelProvider(() => { - return this._proxy.$registerCandidateFinder(this.processFindingEnabled()); + this._register(this.tunnelService.onAddedTunnelProvider(async () => { + if (this.remoteExplorerService.portsFeaturesEnabled === PortsEnablement.AdditionalFeatures) { + return this._proxy.$registerCandidateFinder(this.processFindingEnabled()); + } })); } @@ -166,7 +168,7 @@ export class MainThreadTunnelService extends Disposable implements MainThreadTun this.remoteExplorerService.onFoundNewCandidates(candidates); } - async $setTunnelProvider(features?: TunnelProviderFeatures): Promise { + async $setTunnelProvider(features: TunnelProviderFeatures | undefined, isResolver: boolean): Promise { const tunnelProvider: ITunnelProvider = { forwardPort: (tunnelOptions: TunnelOptions, tunnelCreationOptions: TunnelCreationOptions) => { const forward = this._proxy.$forwardPort(tunnelOptions, tunnelCreationOptions); @@ -200,7 +202,9 @@ export class MainThreadTunnelService extends Disposable implements MainThreadTun } this.tunnelService.setTunnelProvider(tunnelProvider); // At this point we clearly want the ports view/features since we have a tunnel factory - this.contextKeyService.createKey(forwardedPortsViewEnabled.key, true); + if (isResolver) { + this.contextKeyService.createKey(forwardedPortsFeaturesEnabled.key, true); + } } async $setCandidateFilter(): Promise { diff --git a/src/vs/workbench/api/browser/mainThreadUriOpeners.ts b/src/vs/workbench/api/browser/mainThreadUriOpeners.ts index d44d17d5e..39fc994eb 100644 --- a/src/vs/workbench/api/browser/mainThreadUriOpeners.ts +++ b/src/vs/workbench/api/browser/mainThreadUriOpeners.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Action } from 'vs/base/common/actions'; -import { isCancellationError } from 'vs/base/common/errors'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ExtHostContext, ExtHostUriOpenersShape, MainContext, MainThreadUriOpenersShape } from 'vs/workbench/api/common/extHost.protocol'; -import { defaultExternalUriOpenerId } from 'vs/workbench/contrib/externalUriOpener/common/configuration'; -import { ContributedExternalUriOpenersStore } from 'vs/workbench/contrib/externalUriOpener/common/contributedOpeners'; -import { IExternalOpenerProvider, IExternalUriOpener, IExternalUriOpenerService } from 'vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers'; +import { Action } from '../../../base/common/actions.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { INotificationService, Severity } from '../../../platform/notification/common/notification.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { IStorageService } from '../../../platform/storage/common/storage.js'; +import { ExtHostContext, ExtHostUriOpenersShape, MainContext, MainThreadUriOpenersShape } from '../common/extHost.protocol.js'; +import { defaultExternalUriOpenerId } from '../../contrib/externalUriOpener/common/configuration.js'; +import { ContributedExternalUriOpenersStore } from '../../contrib/externalUriOpener/common/contributedOpeners.js'; +import { IExternalOpenerProvider, IExternalUriOpener, IExternalUriOpenerService } from '../../contrib/externalUriOpener/common/externalUriOpenerService.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; interface RegisteredOpenerMetadata { readonly schemes: ReadonlySet; diff --git a/src/vs/workbench/api/browser/mainThreadUrls.ts b/src/vs/workbench/api/browser/mainThreadUrls.ts index 27ea55249..bb0fa287a 100644 --- a/src/vs/workbench/api/browser/mainThreadUrls.ts +++ b/src/vs/workbench/api/browser/mainThreadUrls.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ExtHostContext, MainContext, MainThreadUrlsShape, ExtHostUrlsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers'; -import { IURLService, IOpenURLOptions } from 'vs/platform/url/common/url'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { IExtensionContributedURLHandler, IExtensionUrlHandler } from 'vs/workbench/services/extensions/browser/extensionUrlHandler'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; +import { ExtHostContext, MainContext, MainThreadUrlsShape, ExtHostUrlsShape } from '../common/extHost.protocol.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { IURLService, IOpenURLOptions } from '../../../platform/url/common/url.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { IExtensionContributedURLHandler, IExtensionUrlHandler } from '../../services/extensions/browser/extensionUrlHandler.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; class ExtensionUrlHandler implements IExtensionContributedURLHandler { diff --git a/src/vs/workbench/api/browser/mainThreadWebviewManager.ts b/src/vs/workbench/api/browser/mainThreadWebviewManager.ts index eed33b05e..406b222a7 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewManager.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewManager.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { MainThreadCustomEditors } from 'vs/workbench/api/browser/mainThreadCustomEditors'; -import { MainThreadWebviewPanels } from 'vs/workbench/api/browser/mainThreadWebviewPanels'; -import { MainThreadWebviews } from 'vs/workbench/api/browser/mainThreadWebviews'; -import { MainThreadWebviewsViews } from 'vs/workbench/api/browser/mainThreadWebviewViews'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { MainThreadCustomEditors } from './mainThreadCustomEditors.js'; +import { MainThreadWebviewPanels } from './mainThreadWebviewPanels.js'; +import { MainThreadWebviews } from './mainThreadWebviews.js'; +import { MainThreadWebviewsViews } from './mainThreadWebviewViews.js'; +import * as extHostProtocol from '../common/extHost.protocol.js'; +import { extHostCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; @extHostCustomer export class MainThreadWebviewManager extends Disposable { diff --git a/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts b/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts index 996a8a2e6..3a7ddf961 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { MainThreadWebviews, reviveWebviewContentOptions, reviveWebviewExtension } from 'vs/workbench/api/browser/mainThreadWebviews'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { ExtensionKeyedWebviewOriginStore, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; -import { WebviewInput } from 'vs/workbench/contrib/webviewPanel/browser/webviewEditorInput'; -import { WebviewIcons } from 'vs/workbench/contrib/webviewPanel/browser/webviewIconManager'; -import { IWebViewShowOptions, IWebviewWorkbenchService } from 'vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService'; -import { editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { GroupLocation, GroupsOrder, IEditorGroup, IEditorGroupsService, preferredSideBySideGroupDirection } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { ACTIVE_GROUP, IEditorService, PreferredGroup, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { Event } from '../../../base/common/event.js'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { IStorageService } from '../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { MainThreadWebviews, reviveWebviewContentOptions, reviveWebviewExtension } from './mainThreadWebviews.js'; +import * as extHostProtocol from '../common/extHost.protocol.js'; +import { DiffEditorInput } from '../../common/editor/diffEditorInput.js'; +import { EditorInput } from '../../common/editor/editorInput.js'; +import { ExtensionKeyedWebviewOriginStore, WebviewOptions } from '../../contrib/webview/browser/webview.js'; +import { WebviewInput } from '../../contrib/webviewPanel/browser/webviewEditorInput.js'; +import { WebviewIcons } from '../../contrib/webviewPanel/browser/webviewIconManager.js'; +import { IWebViewShowOptions, IWebviewWorkbenchService } from '../../contrib/webviewPanel/browser/webviewWorkbenchService.js'; +import { editorGroupToColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { GroupLocation, GroupsOrder, IEditorGroup, IEditorGroupsService, preferredSideBySideGroupDirection } from '../../services/editor/common/editorGroupsService.js'; +import { ACTIVE_GROUP, IEditorService, PreferredGroup, SIDE_GROUP } from '../../services/editor/common/editorService.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; /** * Bi-directional map between webview handles and inputs. diff --git a/src/vs/workbench/api/browser/mainThreadWebviewViews.ts b/src/vs/workbench/api/browser/mainThreadWebviewViews.ts index e6854c860..2ce367773 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewViews.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewViews.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { generateUuid } from 'vs/base/common/uuid'; -import { MainThreadWebviews, reviveWebviewExtension } from 'vs/workbench/api/browser/mainThreadWebviews'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { IViewBadge } from 'vs/workbench/common/views'; -import { IWebviewViewService, WebviewView } from 'vs/workbench/contrib/webviewView/browser/webviewViewService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { MainThreadWebviews, reviveWebviewExtension } from './mainThreadWebviews.js'; +import * as extHostProtocol from '../common/extHost.protocol.js'; +import { IViewBadge } from '../../common/views.js'; +import { IWebviewViewService, WebviewView } from '../../contrib/webviewView/browser/webviewViewService.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; export class MainThreadWebviewsViews extends Disposable implements extHostProtocol.MainThreadWebviewViewsShape { diff --git a/src/vs/workbench/api/browser/mainThreadWebviews.ts b/src/vs/workbench/api/browser/mainThreadWebviews.ts index f537e94d6..ed37c0b46 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviews.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviews.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { isWeb } from 'vs/base/common/platform'; -import { escape } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IProductService } from 'vs/platform/product/common/productService'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { deserializeWebviewMessage, serializeWebviewMessage } from 'vs/workbench/api/common/extHostWebviewMessaging'; -import { IOverlayWebview, IWebview, WebviewContentOptions, WebviewExtensionDescription } from 'vs/workbench/contrib/webview/browser/webview'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { isWeb } from '../../../base/common/platform.js'; +import { escape } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { IProductService } from '../../../platform/product/common/productService.js'; +import * as extHostProtocol from '../common/extHost.protocol.js'; +import { deserializeWebviewMessage, serializeWebviewMessage } from '../common/extHostWebviewMessaging.js'; +import { IOverlayWebview, IWebview, WebviewContentOptions, WebviewExtensionDescription } from '../../contrib/webview/browser/webview.js'; +import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; export class MainThreadWebviews extends Disposable implements extHostProtocol.MainThreadWebviewsShape { diff --git a/src/vs/workbench/api/browser/mainThreadWindow.ts b/src/vs/workbench/api/browser/mainThreadWindow.ts index f77f0b257..29760af21 100644 --- a/src/vs/workbench/api/browser/mainThreadWindow.ts +++ b/src/vs/workbench/api/browser/mainThreadWindow.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtHostContext, ExtHostWindowShape, IOpenUriOptions, MainContext, MainThreadWindowShape } from '../common/extHost.protocol'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IUserActivityService } from 'vs/workbench/services/userActivity/common/userActivityService'; +import { Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { ExtHostContext, ExtHostWindowShape, IOpenUriOptions, MainContext, MainThreadWindowShape } from '../common/extHost.protocol.js'; +import { IHostService } from '../../services/host/browser/host.js'; +import { IUserActivityService } from '../../services/userActivity/common/userActivityService.js'; @extHostNamedCustomer(MainContext.MainThreadWindow) export class MainThreadWindow implements MainThreadWindowShape { diff --git a/src/vs/workbench/api/browser/mainThreadWorkspace.ts b/src/vs/workbench/api/browser/mainThreadWorkspace.ts index 12441286d..1f2e2807b 100644 --- a/src/vs/workbench/api/browser/mainThreadWorkspace.ts +++ b/src/vs/workbench/api/browser/mainThreadWorkspace.ts @@ -3,31 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isCancellationError } from 'vs/base/common/errors'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { isNative } from 'vs/base/common/platform'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { AuthInfo, Credentials, IRequestService } from 'vs/platform/request/common/request'; -import { WorkspaceTrustRequestOptions, IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'vs/platform/workspace/common/workspaceTrust'; -import { IWorkspace, IWorkspaceContextService, WorkbenchState, isUntitledWorkspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { checkGlobFileExists } from 'vs/workbench/services/extensions/common/workspaceContains'; -import { IFileQueryBuilderOptions, ITextQueryBuilderOptions, QueryBuilder } from 'vs/workbench/services/search/common/queryBuilder'; -import { IEditorService, ISaveEditorsResult } from 'vs/workbench/services/editor/common/editorService'; -import { IFileMatch, IPatternInfo, ISearchProgressItem, ISearchService } from 'vs/workbench/services/search/common/search'; -import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing'; -import { ExtHostContext, ExtHostWorkspaceShape, ITextSearchComplete, IWorkspaceData, MainContext, MainThreadWorkspaceShape } from '../common/extHost.protocol'; -import { IEditSessionIdentityService } from 'vs/platform/workspace/common/editSessions'; -import { EditorResourceAccessor, SaveReason, SideBySideEditor } from 'vs/workbench/common/editor'; -import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; -import { ICanonicalUriService } from 'vs/platform/workspace/common/canonicalUri'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { isNative } from '../../../base/common/platform.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; +import { IFileService } from '../../../platform/files/common/files.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ILabelService } from '../../../platform/label/common/label.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { AuthInfo, Credentials, IRequestService } from '../../../platform/request/common/request.js'; +import { WorkspaceTrustRequestOptions, IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from '../../../platform/workspace/common/workspaceTrust.js'; +import { IWorkspace, IWorkspaceContextService, WorkbenchState, isUntitledWorkspace, WorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; +import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; +import { checkGlobFileExists } from '../../services/extensions/common/workspaceContains.js'; +import { IFileQueryBuilderOptions, ITextQueryBuilderOptions, QueryBuilder } from '../../services/search/common/queryBuilder.js'; +import { IEditorService, ISaveEditorsResult } from '../../services/editor/common/editorService.js'; +import { IFileMatch, IPatternInfo, ISearchProgressItem, ISearchService } from '../../services/search/common/search.js'; +import { IWorkspaceEditingService } from '../../services/workspaces/common/workspaceEditing.js'; +import { ExtHostContext, ExtHostWorkspaceShape, ITextSearchComplete, IWorkspaceData, MainContext, MainThreadWorkspaceShape } from '../common/extHost.protocol.js'; +import { IEditSessionIdentityService } from '../../../platform/workspace/common/editSessions.js'; +import { EditorResourceAccessor, SaveReason, SideBySideEditor } from '../../common/editor.js'; +import { coalesce } from '../../../base/common/arrays.js'; +import { ICanonicalUriService } from '../../../platform/workspace/common/canonicalUri.js'; +import { revive } from '../../../base/common/marshalling.js'; @extHostNamedCustomer(MainContext.MainThreadWorkspace) export class MainThreadWorkspace implements MainThreadWorkspaceShape { @@ -140,13 +141,13 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { // --- search --- - $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { const includeFolder = URI.revive(_includeFolder); const workspace = this._contextService.getWorkspace(); const query = this._queryBuilder.file( includeFolder ? [includeFolder] : workspace.folders, - options + revive(options) ); return this._searchService.fileSearch(query, token).then(result => { @@ -159,12 +160,12 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { }); } - $startTextSearch(pattern: IPatternInfo, _folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + $startTextSearch(pattern: IPatternInfo, _folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { const folder = URI.revive(_folder); const workspace = this._contextService.getWorkspace(); const folders = folder ? [folder] : workspace.folders.map(folder => folder.uri); - const query = this._queryBuilder.text(pattern, folders, options); + const query = this._queryBuilder.text(pattern, folders, revive(options)); query._reason = 'startTextSearch'; const onProgress = (p: ISearchProgressItem) => { @@ -204,7 +205,7 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { force: !options.saveAs }); - return firstOrDefault(this._saveResultToUris(result)); + return this._saveResultToUris(result).at(0); } private _saveResultToUris(result: ISaveEditorsResult): URI[] { diff --git a/src/vs/workbench/api/browser/statusBarExtensionPoint.ts b/src/vs/workbench/api/browser/statusBarExtensionPoint.ts index 99dd3279f..bae2812c5 100644 --- a/src/vs/workbench/api/browser/statusBarExtensionPoint.ts +++ b/src/vs/workbench/api/browser/statusBarExtensionPoint.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry'; -import { IStatusbarService, StatusbarAlignment as MainThreadStatusBarAlignment, IStatusbarEntryAccessor, IStatusbarEntry, StatusbarAlignment, IStatusbarEntryPriority, StatusbarEntryKind } from 'vs/workbench/services/statusbar/browser/statusbar'; -import { ThemeColor } from 'vs/base/common/themables'; -import { Command } from 'vs/editor/common/languages'; -import { IAccessibilityInformation, isAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { getCodiconAriaLabel } from 'vs/base/common/iconLabels'; -import { hash } from 'vs/base/common/hash'; -import { Event, Emitter } from 'vs/base/common/event'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { Iterable } from 'vs/base/common/iterator'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { asStatusBarItemIdentifier } from 'vs/workbench/api/common/extHostTypes'; -import { STATUS_BAR_ERROR_ITEM_BACKGROUND, STATUS_BAR_WARNING_ITEM_BACKGROUND } from 'vs/workbench/common/theme'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { ExtensionsRegistry } from '../../services/extensions/common/extensionsRegistry.js'; +import { IStatusbarService, StatusbarAlignment as MainThreadStatusBarAlignment, IStatusbarEntryAccessor, IStatusbarEntry, StatusbarAlignment, IStatusbarEntryPriority, StatusbarEntryKind } from '../../services/statusbar/browser/statusbar.js'; +import { ThemeColor } from '../../../base/common/themables.js'; +import { Command } from '../../../editor/common/languages.js'; +import { IAccessibilityInformation, isAccessibilityInformation } from '../../../platform/accessibility/common/accessibility.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { getCodiconAriaLabel } from '../../../base/common/iconLabels.js'; +import { hash } from '../../../base/common/hash.js'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { asStatusBarItemIdentifier } from '../common/extHostTypes.js'; +import { STATUS_BAR_ERROR_ITEM_BACKGROUND, STATUS_BAR_WARNING_ITEM_BACKGROUND } from '../../common/theme.js'; // --- service diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts index b28bd289c..f5a0648d5 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -3,33 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import * as resources from 'vs/base/common/resources'; -import { isFalsyOrWhitespace } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ExtensionIdentifier, ExtensionIdentifierSet, IExtensionDescription, IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Extensions as ViewletExtensions, PaneCompositeRegistry } from 'vs/workbench/browser/panecomposite'; -import { CustomTreeView, TreeViewPane } from 'vs/workbench/browser/parts/views/treeView'; -import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer'; -import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions'; -import { Extensions as ViewContainerExtensions, ICustomViewDescriptor, IViewContainersRegistry, IViewDescriptor, IViewsRegistry, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views'; -import { VIEWLET_ID as DEBUG } from 'vs/workbench/contrib/debug/common/debug'; -import { VIEWLET_ID as EXPLORER } from 'vs/workbench/contrib/files/common/files'; -import { VIEWLET_ID as REMOTE } from 'vs/workbench/contrib/remote/browser/remoteExplorer'; -import { VIEWLET_ID as SCM } from 'vs/workbench/contrib/scm/common/scm'; -import { WebviewViewPane } from 'vs/workbench/contrib/webviewView/browser/webviewViewPane'; -import { isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { ExtensionMessageCollector, ExtensionsRegistry, IExtensionPoint, IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtensionFeatureTableRenderer, IRenderedData, ITableData, IRowData, IExtensionFeaturesRegistry, Extensions as ExtensionFeaturesRegistryExtensions } from 'vs/workbench/services/extensionManagement/common/extensionFeatures'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { MarkdownString } from 'vs/base/common/htmlContent'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import * as resources from '../../../base/common/resources.js'; +import { isFalsyOrWhitespace } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { ExtensionIdentifier, ExtensionIdentifierSet, IExtensionDescription, IExtensionManifest } from '../../../platform/extensions/common/extensions.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { Extensions as ViewletExtensions, PaneCompositeRegistry } from '../../browser/panecomposite.js'; +import { CustomTreeView, TreeViewPane } from '../../browser/parts/views/treeView.js'; +import { ViewPaneContainer } from '../../browser/parts/views/viewPaneContainer.js'; +import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from '../../common/contributions.js'; +import { Extensions as ViewContainerExtensions, ICustomViewDescriptor, IViewContainersRegistry, IViewDescriptor, IViewsRegistry, ViewContainer, ViewContainerLocation } from '../../common/views.js'; +import { VIEWLET_ID as DEBUG } from '../../contrib/debug/common/debug.js'; +import { VIEWLET_ID as EXPLORER } from '../../contrib/files/common/files.js'; +import { VIEWLET_ID as REMOTE } from '../../contrib/remote/browser/remoteExplorer.js'; +import { VIEWLET_ID as SCM } from '../../contrib/scm/common/scm.js'; +import { WebviewViewPane } from '../../contrib/webviewView/browser/webviewViewPane.js'; +import { isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { ExtensionMessageCollector, ExtensionsRegistry, IExtensionPoint, IExtensionPointUser } from '../../services/extensions/common/extensionsRegistry.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtensionFeatureTableRenderer, IRenderedData, ITableData, IRowData, IExtensionFeaturesRegistry, Extensions as ExtensionFeaturesRegistryExtensions } from '../../services/extensionManagement/common/extensionFeatures.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { MarkdownString } from '../../../base/common/htmlContent.js'; export interface IUserFriendlyViewsContainerDescriptor { id: string; diff --git a/src/vs/workbench/api/common/configurationExtensionPoint.ts b/src/vs/workbench/api/common/configurationExtensionPoint.ts index 8b7c408c7..e45e56777 100644 --- a/src/vs/workbench/api/common/configurationExtensionPoint.ts +++ b/src/vs/workbench/api/common/configurationExtensionPoint.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import * as objects from 'vs/base/common/objects'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { ExtensionsRegistry, IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; -import { IConfigurationNode, IConfigurationRegistry, Extensions, validateProperty, ConfigurationScope, OVERRIDE_PROPERTY_REGEX, IConfigurationDefaults, configurationDefaultsSchemaId, IConfigurationDelta, getDefaultValue, getAllConfigurationProperties, parseScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; -import { workspaceSettingsSchemaId, launchSchemaId, tasksSchemaId } from 'vs/workbench/services/configuration/common/configuration'; -import { isObject, isUndefined } from 'vs/base/common/types'; -import { ExtensionIdentifierMap, IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { IStringDictionary } from 'vs/base/common/collections'; -import { Extensions as ExtensionFeaturesExtensions, IExtensionFeatureTableRenderer, IExtensionFeaturesRegistry, IRenderedData, IRowData, ITableData } from 'vs/workbench/services/extensionManagement/common/extensionFeatures'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { MarkdownString } from 'vs/base/common/htmlContent'; +import * as nls from '../../../nls.js'; +import * as objects from '../../../base/common/objects.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { IJSONSchema } from '../../../base/common/jsonSchema.js'; +import { ExtensionsRegistry, IExtensionPointUser } from '../../services/extensions/common/extensionsRegistry.js'; +import { IConfigurationNode, IConfigurationRegistry, Extensions, validateProperty, ConfigurationScope, OVERRIDE_PROPERTY_REGEX, IConfigurationDefaults, configurationDefaultsSchemaId, IConfigurationDelta, getDefaultValue, getAllConfigurationProperties, parseScope } from '../../../platform/configuration/common/configurationRegistry.js'; +import { IJSONContributionRegistry, Extensions as JSONExtensions } from '../../../platform/jsonschemas/common/jsonContributionRegistry.js'; +import { workspaceSettingsSchemaId, launchSchemaId, tasksSchemaId } from '../../services/configuration/common/configuration.js'; +import { isObject, isUndefined } from '../../../base/common/types.js'; +import { ExtensionIdentifierMap, IExtensionManifest } from '../../../platform/extensions/common/extensions.js'; +import { IStringDictionary } from '../../../base/common/collections.js'; +import { Extensions as ExtensionFeaturesExtensions, IExtensionFeatureTableRenderer, IExtensionFeaturesRegistry, IRenderedData, IRowData, ITableData } from '../../services/extensionManagement/common/extensionFeatures.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { MarkdownString } from '../../../base/common/htmlContent.js'; const jsonRegistry = Registry.as(JSONExtensions.JSONContribution); const configurationRegistry = Registry.as(Extensions.Configuration); diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 6da7aadcb..045c9bc12 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -3,111 +3,112 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import * as errors from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { combinedDisposable } from 'vs/base/common/lifecycle'; -import { Schemas, matchesScheme } from 'vs/base/common/network'; -import Severity from 'vs/base/common/severity'; -import { URI } from 'vs/base/common/uri'; -import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; -import { score, targetsNotebooks } from 'vs/editor/common/languageSelector'; -import * as languageConfiguration from 'vs/editor/common/languages/languageConfiguration'; -import { OverviewRulerLane } from 'vs/editor/common/model'; -import { ExtensionIdentifierSet, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import * as files from 'vs/platform/files/common/files'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService, ILoggerService, LogLevel } from 'vs/platform/log/common/log'; -import { getRemoteName } from 'vs/platform/remote/common/remoteHosts'; -import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUtils'; -import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions'; -import { CandidatePortSource, ExtHostContext, ExtHostLogLevelServiceShape, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostRelatedInformation } from 'vs/workbench/api/common/extHostAiRelatedInformation'; -import { ExtHostApiCommands } from 'vs/workbench/api/common/extHostApiCommands'; -import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { IExtHostAuthentication } from 'vs/workbench/api/common/extHostAuthentication'; -import { ExtHostBulkEdits } from 'vs/workbench/api/common/extHostBulkEdits'; -import { ExtHostChatAgents2 } from 'vs/workbench/api/common/extHostChatAgents2'; -import { ExtHostChatVariables } from 'vs/workbench/api/common/extHostChatVariables'; -import { ExtHostClipboard } from 'vs/workbench/api/common/extHostClipboard'; -import { ExtHostEditorInsets } from 'vs/workbench/api/common/extHostCodeInsets'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { createExtHostComments } from 'vs/workbench/api/common/extHostComments'; -import { ExtHostConfigProvider, IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { ExtHostCustomEditors } from 'vs/workbench/api/common/extHostCustomEditors'; -import { IExtHostDebugService } from 'vs/workbench/api/common/extHostDebugService'; -import { IExtHostDecorations } from 'vs/workbench/api/common/extHostDecorations'; -import { ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics'; -import { ExtHostDialogs } from 'vs/workbench/api/common/extHostDialogs'; -import { ExtHostDocumentContentProvider } from 'vs/workbench/api/common/extHostDocumentContentProviders'; -import { ExtHostDocumentSaveParticipant } from 'vs/workbench/api/common/extHostDocumentSaveParticipant'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs'; -import { ExtHostEmbeddings } from 'vs/workbench/api/common/extHostEmbedding'; -import { ExtHostAiEmbeddingVector } from 'vs/workbench/api/common/extHostEmbeddingVector'; -import { Extension, IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { ExtHostFileSystem } from 'vs/workbench/api/common/extHostFileSystem'; -import { IExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { ExtHostFileSystemEventService, FileSystemWatcherCreateOptions } from 'vs/workbench/api/common/extHostFileSystemEventService'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ExtHostInteractive } from 'vs/workbench/api/common/extHostInteractive'; -import { ExtHostLabelService } from 'vs/workbench/api/common/extHostLabelService'; -import { ExtHostLanguageFeatures } from 'vs/workbench/api/common/extHostLanguageFeatures'; -import { ExtHostLanguageModelTools } from 'vs/workbench/api/common/extHostLanguageModelTools'; -import { IExtHostLanguageModels } from 'vs/workbench/api/common/extHostLanguageModels'; -import { ExtHostLanguages } from 'vs/workbench/api/common/extHostLanguages'; -import { IExtHostLocalizationService } from 'vs/workbench/api/common/extHostLocalizationService'; -import { IExtHostManagedSockets } from 'vs/workbench/api/common/extHostManagedSockets'; -import { ExtHostMessageService } from 'vs/workbench/api/common/extHostMessageService'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { ExtHostNotebookDocumentSaveParticipant } from 'vs/workbench/api/common/extHostNotebookDocumentSaveParticipant'; -import { ExtHostNotebookDocuments } from 'vs/workbench/api/common/extHostNotebookDocuments'; -import { ExtHostNotebookEditors } from 'vs/workbench/api/common/extHostNotebookEditors'; -import { ExtHostNotebookKernels } from 'vs/workbench/api/common/extHostNotebookKernels'; -import { ExtHostNotebookRenderers } from 'vs/workbench/api/common/extHostNotebookRenderers'; -import { IExtHostOutputService } from 'vs/workbench/api/common/extHostOutput'; -import { ExtHostProfileContentHandlers } from 'vs/workbench/api/common/extHostProfileContentHandler'; -import { ExtHostProgress } from 'vs/workbench/api/common/extHostProgress'; -import { ExtHostQuickDiff } from 'vs/workbench/api/common/extHostQuickDiff'; -import { createExtHostQuickOpen } from 'vs/workbench/api/common/extHostQuickOpen'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostSCM } from 'vs/workbench/api/common/extHostSCM'; -import { IExtHostSearch } from 'vs/workbench/api/common/extHostSearch'; -import { IExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState'; -import { ExtHostShare } from 'vs/workbench/api/common/extHostShare'; -import { ExtHostSpeech } from 'vs/workbench/api/common/extHostSpeech'; -import { ExtHostStatusBar } from 'vs/workbench/api/common/extHostStatusBar'; -import { IExtHostStorage } from 'vs/workbench/api/common/extHostStorage'; -import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths'; -import { IExtHostTask } from 'vs/workbench/api/common/extHostTask'; -import { ExtHostTelemetryLogger, IExtHostTelemetry, isNewAppInstall } from 'vs/workbench/api/common/extHostTelemetry'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { IExtHostTerminalShellIntegration } from 'vs/workbench/api/common/extHostTerminalShellIntegration'; -import { IExtHostTesting } from 'vs/workbench/api/common/extHostTesting'; -import { ExtHostEditors } from 'vs/workbench/api/common/extHostTextEditors'; -import { ExtHostTheming } from 'vs/workbench/api/common/extHostTheming'; -import { ExtHostTimeline } from 'vs/workbench/api/common/extHostTimeline'; -import { ExtHostTreeViews } from 'vs/workbench/api/common/extHostTreeViews'; -import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { ExtHostUriOpeners } from 'vs/workbench/api/common/extHostUriOpener'; -import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { ExtHostUrls } from 'vs/workbench/api/common/extHostUrls'; -import { ExtHostWebviews } from 'vs/workbench/api/common/extHostWebview'; -import { ExtHostWebviewPanels } from 'vs/workbench/api/common/extHostWebviewPanels'; -import { ExtHostWebviewViews } from 'vs/workbench/api/common/extHostWebviewView'; -import { IExtHostWindow } from 'vs/workbench/api/common/extHostWindow'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { DebugConfigurationProviderTriggerKind } from 'vs/workbench/contrib/debug/common/debug'; -import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; -import { UIKind } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { checkProposedApiEnabled, isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { ProxyIdentifier } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { ExcludeSettingOptions, TextSearchCompleteMessageType, TextSearchContextNew, TextSearchMatchNew } from 'vs/workbench/services/search/common/searchExtTypes'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import * as errors from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { combinedDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas, matchesScheme } from '../../../base/common/network.js'; +import Severity from '../../../base/common/severity.js'; +import { URI } from '../../../base/common/uri.js'; +import { TextEditorCursorStyle } from '../../../editor/common/config/editorOptions.js'; +import { score, targetsNotebooks } from '../../../editor/common/languageSelector.js'; +import * as languageConfiguration from '../../../editor/common/languages/languageConfiguration.js'; +import { OverviewRulerLane } from '../../../editor/common/model.js'; +import { ExtensionIdentifierSet, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import * as files from '../../../platform/files/common/files.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService, ILoggerService, LogLevel } from '../../../platform/log/common/log.js'; +import { getRemoteName } from '../../../platform/remote/common/remoteHosts.js'; +import { TelemetryTrustedValue } from '../../../platform/telemetry/common/telemetryUtils.js'; +import { EditSessionIdentityMatch } from '../../../platform/workspace/common/editSessions.js'; +import { CandidatePortSource, ExtHostContext, ExtHostLogLevelServiceShape, MainContext } from './extHost.protocol.js'; +import { ExtHostRelatedInformation } from './extHostAiRelatedInformation.js'; +import { ExtHostApiCommands } from './extHostApiCommands.js'; +import { IExtHostApiDeprecationService } from './extHostApiDeprecationService.js'; +import { IExtHostAuthentication } from './extHostAuthentication.js'; +import { ExtHostBulkEdits } from './extHostBulkEdits.js'; +import { ExtHostChatAgents2 } from './extHostChatAgents2.js'; +import { ExtHostChatVariables } from './extHostChatVariables.js'; +import { ExtHostClipboard } from './extHostClipboard.js'; +import { ExtHostEditorInsets } from './extHostCodeInsets.js'; +import { IExtHostCommands } from './extHostCommands.js'; +import { createExtHostComments } from './extHostComments.js'; +import { ExtHostConfigProvider, IExtHostConfiguration } from './extHostConfiguration.js'; +import { ExtHostCustomEditors } from './extHostCustomEditors.js'; +import { IExtHostDebugService } from './extHostDebugService.js'; +import { IExtHostDecorations } from './extHostDecorations.js'; +import { ExtHostDiagnostics } from './extHostDiagnostics.js'; +import { ExtHostDialogs } from './extHostDialogs.js'; +import { ExtHostDocumentContentProvider } from './extHostDocumentContentProviders.js'; +import { ExtHostDocumentSaveParticipant } from './extHostDocumentSaveParticipant.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { IExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { IExtHostEditorTabs } from './extHostEditorTabs.js'; +import { ExtHostEmbeddings } from './extHostEmbedding.js'; +import { ExtHostAiEmbeddingVector } from './extHostEmbeddingVector.js'; +import { Extension, IExtHostExtensionService } from './extHostExtensionService.js'; +import { ExtHostFileSystem } from './extHostFileSystem.js'; +import { IExtHostConsumerFileSystem } from './extHostFileSystemConsumer.js'; +import { ExtHostFileSystemEventService, FileSystemWatcherCreateOptions } from './extHostFileSystemEventService.js'; +import { IExtHostFileSystemInfo } from './extHostFileSystemInfo.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { ExtHostInteractive } from './extHostInteractive.js'; +import { ExtHostLabelService } from './extHostLabelService.js'; +import { ExtHostLanguageFeatures } from './extHostLanguageFeatures.js'; +import { ExtHostLanguageModelTools } from './extHostLanguageModelTools.js'; +import { IExtHostLanguageModels } from './extHostLanguageModels.js'; +import { ExtHostLanguages } from './extHostLanguages.js'; +import { IExtHostLocalizationService } from './extHostLocalizationService.js'; +import { IExtHostManagedSockets } from './extHostManagedSockets.js'; +import { ExtHostMessageService } from './extHostMessageService.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; +import { ExtHostNotebookDocumentSaveParticipant } from './extHostNotebookDocumentSaveParticipant.js'; +import { ExtHostNotebookDocuments } from './extHostNotebookDocuments.js'; +import { ExtHostNotebookEditors } from './extHostNotebookEditors.js'; +import { ExtHostNotebookKernels } from './extHostNotebookKernels.js'; +import { ExtHostNotebookRenderers } from './extHostNotebookRenderers.js'; +import { IExtHostOutputService } from './extHostOutput.js'; +import { ExtHostProfileContentHandlers } from './extHostProfileContentHandler.js'; +import { ExtHostProgress } from './extHostProgress.js'; +import { ExtHostQuickDiff } from './extHostQuickDiff.js'; +import { createExtHostQuickOpen } from './extHostQuickOpen.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ExtHostSCM } from './extHostSCM.js'; +import { IExtHostSearch } from './extHostSearch.js'; +import { IExtHostSecretState } from './extHostSecretState.js'; +import { ExtHostShare } from './extHostShare.js'; +import { ExtHostSpeech } from './extHostSpeech.js'; +import { ExtHostStatusBar } from './extHostStatusBar.js'; +import { IExtHostStorage } from './extHostStorage.js'; +import { IExtensionStoragePaths } from './extHostStoragePaths.js'; +import { IExtHostTask } from './extHostTask.js'; +import { ExtHostTelemetryLogger, IExtHostTelemetry, isNewAppInstall } from './extHostTelemetry.js'; +import { IExtHostTerminalService } from './extHostTerminalService.js'; +import { IExtHostTerminalShellIntegration } from './extHostTerminalShellIntegration.js'; +import { IExtHostTesting } from './extHostTesting.js'; +import { ExtHostEditors } from './extHostTextEditors.js'; +import { ExtHostTheming } from './extHostTheming.js'; +import { ExtHostTimeline } from './extHostTimeline.js'; +import { ExtHostTreeViews } from './extHostTreeViews.js'; +import { IExtHostTunnelService } from './extHostTunnelService.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import * as extHostTypes from './extHostTypes.js'; +import { ExtHostUriOpeners } from './extHostUriOpener.js'; +import { IURITransformerService } from './extHostUriTransformerService.js'; +import { ExtHostUrls } from './extHostUrls.js'; +import { ExtHostWebviews } from './extHostWebview.js'; +import { ExtHostWebviewPanels } from './extHostWebviewPanels.js'; +import { ExtHostWebviewViews } from './extHostWebviewView.js'; +import { IExtHostWindow } from './extHostWindow.js'; +import { IExtHostWorkspace } from './extHostWorkspace.js'; +import { DebugConfigurationProviderTriggerKind } from '../../contrib/debug/common/debug.js'; +import { ExtensionDescriptionRegistry } from '../../services/extensions/common/extensionDescriptionRegistry.js'; +import { UIKind } from '../../services/extensions/common/extensionHostProtocol.js'; +import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { ProxyIdentifier } from '../../services/extensions/common/proxyIdentifier.js'; +import { ExcludeSettingOptions, TextSearchCompleteMessageType, TextSearchContextNew, TextSearchMatchNew } from '../../services/search/common/searchExtTypes.js'; import type * as vscode from 'vscode'; +import { ExtHostCodeMapper } from './extHostCodeMapper.js'; export interface IExtensionRegistries { mine: ExtensionDescriptionRegistry; @@ -191,6 +192,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I const extHostDiagnostics = rpcProtocol.set(ExtHostContext.ExtHostDiagnostics, new ExtHostDiagnostics(rpcProtocol, extHostLogService, extHostFileSystemInfo, extHostDocumentsAndEditors)); const extHostLanguages = rpcProtocol.set(ExtHostContext.ExtHostLanguages, new ExtHostLanguages(rpcProtocol, extHostDocuments, extHostCommands.converter, uriTransformer)); const extHostLanguageFeatures = rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, new ExtHostLanguageFeatures(rpcProtocol, uriTransformer, extHostDocuments, extHostCommands, extHostDiagnostics, extHostLogService, extHostApiDeprecation, extHostTelemetry)); + const extHostCodeMapper = rpcProtocol.set(ExtHostContext.ExtHostCodeMapper, new ExtHostCodeMapper(rpcProtocol)); const extHostFileSystem = rpcProtocol.set(ExtHostContext.ExtHostFileSystem, new ExtHostFileSystem(rpcProtocol, extHostLanguageFeatures)); const extHostFileSystemEvent = rpcProtocol.set(ExtHostContext.ExtHostFileSystemEventService, new ExtHostFileSystemEventService(rpcProtocol, extHostLogService, extHostDocumentsAndEditors)); const extHostQuickOpen = rpcProtocol.set(ExtHostContext.ExtHostQuickOpen, createExtHostQuickOpen(rpcProtocol, extHostWorkspace, extHostCommands)); @@ -210,7 +212,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I const extHostUriOpeners = rpcProtocol.set(ExtHostContext.ExtHostUriOpeners, new ExtHostUriOpeners(rpcProtocol)); const extHostProfileContentHandlers = rpcProtocol.set(ExtHostContext.ExtHostProfileContentHandlers, new ExtHostProfileContentHandlers(rpcProtocol)); rpcProtocol.set(ExtHostContext.ExtHostInteractive, new ExtHostInteractive(rpcProtocol, extHostNotebook, extHostDocumentsAndEditors, extHostCommands, extHostLogService)); - const extHostChatAgents2 = rpcProtocol.set(ExtHostContext.ExtHostChatAgents2, new ExtHostChatAgents2(rpcProtocol, extHostLogService, extHostCommands, extHostDocuments)); + const extHostChatAgents2 = rpcProtocol.set(ExtHostContext.ExtHostChatAgents2, new ExtHostChatAgents2(rpcProtocol, extHostLogService, extHostCommands, extHostDocuments, extHostLanguageModels)); const extHostChatVariables = rpcProtocol.set(ExtHostContext.ExtHostChatVariables, new ExtHostChatVariables(rpcProtocol)); const extHostLanguageModelTools = rpcProtocol.set(ExtHostContext.ExtHostLanguageModelTools, new ExtHostLanguageModelTools(rpcProtocol)); const extHostAiRelatedInformation = rpcProtocol.set(ExtHostContext.ExtHostAiRelatedInformation, new ExtHostRelatedInformation(rpcProtocol)); @@ -300,7 +302,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I return !!(await extHostAuthentication.getSession(extension, providerId, scopes, { silent: true } as any)); }, get onDidChangeSessions(): vscode.Event { - return _asExtensionEvent(extHostAuthentication.onDidChangeSessions); + return _asExtensionEvent(extHostAuthentication.getExtensionScopedSessionsEvent(extension.identifier.value)); }, registerAuthenticationProvider(id: string, label: string, provider: vscode.AuthenticationProvider, options?: vscode.AuthenticationProviderOptions): vscode.Disposable { return extHostAuthentication.registerAuthenticationProvider(id, label, provider, options); @@ -551,13 +553,11 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I return extHostLanguageFeatures.registerCodeLensProvider(extension, checkSelector(selector), provider); }, - - // VOID added this (I think will need to add this back when add ctrl+K) + // Void added this (I think will need to add this back when add ctrl+K) // registerVoidCtrlKProvider(selector: vscode.DocumentSelector, provider: vscode.CodeLensProvider): vscode.Disposable { // return extHostLanguageFeatures.registerCodeLensProvider(extension, checkSelector(selector), provider); // }, - registerDefinitionProvider(selector: vscode.DocumentSelector, provider: vscode.DefinitionProvider): vscode.Disposable { return extHostLanguageFeatures.registerDefinitionProvider(extension, checkSelector(selector), provider); }, @@ -994,7 +994,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I findTextInFilesNew: (query: vscode.TextSearchQueryNew, options?: vscode.FindTextInFilesOptionsNew, token?: vscode.CancellationToken): vscode.FindTextInFilesResponse => { checkProposedApiEnabled(extension, 'findTextInFilesNew'); checkProposedApiEnabled(extension, 'textSearchProviderNew'); - return extHostWorkspace.findTextInFilesNew(query, extension.identifier, options || {}, token); + return extHostWorkspace.findTextInFilesNew(query, options, extension.identifier, token); }, save: (uri) => { return extHostWorkspace.save(uri); @@ -1011,22 +1011,22 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I createFileSystemWatcher: (pattern, optionsOrIgnoreCreate, ignoreChange?, ignoreDelete?): vscode.FileSystemWatcher => { let options: FileSystemWatcherCreateOptions | undefined = undefined; - if (typeof optionsOrIgnoreCreate === 'boolean') { + if (optionsOrIgnoreCreate && typeof optionsOrIgnoreCreate !== 'boolean') { + checkProposedApiEnabled(extension, 'createFileSystemWatcher'); + options = { + ...optionsOrIgnoreCreate, + correlate: true + }; + } else { options = { ignoreCreateEvents: Boolean(optionsOrIgnoreCreate), ignoreChangeEvents: Boolean(ignoreChange), ignoreDeleteEvents: Boolean(ignoreDelete), correlate: false }; - } else if (optionsOrIgnoreCreate) { - checkProposedApiEnabled(extension, 'createFileSystemWatcher'); - options = { - ...optionsOrIgnoreCreate, - correlate: true - }; } - return extHostFileSystemEvent.createFileSystemWatcher(extHostWorkspace, extension, pattern, options); + return extHostFileSystemEvent.createFileSystemWatcher(extHostWorkspace, configProvider, extension, pattern, options); }, get textDocuments() { return extHostDocuments.getAllDocumentData().map(data => data.document); @@ -1447,6 +1447,10 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I checkProposedApiEnabled(extension, 'mappedEditsProvider'); return extHostLanguageFeatures.registerMappedEditsProvider(extension, selector, provider); }, + registerMappedEditsProvider2(provider: vscode.MappedEditsProvider2) { + checkProposedApiEnabled(extension, 'mappedEditsProvider'); + return extHostCodeMapper.registerMappedEditsProvider(extension, provider); + }, createChatParticipant(id: string, handler: vscode.ChatExtendedRequestHandler) { return extHostChatAgents2.createChatAgent(extension, id, handler); }, @@ -1759,6 +1763,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I ChatResponseReferencePart: extHostTypes.ChatResponseReferencePart, ChatResponseReferencePart2: extHostTypes.ChatResponseReferencePart, ChatResponseCodeCitationPart: extHostTypes.ChatResponseCodeCitationPart, + ChatResponseCodeblockUriPart: extHostTypes.ChatResponseCodeblockUriPart, ChatResponseWarningPart: extHostTypes.ChatResponseWarningPart, ChatResponseTextEditPart: extHostTypes.ChatResponseTextEditPart, ChatResponseMarkdownWithVulnerabilitiesPart: extHostTypes.ChatResponseMarkdownWithVulnerabilitiesPart, diff --git a/src/vs/workbench/api/common/extHost.common.services.ts b/src/vs/workbench/api/common/extHost.common.services.ts index 0427ebe7b..76bff4015 100644 --- a/src/vs/workbench/api/common/extHost.common.services.ts +++ b/src/vs/workbench/api/common/extHost.common.services.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IExtHostOutputService, ExtHostOutputService } from 'vs/workbench/api/common/extHostOutput'; -import { IExtHostWorkspace, ExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { IExtHostDecorations, ExtHostDecorations } from 'vs/workbench/api/common/extHostDecorations'; -import { IExtHostConfiguration, ExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { IExtHostCommands, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { IExtHostDocumentsAndEditors, ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostTerminalService, WorkerExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { IExtHostTask, WorkerExtHostTask } from 'vs/workbench/api/common/extHostTask'; -import { IExtHostDebugService, WorkerExtHostDebugService } from 'vs/workbench/api/common/extHostDebugService'; -import { IExtHostSearch, ExtHostSearch } from 'vs/workbench/api/common/extHostSearch'; -import { IExtHostStorage, ExtHostStorage } from 'vs/workbench/api/common/extHostStorage'; -import { IExtHostTunnelService, ExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService'; -import { IExtHostApiDeprecationService, ExtHostApiDeprecationService, } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { IExtHostWindow, ExtHostWindow } from 'vs/workbench/api/common/extHostWindow'; -import { IExtHostConsumerFileSystem, ExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { IExtHostFileSystemInfo, ExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { IExtHostSecretState, ExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState'; -import { ExtHostTelemetry, IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ExtHostEditorTabs, IExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs'; -import { ExtHostLoggerService } from 'vs/workbench/api/common/extHostLoggerService'; -import { ILoggerService } from 'vs/platform/log/common/log'; -import { ExtHostVariableResolverProviderService, IExtHostVariableResolverProvider } from 'vs/workbench/api/common/extHostVariableResolverService'; -import { ExtHostLocalizationService, IExtHostLocalizationService } from 'vs/workbench/api/common/extHostLocalizationService'; -import { ExtHostManagedSockets, IExtHostManagedSockets } from 'vs/workbench/api/common/extHostManagedSockets'; -import { ExtHostAuthentication, IExtHostAuthentication } from 'vs/workbench/api/common/extHostAuthentication'; -import { ExtHostLanguageModels, IExtHostLanguageModels } from 'vs/workbench/api/common/extHostLanguageModels'; -import { IExtHostTerminalShellIntegration, ExtHostTerminalShellIntegration } from 'vs/workbench/api/common/extHostTerminalShellIntegration'; -import { ExtHostTesting, IExtHostTesting } from 'vs/workbench/api/common/extHostTesting'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { IExtHostOutputService, ExtHostOutputService } from './extHostOutput.js'; +import { IExtHostWorkspace, ExtHostWorkspace } from './extHostWorkspace.js'; +import { IExtHostDecorations, ExtHostDecorations } from './extHostDecorations.js'; +import { IExtHostConfiguration, ExtHostConfiguration } from './extHostConfiguration.js'; +import { IExtHostCommands, ExtHostCommands } from './extHostCommands.js'; +import { IExtHostDocumentsAndEditors, ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { IExtHostTerminalService, WorkerExtHostTerminalService } from './extHostTerminalService.js'; +import { IExtHostTask, WorkerExtHostTask } from './extHostTask.js'; +import { IExtHostDebugService, WorkerExtHostDebugService } from './extHostDebugService.js'; +import { IExtHostSearch, ExtHostSearch } from './extHostSearch.js'; +import { IExtHostStorage, ExtHostStorage } from './extHostStorage.js'; +import { IExtHostTunnelService, ExtHostTunnelService } from './extHostTunnelService.js'; +import { IExtHostApiDeprecationService, ExtHostApiDeprecationService, } from './extHostApiDeprecationService.js'; +import { IExtHostWindow, ExtHostWindow } from './extHostWindow.js'; +import { IExtHostConsumerFileSystem, ExtHostConsumerFileSystem } from './extHostFileSystemConsumer.js'; +import { IExtHostFileSystemInfo, ExtHostFileSystemInfo } from './extHostFileSystemInfo.js'; +import { IExtHostSecretState, ExtHostSecretState } from './extHostSecretState.js'; +import { ExtHostTelemetry, IExtHostTelemetry } from './extHostTelemetry.js'; +import { ExtHostEditorTabs, IExtHostEditorTabs } from './extHostEditorTabs.js'; +import { ExtHostLoggerService } from './extHostLoggerService.js'; +import { ILoggerService } from '../../../platform/log/common/log.js'; +import { ExtHostVariableResolverProviderService, IExtHostVariableResolverProvider } from './extHostVariableResolverService.js'; +import { ExtHostLocalizationService, IExtHostLocalizationService } from './extHostLocalizationService.js'; +import { ExtHostManagedSockets, IExtHostManagedSockets } from './extHostManagedSockets.js'; +import { ExtHostAuthentication, IExtHostAuthentication } from './extHostAuthentication.js'; +import { ExtHostLanguageModels, IExtHostLanguageModels } from './extHostLanguageModels.js'; +import { IExtHostTerminalShellIntegration, ExtHostTerminalShellIntegration } from './extHostTerminalShellIntegration.js'; +import { ExtHostTesting, IExtHostTesting } from './extHostTesting.js'; registerSingleton(IExtHostLocalizationService, ExtHostLocalizationService, InstantiationType.Delayed); registerSingleton(ILoggerService, ExtHostLoggerService, InstantiationType.Delayed); diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 6732f0ce9..4900f545f 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -3,87 +3,88 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IRemoteConsoleLog } from 'vs/base/common/console'; -import { SerializedError } from 'vs/base/common/errors'; -import { IRelativePattern } from 'vs/base/common/glob'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import * as performance from 'vs/base/common/performance'; -import Severity from 'vs/base/common/severity'; -import { ThemeColor, ThemeIcon } from 'vs/base/common/themables'; -import { URI, UriComponents, UriDto } from 'vs/base/common/uri'; -import { RenderLineNumbersType, TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IChange } from 'vs/editor/common/diff/legacyLinesDiffComputer'; -import * as editorCommon from 'vs/editor/common/editorCommon'; -import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -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 { IAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { ConfigurationTarget, IConfigurationChange, IConfigurationData, IConfigurationOverrides } from 'vs/platform/configuration/common/configuration'; -import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { IExtensionIdWithVersion } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import * as files from 'vs/platform/files/common/files'; -import { ResourceLabelFormatter } from 'vs/platform/label/common/label'; -import { ILoggerOptions, ILoggerResource, LogLevel } from 'vs/platform/log/common/log'; -import { IMarkerData } from 'vs/platform/markers/common/markers'; -import { IProgressOptions, IProgressStep } from 'vs/platform/progress/common/progress'; -import * as quickInput from 'vs/platform/quickinput/common/quickInput'; -import { IRemoteConnectionData, TunnelDescription } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { AuthInfo, Credentials } from 'vs/platform/request/common/request'; -import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; -import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable'; -import { ICreateContributedTerminalProfileOptions, IProcessProperty, IProcessReadyWindowsPty, IShellLaunchConfigDto, ITerminalEnvironment, ITerminalLaunchError, ITerminalProfile, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal'; -import { ProvidedPortAttributes, TunnelCreationOptions, TunnelOptions, TunnelPrivacyId, TunnelProviderFeatures } from 'vs/platform/tunnel/common/tunnel'; -import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions'; -import { WorkspaceTrustRequestOptions } from 'vs/platform/workspace/common/workspaceTrust'; -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 { ChatAgentLocation, IChatAgentMetadata, IChatAgentRequest, IChatAgentResult } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { IChatProgressResponseContent } from 'vs/workbench/contrib/chat/common/chatModel'; -import { IChatFollowup, IChatProgress, IChatResponseErrorDetails, IChatTask, IChatTaskDto, IChatUserActionEvent, IChatVoteAction } from 'vs/workbench/contrib/chat/common/chatService'; -import { IChatRequestVariableValue, IChatVariableData, IChatVariableResolverProgress } from 'vs/workbench/contrib/chat/common/chatVariables'; -import { IChatMessage, IChatResponseFragment, ILanguageModelChatMetadata, ILanguageModelChatSelector, ILanguageModelsChangeEvent } from 'vs/workbench/contrib/chat/common/languageModels'; -import { IToolData, IToolInvocation, IToolResult } from 'vs/workbench/contrib/chat/common/languageModelToolsService'; -import { DebugConfigurationProviderTriggerKind, IAdapterDescriptor, IConfig, IDebugSessionReplMode, IDebugTestRunReference, IDebugVisualization, IDebugVisualizationContext, IDebugVisualizationTreeItem, MainThreadDebugVisualization } from 'vs/workbench/contrib/debug/common/debug'; -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'; -import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; -import { InputValidationType } from 'vs/workbench/contrib/scm/common/scm'; -import { IWorkspaceSymbol, NotebookPriorityInfo } from 'vs/workbench/contrib/search/common/search'; -import { IRawClosedNotebookFileMatch } from 'vs/workbench/contrib/search/common/searchNotebookHelpers'; -import { IKeywordRecognitionEvent, ISpeechProviderMetadata, ISpeechToTextEvent, ITextToSpeechEvent } from 'vs/workbench/contrib/speech/common/speechService'; -import { CoverageDetails, ExtensionRunTestsRequest, ICallProfileRunHandler, IFileCoverage, ISerializedTestResults, IStartControllerTests, ITestItem, ITestMessage, ITestRunProfile, ITestRunTask, ResolvedTestRunRequest, TestControllerCapability, TestMessageFollowupRequest, TestMessageFollowupResponse, 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 { AuthenticationSession, AuthenticationSessionAccount, AuthenticationSessionsChangeEvent, IAuthenticationCreateSessionOptions, IAuthenticationProviderSessionOptions } 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'; -import { ActivationKind, ExtensionActivationReason, MissingExtensionDependency } from 'vs/workbench/services/extensions/common/extensions'; -import { Dto, IRPCProtocol, SerializableObjectWithBuffers, createProxyIdentifier } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { ILanguageStatus } from 'vs/workbench/services/languageStatus/common/languageStatusService'; -import { OutputChannelUpdateMode } from 'vs/workbench/services/output/common/output'; -import { CandidatePort } from 'vs/workbench/services/remote/common/tunnelModel'; -import { IFileQueryBuilderOptions, ITextQueryBuilderOptions } from 'vs/workbench/services/search/common/queryBuilder'; -import * as search from 'vs/workbench/services/search/common/search'; -import { TextSearchCompleteMessage } from 'vs/workbench/services/search/common/searchExtTypes'; -import { ISaveProfileResult } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; -import type { TerminalShellExecutionCommandLineConfidence } from 'vscode'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IRemoteConsoleLog } from '../../../base/common/console.js'; +import { SerializedError } from '../../../base/common/errors.js'; +import { IRelativePattern } from '../../../base/common/glob.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import * as performance from '../../../base/common/performance.js'; +import Severity from '../../../base/common/severity.js'; +import { ThemeColor, ThemeIcon } from '../../../base/common/themables.js'; +import { URI, UriComponents, UriDto } from '../../../base/common/uri.js'; +import { RenderLineNumbersType, TextEditorCursorStyle } from '../../../editor/common/config/editorOptions.js'; +import { ISingleEditOperation } from '../../../editor/common/core/editOperation.js'; +import { IPosition } from '../../../editor/common/core/position.js'; +import { IRange } from '../../../editor/common/core/range.js'; +import { ISelection, Selection } from '../../../editor/common/core/selection.js'; +import { IChange } from '../../../editor/common/diff/legacyLinesDiffComputer.js'; +import * as editorCommon from '../../../editor/common/editorCommon.js'; +import { StandardTokenType } from '../../../editor/common/encodedTokenAttributes.js'; +import * as languages from '../../../editor/common/languages.js'; +import { CharacterPair, CommentRule, EnterAction } from '../../../editor/common/languages/languageConfiguration.js'; +import { EndOfLineSequence } from '../../../editor/common/model.js'; +import { IModelChangedEvent } from '../../../editor/common/model/mirrorTextModel.js'; +import { IAccessibilityInformation } from '../../../platform/accessibility/common/accessibility.js'; +import { ILocalizedString } from '../../../platform/action/common/action.js'; +import { ConfigurationTarget, IConfigurationChange, IConfigurationData, IConfigurationOverrides } from '../../../platform/configuration/common/configuration.js'; +import { ConfigurationScope } from '../../../platform/configuration/common/configurationRegistry.js'; +import { IExtensionIdWithVersion } from '../../../platform/extensionManagement/common/extensionStorage.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import * as files from '../../../platform/files/common/files.js'; +import { ResourceLabelFormatter } from '../../../platform/label/common/label.js'; +import { ILoggerOptions, ILoggerResource, LogLevel } from '../../../platform/log/common/log.js'; +import { IMarkerData } from '../../../platform/markers/common/markers.js'; +import { IProgressOptions, IProgressStep } from '../../../platform/progress/common/progress.js'; +import * as quickInput from '../../../platform/quickinput/common/quickInput.js'; +import { IRemoteConnectionData, TunnelDescription } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { AuthInfo, Credentials } from '../../../platform/request/common/request.js'; +import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from '../../../platform/telemetry/common/gdprTypings.js'; +import { TelemetryLevel } from '../../../platform/telemetry/common/telemetry.js'; +import { ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection } from '../../../platform/terminal/common/environmentVariable.js'; +import { ICreateContributedTerminalProfileOptions, IProcessProperty, IProcessReadyWindowsPty, IShellLaunchConfigDto, ITerminalEnvironment, ITerminalLaunchError, ITerminalProfile, TerminalExitReason, TerminalLocation } from '../../../platform/terminal/common/terminal.js'; +import { ProvidedPortAttributes, TunnelCreationOptions, TunnelOptions, TunnelPrivacyId, TunnelProviderFeatures } from '../../../platform/tunnel/common/tunnel.js'; +import { EditSessionIdentityMatch } from '../../../platform/workspace/common/editSessions.js'; +import { WorkspaceTrustRequestOptions } from '../../../platform/workspace/common/workspaceTrust.js'; +import { SaveReason } from '../../common/editor.js'; +import { IRevealOptions, ITreeItem, IViewBadge } from '../../common/views.js'; +import { CallHierarchyItem } from '../../contrib/callHierarchy/common/callHierarchy.js'; +import { ChatAgentLocation, IChatAgentMetadata, IChatAgentRequest, IChatAgentResult, IChatWelcomeMessageContent } from '../../contrib/chat/common/chatAgents.js'; +import { ICodeMapperRequest, ICodeMapperResult } from '../../contrib/chat/common/chatCodeMapperService.js'; +import { IChatProgressHistoryResponseContent } from '../../contrib/chat/common/chatModel.js'; +import { IChatFollowup, IChatProgress, IChatResponseErrorDetails, IChatTask, IChatTaskDto, IChatUserActionEvent, IChatVoteAction } from '../../contrib/chat/common/chatService.js'; +import { IChatRequestVariableValue, IChatVariableData, IChatVariableResolverProgress } from '../../contrib/chat/common/chatVariables.js'; +import { IChatMessage, IChatResponseFragment, ILanguageModelChatMetadata, ILanguageModelChatSelector, ILanguageModelsChangeEvent } from '../../contrib/chat/common/languageModels.js'; +import { IToolConfirmationMessages, IToolData, IToolInvocation, IToolResult } from '../../contrib/chat/common/languageModelToolsService.js'; +import { DebugConfigurationProviderTriggerKind, IAdapterDescriptor, IConfig, IDebugSessionReplMode, IDebugTestRunReference, IDebugVisualization, IDebugVisualizationContext, IDebugVisualizationTreeItem, MainThreadDebugVisualization } from '../../contrib/debug/common/debug.js'; +import * as notebookCommon from '../../contrib/notebook/common/notebookCommon.js'; +import { CellExecutionUpdateType } from '../../contrib/notebook/common/notebookExecutionService.js'; +import { ICellExecutionComplete, ICellExecutionStateUpdate } from '../../contrib/notebook/common/notebookExecutionStateService.js'; +import { ICellRange } from '../../contrib/notebook/common/notebookRange.js'; +import { InputValidationType } from '../../contrib/scm/common/scm.js'; +import { IWorkspaceSymbol, NotebookPriorityInfo } from '../../contrib/search/common/search.js'; +import { IRawClosedNotebookFileMatch } from '../../contrib/search/common/searchNotebookHelpers.js'; +import { IKeywordRecognitionEvent, ISpeechProviderMetadata, ISpeechToTextEvent, ITextToSpeechEvent } from '../../contrib/speech/common/speechService.js'; +import { CoverageDetails, ExtensionRunTestsRequest, ICallProfileRunHandler, IFileCoverage, ISerializedTestResults, IStartControllerTests, ITestItem, ITestMessage, ITestRunProfile, ITestRunTask, ResolvedTestRunRequest, TestControllerCapability, TestMessageFollowupRequest, TestMessageFollowupResponse, TestResultState, TestsDiffOp } from '../../contrib/testing/common/testTypes.js'; +import { Timeline, TimelineChangeEvent, TimelineOptions, TimelineProviderDescriptor } from '../../contrib/timeline/common/timeline.js'; +import { TypeHierarchyItem } from '../../contrib/typeHierarchy/common/typeHierarchy.js'; +import { RelatedInformationResult, RelatedInformationType } from '../../services/aiRelatedInformation/common/aiRelatedInformation.js'; +import { AuthenticationSession, AuthenticationSessionAccount, AuthenticationSessionsChangeEvent, IAuthenticationCreateSessionOptions, IAuthenticationProviderSessionOptions } from '../../services/authentication/common/authentication.js'; +import { EditorGroupColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { IExtensionDescriptionDelta, IStaticWorkspaceData } from '../../services/extensions/common/extensionHostProtocol.js'; +import { IResolveAuthorityResult } from '../../services/extensions/common/extensionHostProxy.js'; +import { ActivationKind, ExtensionActivationReason, MissingExtensionDependency } from '../../services/extensions/common/extensions.js'; +import { Dto, IRPCProtocol, SerializableObjectWithBuffers, createProxyIdentifier } from '../../services/extensions/common/proxyIdentifier.js'; +import { ILanguageStatus } from '../../services/languageStatus/common/languageStatusService.js'; +import { OutputChannelUpdateMode } from '../../services/output/common/output.js'; +import { CandidatePort } from '../../services/remote/common/tunnelModel.js'; +import { IFileQueryBuilderOptions, ITextQueryBuilderOptions } from '../../services/search/common/queryBuilder.js'; +import * as search from '../../services/search/common/search.js'; +import { TextSearchCompleteMessage } from '../../services/search/common/searchExtTypes.js'; +import { ISaveProfileResult } from '../../services/userDataProfile/common/userDataProfile.js'; +import { TerminalShellExecutionCommandLineConfidence } from './extHostTypes.js'; +import * as tasks from './shared/tasks.js'; export interface IWorkspaceData extends IStaticWorkspaceData { folders: { uri: UriComponents; name: string; index: number }[]; @@ -381,8 +382,29 @@ export interface IDocumentContextItemDto { readonly ranges: IRange[]; } +export interface IConversationItemDto { + readonly type: 'request' | 'response'; + readonly message: string; + readonly references?: IDocumentContextItemDto[]; +} + export interface IMappedEditsContextDto { documents: IDocumentContextItemDto[][]; + conversation?: IConversationItemDto[]; +} + +export interface ICodeBlockDto { + code: string; + resource: UriComponents; +} + +export interface IMappedEditsRequestDto { + readonly codeBlocks: ICodeBlockDto[]; + readonly conversation?: IConversationItemDto[]; +} + +export interface IMappedEditsResultDto { + readonly errorMessage?: string; } export interface ISignatureHelpProviderMetadataDto { @@ -1257,6 +1279,19 @@ export interface MainThreadChatAgentsShape2 extends IDisposable { $transferActiveChatSession(toWorkspace: UriComponents): void; } +export interface ICodeMapperTextEdit { + uri: URI; + edits: languages.TextEdit[]; +} + +export type ICodeMapperProgressDto = Dto; + +export interface MainThreadCodeMapperShape extends IDisposable { + $registerCodeMapperProvider(handle: number): void; + $unregisterCodeMapperProvider(handle: number): void; + $handleProgress(requestId: string, data: ICodeMapperProgressDto): Promise; +} + export interface IChatAgentCompletionItem { id: string; fullName?: string; @@ -1270,7 +1305,7 @@ export interface IChatAgentCompletionItem { } export type IChatContentProgressDto = - | Dto> + | Dto> | IChatTaskDto; export type IChatAgentHistoryEntryDto = { @@ -1285,7 +1320,7 @@ export interface ExtHostChatAgentsShape2 { $acceptFeedback(handle: number, result: IChatAgentResult, voteAction: IChatVoteAction): void; $acceptAction(handle: number, result: IChatAgentResult, action: IChatUserActionEvent): void; $invokeCompletionProvider(handle: number, query: string, token: CancellationToken): Promise; - $provideWelcomeMessage(handle: number, location: ChatAgentLocation, token: CancellationToken): Promise<(string | IMarkdownString)[] | undefined>; + $provideWelcomeMessage(handle: number, token: CancellationToken): Promise; $provideChatTitle(handle: number, context: IChatAgentHistoryEntryDto[], token: CancellationToken): Promise; $provideSampleQuestions(handle: number, location: ChatAgentLocation, token: CancellationToken): Promise; $releaseSession(sessionId: string): void; @@ -1294,7 +1329,7 @@ export interface ExtHostChatAgentsShape2 { export interface IChatParticipantMetadata { participant: string; command?: string; - disambiguation: { categoryName: string; description: string; examples: string[] }[]; + disambiguation: { category: string; description: string; examples: string[] }[]; } export interface IChatParticipantDetectionResult { @@ -1331,6 +1366,9 @@ export interface ExtHostLanguageModelToolsShape { $onDidChangeTools(tools: IToolDataDto[]): void; $invokeTool(dto: IToolInvocation, token: CancellationToken): Promise; $countTokensForInvocation(callId: string, input: string, token: CancellationToken): Promise; + + $provideToolConfirmationMessages(toolId: string, participantName: string, parameters: any, token: CancellationToken): Promise; + $provideToolInvocationMessage(toolId: string, parameters: any, token: CancellationToken): Promise; } export interface MainThreadUrlsShape extends IDisposable { @@ -1535,30 +1573,35 @@ export type SCMRawResourceSplices = [ SCMRawResourceSplice[] ]; -export interface SCMHistoryItemGroupDto { +export interface SCMHistoryItemRefDto { readonly id: string; readonly name: string; readonly revision?: string; - readonly base?: Omit, 'remote'>; - readonly remote?: Omit, 'remote'>; + readonly category?: string; + readonly description?: string; + readonly icon?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon; +} + +export interface SCMHistoryItemRefsChangeEventDto { + readonly added: readonly SCMHistoryItemRefDto[]; + readonly modified: readonly SCMHistoryItemRefDto[]; + readonly removed: readonly SCMHistoryItemRefDto[]; + readonly silent: boolean; } export interface SCMHistoryItemDto { readonly id: string; readonly parentIds: string[]; readonly message: string; + readonly displayId?: string; readonly author?: string; - readonly icon?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon; readonly timestamp?: number; readonly statistics?: { readonly files: number; readonly insertions: number; readonly deletions: number; }; - readonly labels?: { - readonly title: string; - readonly icon?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon; - }[]; + readonly references?: SCMHistoryItemRefDto[]; } export interface SCMHistoryItemChangeDto { @@ -1587,7 +1630,8 @@ export interface MainThreadSCMShape extends IDisposable { $showValidationMessage(sourceControlHandle: number, message: string | IMarkdownString, type: InputValidationType): Promise; $setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): Promise; - $onDidChangeHistoryProviderCurrentHistoryItemGroup(sourceControlHandle: number, historyItemGroup: SCMHistoryItemGroupDto | undefined): Promise; + $onDidChangeHistoryProviderCurrentHistoryItemRefs(sourceControlHandle: number, historyItemRef?: SCMHistoryItemRefDto, historyItemRemoteRef?: SCMHistoryItemRefDto, historyItemBaseRef?: SCMHistoryItemRefDto): Promise; + $onDidChangeHistoryProviderHistoryItemRefs(sourceControlHandle: number, historyItemRefs: SCMHistoryItemRefsChangeEventDto): Promise; } export interface MainThreadQuickDiffShape extends IDisposable { @@ -1668,7 +1712,7 @@ export interface MainThreadTunnelServiceShape extends IDisposable { $openTunnel(tunnelOptions: TunnelOptions, source: string | undefined): Promise; $closeTunnel(remote: { host: string; port: number }): Promise; $getTunnels(): Promise; - $setTunnelProvider(features?: TunnelProviderFeatures): Promise; + $setTunnelProvider(features: TunnelProviderFeatures | undefined, enablePortsView: boolean): Promise; $setRemoteTunnelService(processId: number): Promise; $setCandidateFilter(): Promise; $onFoundNewCandidates(candidates: CandidatePort[]): Promise; @@ -1709,6 +1753,14 @@ export interface ICommandMetadataDto { readonly returns?: string; } +export interface ICodeMapperRequestDto extends Dto { + requestId: string; +} + +export interface ExtHostCodeMapperShape { + $mapCode(handle: number, request: ICodeMapperRequestDto, token: CancellationToken): Promise; +} + export interface ExtHostCommandsShape { $executeContributedCommand(id: string, ...args: any[]): Promise; $getContributedCommandMetadata(): Promise<{ [id: string]: string | ICommandMetadataDto }>; @@ -1857,7 +1909,7 @@ export interface ExtHostAuthenticationShape { $getSessions(id: string, scopes: string[] | undefined, options: IAuthenticationProviderSessionOptions): Promise>; $createSession(id: string, scopes: string[], options: IAuthenticationCreateSessionOptions): Promise; $removeSession(id: string, sessionId: string): Promise; - $onDidChangeAuthenticationSessions(id: string, label: string): Promise; + $onDidChangeAuthenticationSessions(id: string, label: string, extensionIdFilter?: string[]): Promise; } export interface ExtHostAiRelatedInformationShape { @@ -1885,6 +1937,7 @@ export interface ExtHostSecretStateShape { export interface ExtHostSearchShape { $enableExtensionHostSearch(): void; + $getAIName(handle: number): Promise; $provideFileSearchResults(handle: number, session: number, query: search.IRawQuery, token: CancellationToken): Promise; $provideAITextSearchResults(handle: number, session: number, query: search.IRawAITextQuery, token: CancellationToken): Promise; $provideTextSearchResults(handle: number, session: number, query: search.IRawTextQuery, token: CancellationToken): Promise; @@ -2214,7 +2267,7 @@ export interface ExtHostLanguageFeaturesShape { $resolveCompletionItem(handle: number, id: ChainedCacheId, token: CancellationToken): Promise; $releaseCompletionItems(handle: number, id: number): void; $provideInlineCompletions(handle: number, resource: UriComponents, position: IPosition, context: languages.InlineCompletionContext, token: CancellationToken): Promise; - $provideInlineEdits(handle: number, resource: UriComponents, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise; + $provideInlineEditsForRange(handle: number, resource: UriComponents, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise; $handleInlineCompletionDidShow(handle: number, pid: number, idx: number, updatedInsertText: string): void; $handleInlineCompletionPartialAccept(handle: number, pid: number, idx: number, acceptedCharacters: number, info: languages.PartialAcceptInfo): void; $freeInlineCompletionsList(handle: number, pid: number): void; @@ -2351,12 +2404,10 @@ export interface ExtHostSCMShape { $executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number, preserveFocus: boolean): Promise; $validateInput(sourceControlHandle: number, value: string, cursorPosition: number): Promise<[string | IMarkdownString, number] | undefined>; $setSelectedSourceControl(selectedSourceControlHandle: number | undefined): Promise; - $provideHistoryItems(sourceControlHandle: number, historyItemGroupId: string, options: any, token: CancellationToken): Promise; - $provideHistoryItems2(sourceControlHandle: number, options: any, token: CancellationToken): Promise; - $provideHistoryItemSummary(sourceControlHandle: number, historyItemId: string, historyItemParentId: string | undefined, token: CancellationToken): Promise; + $provideHistoryItemRefs(sourceControlHandle: number, historyItemRefs: string[] | undefined, token: CancellationToken): Promise; + $provideHistoryItems(sourceControlHandle: number, options: any, token: CancellationToken): Promise; $provideHistoryItemChanges(sourceControlHandle: number, historyItemId: string, historyItemParentId: string | undefined, token: CancellationToken): Promise; - $resolveHistoryItemGroupCommonAncestor(sourceControlHandle: number, historyItemGroupId1: string, historyItemGroupId2: string | undefined, token: CancellationToken): Promise<{ id: string; ahead: number; behind: number } | undefined>; - $resolveHistoryItemGroupCommonAncestor2(sourceControlHandle: number, historyItemGroupIds: string[], token: CancellationToken): Promise; + $resolveHistoryItemRefsCommonAncestor(sourceControlHandle: number, historyItemRefs: string[], token: CancellationToken): Promise; } export interface ExtHostQuickDiffShape { @@ -2564,6 +2615,7 @@ export interface INotebookEditorAddData { selections: ICellRange[]; visibleRanges: ICellRange[]; viewColumn?: number; + viewType: string; } export interface INotebookDocumentsAndEditorsDelta { @@ -2867,6 +2919,7 @@ export const MainContext = { MainThreadLanguageModels: createProxyIdentifier('MainThreadLanguageModels'), MainThreadEmbeddings: createProxyIdentifier('MainThreadEmbeddings'), MainThreadChatAgents2: createProxyIdentifier('MainThreadChatAgents2'), + MainThreadCodeMapper: createProxyIdentifier('MainThreadCodeMapper'), MainThreadChatVariables: createProxyIdentifier('MainThreadChatVariables'), MainThreadLanguageModelTools: createProxyIdentifier('MainThreadChatSkills'), MainThreadClipboard: createProxyIdentifier('MainThreadClipboard'), @@ -2935,6 +2988,7 @@ export const MainContext = { }; export const ExtHostContext = { + ExtHostCodeMapper: createProxyIdentifier('ExtHostCodeMapper'), ExtHostCommands: createProxyIdentifier('ExtHostCommands'), ExtHostConfiguration: createProxyIdentifier('ExtHostConfiguration'), ExtHostDiagnostics: createProxyIdentifier('ExtHostDiagnostics'), diff --git a/src/vs/workbench/api/common/extHostAiRelatedInformation.ts b/src/vs/workbench/api/common/extHostAiRelatedInformation.ts index 5594a8adf..c0b1994ba 100644 --- a/src/vs/workbench/api/common/extHostAiRelatedInformation.ts +++ b/src/vs/workbench/api/common/extHostAiRelatedInformation.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostAiRelatedInformationShape, IMainContext, MainContext, MainThreadAiRelatedInformationShape } from 'vs/workbench/api/common/extHost.protocol'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostAiRelatedInformationShape, IMainContext, MainContext, MainThreadAiRelatedInformationShape } from './extHost.protocol.js'; import type { CancellationToken, RelatedInformationProvider, RelatedInformationType, RelatedInformationResult } from 'vscode'; -import { Disposable } from 'vs/workbench/api/common/extHostTypes'; +import { Disposable } from './extHostTypes.js'; export class ExtHostRelatedInformation implements ExtHostAiRelatedInformationShape { private _relatedInformationProviders: Map = new Map(); diff --git a/src/vs/workbench/api/common/extHostApiCommands.ts b/src/vs/workbench/api/common/extHostApiCommands.ts index 5e25c7785..2cf996ac0 100644 --- a/src/vs/workbench/api/common/extHostApiCommands.ts +++ b/src/vs/workbench/api/common/extHostApiCommands.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isFalsyOrEmpty } from 'vs/base/common/arrays'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Schemas, matchesSomeScheme } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; -import { ISelection } from 'vs/editor/common/core/selection'; -import * as languages from 'vs/editor/common/languages'; -import { decodeSemanticTokensDto } from 'vs/editor/common/services/semanticTokensDto'; -import { validateWhenClauses } from 'vs/platform/contextkey/common/contextkey'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { ICallHierarchyItemDto, IIncomingCallDto, IInlineValueContextDto, IOutgoingCallDto, IRawColorInfo, ITypeHierarchyItemDto, IWorkspaceEditDto } from 'vs/workbench/api/common/extHost.protocol'; -import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { CustomCodeAction } from 'vs/workbench/api/common/extHostLanguageFeatures'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { TransientCellMetadata, TransientDocumentMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import * as search from 'vs/workbench/contrib/search/common/search'; +import { isFalsyOrEmpty } from '../../../base/common/arrays.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Schemas, matchesSomeScheme } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import { IPosition } from '../../../editor/common/core/position.js'; +import { IRange } from '../../../editor/common/core/range.js'; +import { ISelection } from '../../../editor/common/core/selection.js'; +import * as languages from '../../../editor/common/languages.js'; +import { decodeSemanticTokensDto } from '../../../editor/common/services/semanticTokensDto.js'; +import { validateWhenClauses } from '../../../platform/contextkey/common/contextkey.js'; +import { ITextEditorOptions } from '../../../platform/editor/common/editor.js'; +import { ICallHierarchyItemDto, IIncomingCallDto, IInlineValueContextDto, IOutgoingCallDto, IRawColorInfo, ITypeHierarchyItemDto, IWorkspaceEditDto } from './extHost.protocol.js'; +import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from './extHostCommands.js'; +import { CustomCodeAction } from './extHostLanguageFeatures.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import * as types from './extHostTypes.js'; +import { TransientCellMetadata, TransientDocumentMetadata } from '../../contrib/notebook/common/notebookCommon.js'; +import * as search from '../../contrib/search/common/search.js'; import type * as vscode from 'vscode'; //#region --- NEW world @@ -314,7 +314,6 @@ const newCommands: ApiCommand[] = [ // })(value); // }) // ), - // --- code actions new ApiCommand( 'vscode.executeCodeActionProvider', '_executeCodeActionProvider', 'Execute code action provider.', diff --git a/src/vs/workbench/api/common/extHostApiDeprecationService.ts b/src/vs/workbench/api/common/extHostApiDeprecationService.ts index 598417703..9a72ce444 100644 --- a/src/vs/workbench/api/common/extHostApiDeprecationService.ts +++ b/src/vs/workbench/api/common/extHostApiDeprecationService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import * as extHostProtocol from './extHost.protocol.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; export interface IExtHostApiDeprecationService { readonly _serviceBrand: undefined; diff --git a/src/vs/workbench/api/common/extHostAuthentication.ts b/src/vs/workbench/api/common/extHostAuthentication.ts index c5ba402ef..2400f8eca 100644 --- a/src/vs/workbench/api/common/extHostAuthentication.ts +++ b/src/vs/workbench/api/common/extHostAuthentication.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { Emitter, Event } from 'vs/base/common/event'; -import { MainContext, MainThreadAuthenticationShape, ExtHostAuthenticationShape } from 'vs/workbench/api/common/extHost.protocol'; -import { Disposable } from 'vs/workbench/api/common/extHostTypes'; -import { IExtensionDescription, ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { INTERNAL_AUTH_PROVIDER_PREFIX } from 'vs/workbench/services/authentication/common/authentication'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { MainContext, MainThreadAuthenticationShape, ExtHostAuthenticationShape } from './extHost.protocol.js'; +import { Disposable } from './extHostTypes.js'; +import { IExtensionDescription, ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { INTERNAL_AUTH_PROVIDER_PREFIX } from '../../services/authentication/common/authentication.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; export interface IExtHostAuthentication extends ExtHostAuthentication { } export const IExtHostAuthentication = createDecorator('IExtHostAuthentication'); @@ -28,9 +28,7 @@ export class ExtHostAuthentication implements ExtHostAuthenticationShape { private _proxy: MainThreadAuthenticationShape; private _authenticationProviders: Map = new Map(); - private _onDidChangeSessions = new Emitter(); - readonly onDidChangeSessions: Event = this._onDidChangeSessions.event; - + private _onDidChangeSessions = new Emitter(); private _getSessionTaskSingler = new TaskSingler(); constructor( @@ -39,6 +37,20 @@ export class ExtHostAuthentication implements ExtHostAuthenticationShape { this._proxy = extHostRpc.getProxy(MainContext.MainThreadAuthentication); } + /** + * This sets up an event that will fire when the auth sessions change with a built-in filter for the extensionId + * if a session change only affects a specific extension. + * @param extensionId The extension that is interested in the event. + * @returns An event with a built-in filter for the extensionId + */ + getExtensionScopedSessionsEvent(extensionId: string): Event { + const normalizedExtensionId = extensionId.toLowerCase(); + return Event.chain(this._onDidChangeSessions.event, ($) => $ + .filter(e => !e.extensionIdFilter || e.extensionIdFilter.includes(normalizedExtensionId)) + .map(e => ({ provider: e.provider })) + ); + } + async getSession(requestingExtension: IExtensionDescription, providerId: string, scopes: readonly string[], options: vscode.AuthenticationGetSessionOptions & ({ createIfNone: true } | { forceNewSession: true } | { forceNewSession: vscode.AuthenticationForceNewSessionOptions })): Promise; async getSession(requestingExtension: IExtensionDescription, providerId: string, scopes: readonly string[], options: vscode.AuthenticationGetSessionOptions & { forceNewSession: true }): Promise; async getSession(requestingExtension: IExtensionDescription, providerId: string, scopes: readonly string[], options: vscode.AuthenticationGetSessionOptions & { forceNewSession: vscode.AuthenticationForceNewSessionOptions }): Promise; @@ -110,10 +122,10 @@ export class ExtHostAuthentication implements ExtHostAuthenticationShape { throw new Error(`Unable to find authentication provider with handle: ${providerId}`); } - $onDidChangeAuthenticationSessions(id: string, label: string) { + $onDidChangeAuthenticationSessions(id: string, label: string, extensionIdFilter?: string[]) { // Don't fire events for the internal auth providers if (!id.startsWith(INTERNAL_AUTH_PROVIDER_PREFIX)) { - this._onDidChangeSessions.fire({ provider: { id, label } }); + this._onDidChangeSessions.fire({ provider: { id, label }, extensionIdFilter }); } return Promise.resolve(); } diff --git a/src/vs/workbench/api/common/extHostBulkEdits.ts b/src/vs/workbench/api/common/extHostBulkEdits.ts index 281a003c4..a1284739d 100644 --- a/src/vs/workbench/api/common/extHostBulkEdits.ts +++ b/src/vs/workbench/api/common/extHostBulkEdits.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { MainContext, MainThreadBulkEditsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { WorkspaceEdit } from 'vs/workbench/api/common/extHostTypeConverters'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { MainContext, MainThreadBulkEditsShape } from './extHost.protocol.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { WorkspaceEdit } from './extHostTypeConverters.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; import type * as vscode from 'vscode'; export class ExtHostBulkEdits { diff --git a/src/vs/workbench/api/common/extHostChatAgents2.ts b/src/vs/workbench/api/common/extHostChatAgents2.ts index c7fbdfcad..af9a83144 100644 --- a/src/vs/workbench/api/common/extHostChatAgents2.ts +++ b/src/vs/workbench/api/common/extHostChatAgents2.ts @@ -3,31 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { raceCancellation } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Emitter } from 'vs/base/common/event'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { Iterable } from 'vs/base/common/iterator'; -import { Disposable, DisposableMap, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { assertType } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { Location } from 'vs/editor/common/languages'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostChatAgentsShape2, IChatAgentCompletionItem, IChatAgentHistoryEntryDto, IChatProgressDto, IExtensionChatAgentMetadata, IMainContext, MainContext, MainThreadChatAgentsShape2 } from 'vs/workbench/api/common/extHost.protocol'; -import { CommandsConverter, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { ChatAgentLocation, IChatAgentRequest, IChatAgentResult, IChatAgentResultTimings } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { ChatAgentVoteDirection, IChatContentReference, IChatFollowup, IChatResponseErrorDetails, IChatUserActionEvent, IChatVoteAction } from 'vs/workbench/contrib/chat/common/chatService'; -import { checkProposedApiEnabled, isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { Dto } from 'vs/workbench/services/extensions/common/proxyIdentifier'; import type * as vscode from 'vscode'; +import { coalesce } from '../../../base/common/arrays.js'; +import { raceCancellation } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { Disposable, DisposableMap, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { assertType } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { Location } from '../../../editor/common/languages.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ChatAgentLocation, IChatAgentRequest, IChatAgentResult, IChatAgentResultTimings, IChatWelcomeMessageContent } from '../../contrib/chat/common/chatAgents.js'; +import { ChatAgentVoteDirection, IChatContentReference, IChatFollowup, IChatResponseErrorDetails, IChatUserActionEvent, IChatVoteAction } from '../../contrib/chat/common/chatService.js'; +import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { Dto } from '../../services/extensions/common/proxyIdentifier.js'; +import { ExtHostChatAgentsShape2, IChatAgentCompletionItem, IChatAgentHistoryEntryDto, IChatProgressDto, IExtensionChatAgentMetadata, IMainContext, MainContext, MainThreadChatAgentsShape2 } from './extHost.protocol.js'; +import { CommandsConverter, ExtHostCommands } from './extHostCommands.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { ExtHostLanguageModels } from './extHostLanguageModels.js'; +import * as typeConvert from './extHostTypeConverters.js'; +import * as extHostTypes from './extHostTypes.js'; class ChatAgentResponseStream { @@ -121,6 +122,14 @@ class ChatAgentResponseStream { _report(dto); return this; }, + codeblockUri(value) { + throwIfDone(this.codeblockUri); + checkProposedApiEnabled(that._extension, 'chatParticipantAdditions'); + const part = new extHostTypes.ChatResponseCodeblockUriPart(value); + const dto = typeConvert.ChatResponseCodeblockUriPart.from(part); + _report(dto); + return this; + }, filetree(value, baseUri) { throwIfDone(this.filetree); const part = new extHostTypes.ChatResponseFileTreePart(value, baseUri); @@ -281,7 +290,8 @@ export class ExtHostChatAgents2 extends Disposable implements ExtHostChatAgentsS mainContext: IMainContext, private readonly _logService: ILogService, private readonly _commands: ExtHostCommands, - private readonly _documents: ExtHostDocuments + private readonly _documents: ExtHostDocuments, + private readonly _languageModels: ExtHostLanguageModels ) { super(); this._proxy = mainContext.getProxy(MainContext.MainThreadChatAgents2); @@ -378,8 +388,13 @@ export class ExtHostChatAgents2 extends Disposable implements ExtHostChatAgentsS stream = new ChatAgentResponseStream(agent.extension, request, this._proxy, this._commands.converter, sessionDisposables); + const extRequest = typeConvert.ChatAgentRequest.to(request, location); + if (request.userSelectedModelId && isProposedApiEnabled(agent.extension, 'chatParticipantAdditions')) { + extRequest.userSelectedModel = await this._languageModels.getLanguageModelByIdentifier(agent.extension, request.userSelectedModelId); + } + const task = agent.invoke( - typeConvert.ChatAgentRequest.to(request, location), + extRequest, { history }, stream.apiObject, token @@ -539,13 +554,13 @@ export class ExtHostChatAgents2 extends Disposable implements ExtHostChatAgentsS return items.map((i) => typeConvert.ChatAgentCompletionItem.from(i, this._commands.converter, disposables)); } - async $provideWelcomeMessage(handle: number, location: ChatAgentLocation, token: CancellationToken): Promise<(string | IMarkdownString)[] | undefined> { + async $provideWelcomeMessage(handle: number, token: CancellationToken): Promise { const agent = this._agents.get(handle); if (!agent) { return; } - return await agent.provideWelcomeMessage(typeConvert.ChatLocation.to(location), token); + return await agent.provideWelcomeMessage(token); } async $provideChatTitle(handle: number, context: IChatAgentHistoryEntryDto[], token: CancellationToken): Promise { @@ -626,21 +641,22 @@ class ExtHostChatAgent { .filter(f => !(f && 'message' in f)); } - async provideWelcomeMessage(location: vscode.ChatLocation, token: CancellationToken): Promise<(string | IMarkdownString)[] | undefined> { - if (!this._welcomeMessageProvider) { - return []; + async provideWelcomeMessage(token: CancellationToken): Promise { + if (!this._welcomeMessageProvider?.provideWelcomeMessage) { + return undefined; } - const content = await this._welcomeMessageProvider.provideWelcomeMessage(location, token); - if (!content) { - return []; + + const content = await this._welcomeMessageProvider.provideWelcomeMessage(token); + const icon = content?.icon; // typescript + if (!content || !ThemeIcon.isThemeIcon(icon)) { + return undefined; } - return content.map(item => { - if (typeof item === 'string') { - return item; - } else { - return typeConvert.MarkdownString.from(item); - } - }); + + return { + ...content, + icon, + message: typeConvert.MarkdownString.from(content.message), + }; } async provideTitle(context: vscode.ChatContext, token: CancellationToken): Promise { diff --git a/src/vs/workbench/api/common/extHostChatVariables.ts b/src/vs/workbench/api/common/extHostChatVariables.ts index dfc37201b..ce8d4eb6d 100644 --- a/src/vs/workbench/api/common/extHostChatVariables.ts +++ b/src/vs/workbench/api/common/extHostChatVariables.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostChatVariablesShape, IChatVariableResolverProgressDto, IMainContext, MainContext, MainThreadChatVariablesShape } from 'vs/workbench/api/common/extHost.protocol'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { IChatRequestVariableValue, IChatVariableData } from 'vs/workbench/contrib/chat/common/chatVariables'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { onUnexpectedExternalError } from '../../../base/common/errors.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostChatVariablesShape, IChatVariableResolverProgressDto, IMainContext, MainContext, MainThreadChatVariablesShape } from './extHost.protocol.js'; +import * as typeConvert from './extHostTypeConverters.js'; +import * as extHostTypes from './extHostTypes.js'; +import { IChatRequestVariableValue, IChatVariableData } from '../../contrib/chat/common/chatVariables.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; import type * as vscode from 'vscode'; export class ExtHostChatVariables implements ExtHostChatVariablesShape { diff --git a/src/vs/workbench/api/common/extHostClipboard.ts b/src/vs/workbench/api/common/extHostClipboard.ts index f8665dacb..2907f4705 100644 --- a/src/vs/workbench/api/common/extHostClipboard.ts +++ b/src/vs/workbench/api/common/extHostClipboard.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMainContext, MainContext } from 'vs/workbench/api/common/extHost.protocol'; +import { IMainContext, MainContext } from './extHost.protocol.js'; import type * as vscode from 'vscode'; export class ExtHostClipboard { diff --git a/src/vs/workbench/api/common/extHostCodeInsets.ts b/src/vs/workbench/api/common/extHostCodeInsets.ts index bf6758e93..01cc0023b 100644 --- a/src/vs/workbench/api/common/extHostCodeInsets.ts +++ b/src/vs/workbench/api/common/extHostCodeInsets.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostTextEditor } from 'vs/workbench/api/common/extHostTextEditor'; -import { ExtHostEditors } from 'vs/workbench/api/common/extHostTextEditors'; -import { asWebviewUri, webviewGenericCspSource, WebviewRemoteInfo } from 'vs/workbench/contrib/webview/common/webview'; +import { Emitter } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostTextEditor } from './extHostTextEditor.js'; +import { ExtHostEditors } from './extHostTextEditors.js'; +import { asWebviewUri, webviewGenericCspSource, WebviewRemoteInfo } from '../../contrib/webview/common/webview.js'; import type * as vscode from 'vscode'; -import { ExtHostEditorInsetsShape, MainThreadEditorInsetsShape } from './extHost.protocol'; +import { ExtHostEditorInsetsShape, MainThreadEditorInsetsShape } from './extHost.protocol.js'; export class ExtHostEditorInsets implements ExtHostEditorInsetsShape { diff --git a/src/vs/workbench/api/common/extHostCodeMapper.ts b/src/vs/workbench/api/common/extHostCodeMapper.ts new file mode 100644 index 000000000..055d52b3d --- /dev/null +++ b/src/vs/workbench/api/common/extHostCodeMapper.ts @@ -0,0 +1,68 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type * as vscode from 'vscode'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ICodeMapperResult } from '../../contrib/chat/common/chatCodeMapperService.js'; +import * as extHostProtocol from './extHost.protocol.js'; +import { TextEdit } from './extHostTypeConverters.js'; +import { URI } from '../../../base/common/uri.js'; + +export class ExtHostCodeMapper implements extHostProtocol.ExtHostCodeMapperShape { + + private static _providerHandlePool: number = 0; + private readonly _proxy: extHostProtocol.MainThreadCodeMapperShape; + private readonly providers = new Map(); + + constructor( + mainContext: extHostProtocol.IMainContext + ) { + this._proxy = mainContext.getProxy(extHostProtocol.MainContext.MainThreadCodeMapper); + } + + async $mapCode(handle: number, internalRequest: extHostProtocol.ICodeMapperRequestDto, token: CancellationToken): Promise { + // Received request to map code from the main thread + const provider = this.providers.get(handle); + if (!provider) { + throw new Error(`Received request to map code for unknown provider handle ${handle}`); + } + + // Construct a response object to pass to the provider + const stream: vscode.MappedEditsResponseStream = { + textEdit: (target: vscode.Uri, edits: vscode.TextEdit | vscode.TextEdit[]) => { + edits = (Array.isArray(edits) ? edits : [edits]); + this._proxy.$handleProgress(internalRequest.requestId, { + uri: target, + edits: edits.map(TextEdit.from) + }); + } + }; + + const request: vscode.MappedEditsRequest = { + codeBlocks: internalRequest.codeBlocks.map(block => { + return { + code: block.code, + resource: URI.revive(block.resource) + }; + }), + conversation: internalRequest.conversation + }; + + const result = await provider.provideMappedEdits(request, stream, token); + return result ?? null; + } + + registerMappedEditsProvider(extension: IExtensionDescription, provider: vscode.MappedEditsProvider2): vscode.Disposable { + const handle = ExtHostCodeMapper._providerHandlePool++; + this._proxy.$registerCodeMapperProvider(handle); + this.providers.set(handle, provider); + return { + dispose: () => { + return this._proxy.$unregisterCodeMapperProvider(handle); + } + }; + } +} diff --git a/src/vs/workbench/api/common/extHostCommands.ts b/src/vs/workbench/api/common/extHostCommands.ts index 15730c390..c40a1942e 100644 --- a/src/vs/workbench/api/common/extHostCommands.ts +++ b/src/vs/workbench/api/common/extHostCommands.ts @@ -5,33 +5,33 @@ /* eslint-disable local/code-no-native-private */ -import { validateConstraint } from 'vs/base/common/types'; -import { ICommandMetadata } from 'vs/platform/commands/common/commands'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import * as extHostTypeConverter from 'vs/workbench/api/common/extHostTypeConverters'; -import { cloneAndChange } from 'vs/base/common/objects'; -import { MainContext, MainThreadCommandsShape, ExtHostCommandsShape, ICommandDto, ICommandMetadataDto, MainThreadTelemetryShape } from './extHost.protocol'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import * as languages from 'vs/editor/common/languages'; +import { validateConstraint } from '../../../base/common/types.js'; +import { ICommandMetadata } from '../../../platform/commands/common/commands.js'; +import * as extHostTypes from './extHostTypes.js'; +import * as extHostTypeConverter from './extHostTypeConverters.js'; +import { cloneAndChange } from '../../../base/common/objects.js'; +import { MainContext, MainThreadCommandsShape, ExtHostCommandsShape, ICommandDto, ICommandMetadataDto, MainThreadTelemetryShape } from './extHost.protocol.js'; +import { isNonEmptyArray } from '../../../base/common/arrays.js'; +import * as languages from '../../../editor/common/languages.js'; import type * as vscode from 'vscode'; -import { ILogService } from 'vs/platform/log/common/log'; -import { revive } from 'vs/base/common/marshalling'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { IPosition, Position } from 'vs/editor/common/core/position'; -import { URI } from 'vs/base/common/uri'; -import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ISelection } from 'vs/editor/common/core/selection'; -import { TestItemImpl } from 'vs/workbench/api/common/extHostTestItem'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUtils'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { generateUuid } from 'vs/base/common/uuid'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { IRange, Range } from '../../../editor/common/core/range.js'; +import { IPosition, Position } from '../../../editor/common/core/position.js'; +import { URI } from '../../../base/common/uri.js'; +import { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ISelection } from '../../../editor/common/core/selection.js'; +import { TestItemImpl } from './extHostTestItem.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { TelemetryTrustedValue } from '../../../platform/telemetry/common/telemetryUtils.js'; +import { IExtHostTelemetry } from './extHostTelemetry.js'; +import { generateUuid } from '../../../base/common/uuid.js'; interface CommandHandler { callback: Function; diff --git a/src/vs/workbench/api/common/extHostComments.ts b/src/vs/workbench/api/common/extHostComments.ts index 05761198e..70bd44d30 100644 --- a/src/vs/workbench/api/common/extHostComments.ts +++ b/src/vs/workbench/api/common/extHostComments.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asPromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { debounce } from 'vs/base/common/decorators'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IRange } from 'vs/editor/common/core/range'; -import * as languages from 'vs/editor/common/languages'; -import { ExtensionIdentifierMap, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import * as extHostTypeConverter from 'vs/workbench/api/common/extHostTypeConverters'; -import * as types from 'vs/workbench/api/common/extHostTypes'; +import { asPromise } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { debounce } from '../../../base/common/decorators.js'; +import { Emitter } from '../../../base/common/event.js'; +import { DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IRange } from '../../../editor/common/core/range.js'; +import * as languages from '../../../editor/common/languages.js'; +import { ExtensionIdentifierMap, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import * as extHostTypeConverter from './extHostTypeConverters.js'; +import * as types from './extHostTypes.js'; import type * as vscode from 'vscode'; -import { ExtHostCommentsShape, IMainContext, MainContext, CommentThreadChanges, CommentChanges } from './extHost.protocol'; -import { ExtHostCommands } from './extHostCommands'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { MarshalledCommentThread } from 'vs/workbench/common/comments'; +import { ExtHostCommentsShape, IMainContext, MainContext, CommentThreadChanges, CommentChanges } from './extHost.protocol.js'; +import { ExtHostCommands } from './extHostCommands.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { MarshalledCommentThread } from '../../common/comments.js'; type ProviderHandle = number; diff --git a/src/vs/workbench/api/common/extHostConfiguration.ts b/src/vs/workbench/api/common/extHostConfiguration.ts index 2808a4eb0..5a474e8aa 100644 --- a/src/vs/workbench/api/common/extHostConfiguration.ts +++ b/src/vs/workbench/api/common/extHostConfiguration.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { mixin, deepClone } from 'vs/base/common/objects'; -import { Event, Emitter } from 'vs/base/common/event'; +import { mixin, deepClone } from '../../../base/common/objects.js'; +import { Event, Emitter } from '../../../base/common/event.js'; import type * as vscode from 'vscode'; -import { ExtHostWorkspace, IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { ExtHostConfigurationShape, MainThreadConfigurationShape, IConfigurationInitData, MainContext } from './extHost.protocol'; -import { ConfigurationTarget as ExtHostConfigurationTarget } from './extHostTypes'; -import { ConfigurationTarget, IConfigurationChange, IConfigurationData, IConfigurationOverrides } from 'vs/platform/configuration/common/configuration'; -import { Configuration, ConfigurationChangeEvent } from 'vs/platform/configuration/common/configurationModels'; -import { ConfigurationScope, OVERRIDE_PROPERTY_REGEX } from 'vs/platform/configuration/common/configurationRegistry'; -import { isObject } from 'vs/base/common/types'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { Barrier } from 'vs/base/common/async'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Workspace } from 'vs/platform/workspace/common/workspace'; -import { URI } from 'vs/base/common/uri'; +import { ExtHostWorkspace, IExtHostWorkspace } from './extHostWorkspace.js'; +import { ExtHostConfigurationShape, MainThreadConfigurationShape, IConfigurationInitData, MainContext } from './extHost.protocol.js'; +import { ConfigurationTarget as ExtHostConfigurationTarget } from './extHostTypes.js'; +import { ConfigurationTarget, IConfigurationChange, IConfigurationData, IConfigurationOverrides } from '../../../platform/configuration/common/configuration.js'; +import { Configuration, ConfigurationChangeEvent } from '../../../platform/configuration/common/configurationModels.js'; +import { ConfigurationScope, OVERRIDE_PROPERTY_REGEX } from '../../../platform/configuration/common/configurationRegistry.js'; +import { isObject } from '../../../base/common/types.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { Barrier } from '../../../base/common/async.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { Workspace } from '../../../platform/workspace/common/workspace.js'; +import { URI } from '../../../base/common/uri.js'; function lookUp(tree: any, key: string) { if (key) { diff --git a/src/vs/workbench/api/common/extHostConsoleForwarder.ts b/src/vs/workbench/api/common/extHostConsoleForwarder.ts index 663841771..025591499 100644 --- a/src/vs/workbench/api/common/extHostConsoleForwarder.ts +++ b/src/vs/workbench/api/common/extHostConsoleForwarder.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStackArgument } from 'vs/base/common/console'; -import { safeStringify } from 'vs/base/common/objects'; -import { MainContext, MainThreadConsoleShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { IStackArgument } from '../../../base/common/console.js'; +import { safeStringify } from '../../../base/common/objects.js'; +import { MainContext, MainThreadConsoleShape } from './extHost.protocol.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; export abstract class AbstractExtHostConsoleForwarder { diff --git a/src/vs/workbench/api/common/extHostCustomEditors.ts b/src/vs/workbench/api/common/extHostCustomEditors.ts index 99eef8fbc..458795180 100644 --- a/src/vs/workbench/api/common/extHostCustomEditors.ts +++ b/src/vs/workbench/api/common/extHostCustomEditors.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { hash } from 'vs/base/common/hash'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { joinPath } from 'vs/base/common/resources'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { ExtHostWebviews, shouldSerializeBuffersForPostMessage, toExtensionData } from 'vs/workbench/api/common/extHostWebview'; -import { ExtHostWebviewPanels } from 'vs/workbench/api/common/extHostWebviewPanels'; -import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { hash } from '../../../base/common/hash.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { joinPath } from '../../../base/common/resources.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { IExtensionStoragePaths } from './extHostStoragePaths.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import { ExtHostWebviews, shouldSerializeBuffersForPostMessage, toExtensionData } from './extHostWebview.js'; +import { ExtHostWebviewPanels } from './extHostWebviewPanels.js'; +import { EditorGroupColumn } from '../../services/editor/common/editorGroupColumn.js'; import type * as vscode from 'vscode'; -import { Cache } from './cache'; -import * as extHostProtocol from './extHost.protocol'; -import * as extHostTypes from './extHostTypes'; +import { Cache } from './cache.js'; +import * as extHostProtocol from './extHost.protocol.js'; +import * as extHostTypes from './extHostTypes.js'; class CustomDocumentStoreEntry { diff --git a/src/vs/workbench/api/common/extHostDebugService.ts b/src/vs/workbench/api/common/extHostDebugService.ts index a5e22aa3d..fe33d966e 100644 --- a/src/vs/workbench/api/common/extHostDebugService.ts +++ b/src/vs/workbench/api/common/extHostDebugService.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asPromise } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Disposable as DisposableCls, toDisposable } from 'vs/base/common/lifecycle'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { DebugSessionUUID, ExtHostDebugServiceShape, IBreakpointsDeltaDto, IThreadFocusDto, IStackFrameFocusDto, IDebugSessionDto, IFunctionBreakpointDto, ISourceMultiBreakpointDto, MainContext, MainThreadDebugServiceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs'; -import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { Breakpoint, DataBreakpoint, DebugAdapterExecutable, DebugAdapterInlineImplementation, DebugAdapterNamedPipeServer, DebugAdapterServer, DebugConsoleMode, Disposable, FunctionBreakpoint, Location, Position, setBreakpointId, SourceBreakpoint, DebugThread, DebugStackFrame, ThemeIcon } from 'vs/workbench/api/common/extHostTypes'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { AbstractDebugAdapter } from 'vs/workbench/contrib/debug/common/abstractDebugAdapter'; -import { MainThreadDebugVisualization, IAdapterDescriptor, IConfig, IDebugAdapter, IDebugAdapterExecutable, IDebugAdapterNamedPipeServer, IDebugAdapterServer, IDebugVisualization, IDebugVisualizationContext, IDebuggerContribution, DebugVisualizationType, IDebugVisualizationTreeItem } from 'vs/workbench/contrib/debug/common/debug'; -import { convertToDAPaths, convertToVSCPaths, isDebuggerMainContribution } from 'vs/workbench/contrib/debug/common/debugUtils'; -import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; -import { Dto } from 'vs/workbench/services/extensions/common/proxyIdentifier'; import type * as vscode from 'vscode'; -import { IExtHostConfiguration } from '../common/extHostConfiguration'; -import { IExtHostVariableResolverProvider } from './extHostVariableResolverService'; -import { ThemeIcon as ThemeIconUtils } from 'vs/base/common/themables'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import * as Convert from 'vs/workbench/api/common/extHostTypeConverters'; -import { coalesce } from 'vs/base/common/arrays'; -import { IExtHostTesting } from 'vs/workbench/api/common/extHostTesting'; +import { coalesce } from '../../../base/common/arrays.js'; +import { asPromise } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable as DisposableCls, toDisposable } from '../../../base/common/lifecycle.js'; +import { ThemeIcon as ThemeIconUtils } from '../../../base/common/themables.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ISignService } from '../../../platform/sign/common/sign.js'; +import { IWorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; +import { AbstractDebugAdapter } from '../../contrib/debug/common/abstractDebugAdapter.js'; +import { DebugVisualizationType, IAdapterDescriptor, IConfig, IDebugAdapter, IDebugAdapterExecutable, IDebugAdapterImpl, IDebugAdapterNamedPipeServer, IDebugAdapterServer, IDebuggerContribution, IDebugVisualization, IDebugVisualizationContext, IDebugVisualizationTreeItem, MainThreadDebugVisualization } from '../../contrib/debug/common/debug.js'; +import { convertToDAPaths, convertToVSCPaths, isDebuggerMainContribution } from '../../contrib/debug/common/debugUtils.js'; +import { ExtensionDescriptionRegistry } from '../../services/extensions/common/extensionDescriptionRegistry.js'; +import { Dto } from '../../services/extensions/common/proxyIdentifier.js'; +import { DebugSessionUUID, ExtHostDebugServiceShape, IBreakpointsDeltaDto, IDebugSessionDto, IFunctionBreakpointDto, ISourceMultiBreakpointDto, IStackFrameFocusDto, IThreadFocusDto, MainContext, MainThreadDebugServiceShape } from './extHost.protocol.js'; +import { IExtHostCommands } from './extHostCommands.js'; +import { IExtHostConfiguration } from './extHostConfiguration.js'; +import { IExtHostEditorTabs } from './extHostEditorTabs.js'; +import { IExtHostExtensionService } from './extHostExtensionService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IExtHostTesting } from './extHostTesting.js'; +import * as Convert from './extHostTypeConverters.js'; +import { Breakpoint, DataBreakpoint, DebugAdapterExecutable, DebugAdapterInlineImplementation, DebugAdapterNamedPipeServer, DebugAdapterServer, DebugConsoleMode, DebugStackFrame, DebugThread, Disposable, FunctionBreakpoint, Location, Position, setBreakpointId, SourceBreakpoint, ThemeIcon } from './extHostTypes.js'; +import { IExtHostVariableResolverProvider } from './extHostVariableResolverService.js'; +import { IExtHostWorkspace } from './extHostWorkspace.js'; export const IExtHostDebugService = createDecorator('IExtHostDebugService'); @@ -578,8 +578,8 @@ export abstract class ExtHostDebugServiceBase extends DisposableCls implements I return variableResolver.resolveAnyAsync(ws, config); } - protected createDebugAdapter(adapter: IAdapterDescriptor, session: ExtHostDebugSession): AbstractDebugAdapter | undefined { - if (adapter.type === 'implementation') { + protected createDebugAdapter(adapter: vscode.DebugAdapterDescriptor, session: ExtHostDebugSession): AbstractDebugAdapter | undefined { + if (adapter instanceof DebugAdapterInlineImplementation) { return new DirectDebugAdapter(adapter.implementation); } return undefined; @@ -600,9 +600,7 @@ export abstract class ExtHostDebugServiceBase extends DisposableCls implements I throw new Error(`Couldn't find a debug adapter descriptor for debug type '${session.type}' (extension might have failed to activate)`); } - const adapterDescriptor = this.convertToDto(daDescriptor); - - const da = this.createDebugAdapter(adapterDescriptor, session); + const da = this.createDebugAdapter(daDescriptor, session); if (!da) { throw new Error(`Couldn't create a debug adapter for type '${session.type}'.`); } @@ -891,35 +889,49 @@ export abstract class ExtHostDebugServiceBase extends DisposableCls implements I // private & dto helpers private convertToDto(x: vscode.DebugAdapterDescriptor): Dto { - if (x instanceof DebugAdapterExecutable) { - return { - type: 'executable', - command: x.command, - args: x.args, - options: x.options - } satisfies IDebugAdapterExecutable; + return this.convertExecutableToDto(x); } else if (x instanceof DebugAdapterServer) { - return { - type: 'server', - port: x.port, - host: x.host - } satisfies IDebugAdapterServer; + return this.convertServerToDto(x); } else if (x instanceof DebugAdapterNamedPipeServer) { - return { - type: 'pipeServer', - path: x.path - } satisfies IDebugAdapterNamedPipeServer; + return this.convertPipeServerToDto(x); } else if (x instanceof DebugAdapterInlineImplementation) { - return { - type: 'implementation', - implementation: x.implementation - } as Dto; + return this.convertImplementationToDto(x); } else { throw new Error('convertToDto unexpected type'); } } + protected convertExecutableToDto(x: DebugAdapterExecutable): IDebugAdapterExecutable { + return { + type: 'executable', + command: x.command, + args: x.args, + options: x.options + }; + } + + protected convertServerToDto(x: DebugAdapterServer): IDebugAdapterServer { + return { + type: 'server', + port: x.port, + host: x.host + }; + } + + protected convertPipeServerToDto(x: DebugAdapterNamedPipeServer): IDebugAdapterNamedPipeServer { + return { + type: 'pipeServer', + path: x.path + }; + } + + protected convertImplementationToDto(x: DebugAdapterInlineImplementation): IDebugAdapterImpl { + return { + type: 'implementation', + }; + } + private getAdapterDescriptorFactoryByType(type: string): vscode.DebugAdapterDescriptorFactory | undefined { const results = this._adapterFactories.filter(p => p.type === type); if (results.length > 0) { diff --git a/src/vs/workbench/api/common/extHostDecorations.ts b/src/vs/workbench/api/common/extHostDecorations.ts index 7633574f0..4da84a110 100644 --- a/src/vs/workbench/api/common/extHostDecorations.ts +++ b/src/vs/workbench/api/common/extHostDecorations.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { URI } from 'vs/base/common/uri'; -import { MainContext, ExtHostDecorationsShape, MainThreadDecorationsShape, DecorationData, DecorationRequest, DecorationReply } from 'vs/workbench/api/common/extHost.protocol'; -import { Disposable, FileDecoration } from 'vs/workbench/api/common/extHostTypes'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { asArray, groupBy } from 'vs/base/common/arrays'; -import { compare, count } from 'vs/base/common/strings'; -import { dirname } from 'vs/base/common/path'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { URI } from '../../../base/common/uri.js'; +import { MainContext, ExtHostDecorationsShape, MainThreadDecorationsShape, DecorationData, DecorationRequest, DecorationReply } from './extHost.protocol.js'; +import { Disposable, FileDecoration } from './extHostTypes.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { asArray, groupBy } from '../../../base/common/arrays.js'; +import { compare, count } from '../../../base/common/strings.js'; +import { dirname } from '../../../base/common/path.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; interface ProviderData { provider: vscode.FileDecorationProvider; diff --git a/src/vs/workbench/api/common/extHostDiagnostics.ts b/src/vs/workbench/api/common/extHostDiagnostics.ts index da9a087fb..d2ca87f90 100644 --- a/src/vs/workbench/api/common/extHostDiagnostics.ts +++ b/src/vs/workbench/api/common/extHostDiagnostics.ts @@ -5,20 +5,20 @@ /* eslint-disable local/code-no-native-private */ -import { localize } from 'vs/nls'; -import { IMarkerData, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { URI, UriComponents } from 'vs/base/common/uri'; +import { localize } from '../../../nls.js'; +import { IMarkerData, MarkerSeverity } from '../../../platform/markers/common/markers.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; import type * as vscode from 'vscode'; -import { MainContext, MainThreadDiagnosticsShape, ExtHostDiagnosticsShape, IMainContext } from './extHost.protocol'; -import { DiagnosticSeverity } from './extHostTypes'; -import * as converter from './extHostTypeConverters'; -import { Event, Emitter, DebounceEmitter } from 'vs/base/common/event'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ResourceMap } from 'vs/base/common/map'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { IExtUri } from 'vs/base/common/resources'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; +import { MainContext, MainThreadDiagnosticsShape, ExtHostDiagnosticsShape, IMainContext } from './extHost.protocol.js'; +import { DiagnosticSeverity } from './extHostTypes.js'; +import * as converter from './extHostTypeConverters.js'; +import { Event, Emitter, DebounceEmitter } from '../../../base/common/event.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { IExtHostFileSystemInfo } from './extHostFileSystemInfo.js'; +import { IExtUri } from '../../../base/common/resources.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; export class DiagnosticCollection implements vscode.DiagnosticCollection { diff --git a/src/vs/workbench/api/common/extHostDialogs.ts b/src/vs/workbench/api/common/extHostDialogs.ts index 372037aa3..8e98769e1 100644 --- a/src/vs/workbench/api/common/extHostDialogs.ts +++ b/src/vs/workbench/api/common/extHostDialogs.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { URI } from 'vs/base/common/uri'; -import { MainContext, MainThreadDiaglogsShape, IMainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; +import { URI } from '../../../base/common/uri.js'; +import { MainContext, MainThreadDiaglogsShape, IMainContext } from './extHost.protocol.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; export class ExtHostDialogs { diff --git a/src/vs/workbench/api/common/extHostDocumentContentProviders.ts b/src/vs/workbench/api/common/extHostDocumentContentProviders.ts index daca96f19..cf67e3e17 100644 --- a/src/vs/workbench/api/common/extHostDocumentContentProviders.ts +++ b/src/vs/workbench/api/common/extHostDocumentContentProviders.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onUnexpectedError } from 'vs/base/common/errors'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Disposable } from 'vs/workbench/api/common/extHostTypes'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { Disposable } from './extHostTypes.js'; import type * as vscode from 'vscode'; -import { MainContext, ExtHostDocumentContentProvidersShape, MainThreadDocumentContentProvidersShape, IMainContext } from './extHost.protocol'; -import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors'; -import { Schemas } from 'vs/base/common/network'; -import { ILogService } from 'vs/platform/log/common/log'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { splitLines } from 'vs/base/common/strings'; +import { MainContext, ExtHostDocumentContentProvidersShape, MainThreadDocumentContentProvidersShape, IMainContext } from './extHost.protocol.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { Schemas } from '../../../base/common/network.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { splitLines } from '../../../base/common/strings.js'; export class ExtHostDocumentContentProvider implements ExtHostDocumentContentProvidersShape { diff --git a/src/vs/workbench/api/common/extHostDocumentData.ts b/src/vs/workbench/api/common/extHostDocumentData.ts index b3edbad94..c69c38d80 100644 --- a/src/vs/workbench/api/common/extHostDocumentData.ts +++ b/src/vs/workbench/api/common/extHostDocumentData.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ok } from 'vs/base/common/assert'; -import { Schemas } from 'vs/base/common/network'; -import { regExpLeadsToEndlessLoop } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { MirrorTextModel } from 'vs/editor/common/model/mirrorTextModel'; -import { ensureValidWordDefinition, getWordAtText } from 'vs/editor/common/core/wordHelper'; -import { MainThreadDocumentsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { EndOfLine, Position, Range } from 'vs/workbench/api/common/extHostTypes'; +import { ok } from '../../../base/common/assert.js'; +import { Schemas } from '../../../base/common/network.js'; +import { regExpLeadsToEndlessLoop } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { MirrorTextModel } from '../../../editor/common/model/mirrorTextModel.js'; +import { ensureValidWordDefinition, getWordAtText } from '../../../editor/common/core/wordHelper.js'; +import { MainThreadDocumentsShape } from './extHost.protocol.js'; +import { EndOfLine, Position, Range } from './extHostTypes.js'; import type * as vscode from 'vscode'; -import { equals } from 'vs/base/common/arrays'; +import { equals } from '../../../base/common/arrays.js'; const _languageId2WordDefinition = new Map(); export function setWordDefinitionFor(languageId: string, wordDefinition: RegExp | undefined): void { diff --git a/src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts b/src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts index de3123da9..69787c4ad 100644 --- a/src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts +++ b/src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { illegalState } from 'vs/base/common/errors'; -import { ExtHostDocumentSaveParticipantShape, IWorkspaceEditDto, MainThreadBulkEditsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { TextEdit } from 'vs/workbench/api/common/extHostTypes'; -import { Range, TextDocumentSaveReason, EndOfLine } from 'vs/workbench/api/common/extHostTypeConverters'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { SaveReason } from 'vs/workbench/common/editor'; +import { Event } from '../../../base/common/event.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { illegalState } from '../../../base/common/errors.js'; +import { ExtHostDocumentSaveParticipantShape, IWorkspaceEditDto, MainThreadBulkEditsShape } from './extHost.protocol.js'; +import { TextEdit } from './extHostTypes.js'; +import { Range, TextDocumentSaveReason, EndOfLine } from './extHostTypeConverters.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { SaveReason } from '../../common/editor.js'; import type * as vscode from 'vscode'; -import { LinkedList } from 'vs/base/common/linkedList'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { LinkedList } from '../../../base/common/linkedList.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; type Listener = [Function, any, IExtensionDescription]; diff --git a/src/vs/workbench/api/common/extHostDocuments.ts b/src/vs/workbench/api/common/extHostDocuments.ts index c9e1dad81..c26baab4a 100644 --- a/src/vs/workbench/api/common/extHostDocuments.ts +++ b/src/vs/workbench/api/common/extHostDocuments.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; -import { ExtHostDocumentsShape, IMainContext, MainContext, MainThreadDocumentsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocumentData, setWordDefinitionFor } from 'vs/workbench/api/common/extHostDocumentData'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import * as TypeConverters from 'vs/workbench/api/common/extHostTypeConverters'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IModelChangedEvent } from '../../../editor/common/model/mirrorTextModel.js'; +import { ExtHostDocumentsShape, IMainContext, MainContext, MainThreadDocumentsShape } from './extHost.protocol.js'; +import { ExtHostDocumentData, setWordDefinitionFor } from './extHostDocumentData.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import * as TypeConverters from './extHostTypeConverters.js'; import type * as vscode from 'vscode'; -import { assertIsDefined } from 'vs/base/common/types'; -import { deepFreeze } from 'vs/base/common/objects'; -import { TextDocumentChangeReason } from 'vs/workbench/api/common/extHostTypes'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { deepFreeze } from '../../../base/common/objects.js'; +import { TextDocumentChangeReason } from './extHostTypes.js'; export class ExtHostDocuments implements ExtHostDocumentsShape { diff --git a/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts b/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts index 224d9d553..5fe4b1927 100644 --- a/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts +++ b/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as assert from 'vs/base/common/assert'; +import * as assert from '../../../base/common/assert.js'; import * as vscode from 'vscode'; -import { Emitter, Event } from 'vs/base/common/event'; -import { dispose } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostTextEditor } from 'vs/workbench/api/common/extHostTextEditor'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ResourceMap } from 'vs/base/common/map'; -import { Schemas } from 'vs/base/common/network'; -import { Iterable } from 'vs/base/common/iterator'; -import { Lazy } from 'vs/base/common/lazy'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { dispose } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta, MainContext } from './extHost.protocol.js'; +import { ExtHostDocumentData } from './extHostDocumentData.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ExtHostTextEditor } from './extHostTextEditor.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { Schemas } from '../../../base/common/network.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { Lazy } from '../../../base/common/lazy.js'; class Reference { private _count = 0; diff --git a/src/vs/workbench/api/common/extHostEditorTabs.ts b/src/vs/workbench/api/common/extHostEditorTabs.ts index 3f89c17b8..592c75c4b 100644 --- a/src/vs/workbench/api/common/extHostEditorTabs.ts +++ b/src/vs/workbench/api/common/extHostEditorTabs.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { diffSets } from 'vs/base/common/collections'; -import { Emitter } from 'vs/base/common/event'; -import { assertIsDefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorTabDto, IEditorTabGroupDto, IExtHostEditorTabsShape, MainContext, MainThreadEditorTabsShape, TabInputKind, TabModelOperationKind, TabOperation } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { ChatEditorTabInput, CustomEditorTabInput, InteractiveWindowInput, NotebookDiffEditorTabInput, NotebookEditorTabInput, TerminalEditorTabInput, TextDiffTabInput, TextMergeTabInput, TextTabInput, WebviewEditorTabInput, TextMultiDiffTabInput } from 'vs/workbench/api/common/extHostTypes'; +import { diffSets } from '../../../base/common/collections.js'; +import { Emitter } from '../../../base/common/event.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IEditorTabDto, IEditorTabGroupDto, IExtHostEditorTabsShape, MainContext, MainThreadEditorTabsShape, TabInputKind, TabModelOperationKind, TabOperation } from './extHost.protocol.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import { ChatEditorTabInput, CustomEditorTabInput, InteractiveWindowInput, NotebookDiffEditorTabInput, NotebookEditorTabInput, TerminalEditorTabInput, TextDiffTabInput, TextMergeTabInput, TextTabInput, WebviewEditorTabInput, TextMultiDiffTabInput } from './extHostTypes.js'; import type * as vscode from 'vscode'; export interface IExtHostEditorTabs extends IExtHostEditorTabsShape { diff --git a/src/vs/workbench/api/common/extHostEmbedding.ts b/src/vs/workbench/api/common/extHostEmbedding.ts index 4c712aee9..afc429303 100644 --- a/src/vs/workbench/api/common/extHostEmbedding.ts +++ b/src/vs/workbench/api/common/extHostEmbedding.ts @@ -3,11 +3,11 @@ * 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 { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostEmbeddingsShape, IMainContext, MainContext, MainThreadEmbeddingsShape } from 'vs/workbench/api/common/extHost.protocol'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostEmbeddingsShape, IMainContext, MainContext, MainThreadEmbeddingsShape } from './extHost.protocol.js'; import type * as vscode from 'vscode'; diff --git a/src/vs/workbench/api/common/extHostEmbeddingVector.ts b/src/vs/workbench/api/common/extHostEmbeddingVector.ts index 20b3bcb26..9f97d789b 100644 --- a/src/vs/workbench/api/common/extHostEmbeddingVector.ts +++ b/src/vs/workbench/api/common/extHostEmbeddingVector.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostAiEmbeddingVectorShape, IMainContext, MainContext, MainThreadAiEmbeddingVectorShape } from 'vs/workbench/api/common/extHost.protocol'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostAiEmbeddingVectorShape, IMainContext, MainContext, MainThreadAiEmbeddingVectorShape } from './extHost.protocol.js'; import type { CancellationToken, EmbeddingVectorProvider } from 'vscode'; -import { Disposable } from 'vs/workbench/api/common/extHostTypes'; +import { Disposable } from './extHostTypes.js'; export class ExtHostAiEmbeddingVector implements ExtHostAiEmbeddingVectorShape { private _AiEmbeddingVectorProviders: Map = new Map(); diff --git a/src/vs/workbench/api/common/extHostExtensionActivator.ts b/src/vs/workbench/api/common/extHostExtensionActivator.ts index d6b20d610..20f8efbfd 100644 --- a/src/vs/workbench/api/common/extHostExtensionActivator.ts +++ b/src/vs/workbench/api/common/extHostExtensionActivator.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import * as errors from 'vs/base/common/errors'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; -import { ExtensionIdentifier, ExtensionIdentifierMap } from 'vs/platform/extensions/common/extensions'; -import { ExtensionActivationReason, MissingExtensionDependency } from 'vs/workbench/services/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Barrier } from 'vs/base/common/async'; +import * as errors from '../../../base/common/errors.js'; +import { Disposable, IDisposable } from '../../../base/common/lifecycle.js'; +import { ExtensionDescriptionRegistry } from '../../services/extensions/common/extensionDescriptionRegistry.js'; +import { ExtensionIdentifier, ExtensionIdentifierMap } from '../../../platform/extensions/common/extensions.js'; +import { ExtensionActivationReason, MissingExtensionDependency } from '../../services/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { Barrier } from '../../../base/common/async.js'; /** * Represents the source code (module) of an extension. diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts index 97ecf09ea..e6af1f781 100644 --- a/src/vs/workbench/api/common/extHostExtensionService.ts +++ b/src/vs/workbench/api/common/extHostExtensionService.ts @@ -5,49 +5,49 @@ /* eslint-disable local/code-no-native-private */ -import * as nls from 'vs/nls'; -import * as path from 'vs/base/common/path'; -import * as performance from 'vs/base/common/performance'; -import { originalFSPath, joinPath, extUriBiasedIgnorePathCase } from 'vs/base/common/resources'; -import { asPromise, Barrier, IntervalTimer, timeout } from 'vs/base/common/async'; -import { dispose, toDisposable, Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape, MainThreadTelemetryShape, MainThreadWorkspaceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtensionDescriptionDelta, IExtensionHostInitData } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { ExtHostConfiguration, IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { ActivatedExtension, EmptyExtension, ExtensionActivationTimes, ExtensionActivationTimesBuilder, ExtensionsActivator, IExtensionAPI, IExtensionModule, HostExtension, ExtensionActivationTimesFragment } from 'vs/workbench/api/common/extHostExtensionActivator'; -import { ExtHostStorage, IExtHostStorage } from 'vs/workbench/api/common/extHostStorage'; -import { ExtHostWorkspace, IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { MissingExtensionDependency, ActivationKind, checkProposedApiEnabled, isProposedApiEnabled, ExtensionActivationReason } from 'vs/workbench/services/extensions/common/extensions'; -import { ExtensionDescriptionRegistry, IActivationEventsReader } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; -import * as errors from 'vs/base/common/errors'; +import * as nls from '../../../nls.js'; +import * as path from '../../../base/common/path.js'; +import * as performance from '../../../base/common/performance.js'; +import { originalFSPath, joinPath, extUriBiasedIgnorePathCase } from '../../../base/common/resources.js'; +import { asPromise, Barrier, IntervalTimer, timeout } from '../../../base/common/async.js'; +import { dispose, toDisposable, Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape, MainThreadTelemetryShape, MainThreadWorkspaceShape } from './extHost.protocol.js'; +import { IExtensionDescriptionDelta, IExtensionHostInitData } from '../../services/extensions/common/extensionHostProtocol.js'; +import { ExtHostConfiguration, IExtHostConfiguration } from './extHostConfiguration.js'; +import { ActivatedExtension, EmptyExtension, ExtensionActivationTimes, ExtensionActivationTimesBuilder, ExtensionsActivator, IExtensionAPI, IExtensionModule, HostExtension, ExtensionActivationTimesFragment } from './extHostExtensionActivator.js'; +import { ExtHostStorage, IExtHostStorage } from './extHostStorage.js'; +import { ExtHostWorkspace, IExtHostWorkspace } from './extHostWorkspace.js'; +import { MissingExtensionDependency, ActivationKind, checkProposedApiEnabled, isProposedApiEnabled, ExtensionActivationReason } from '../../services/extensions/common/extensions.js'; +import { ExtensionDescriptionRegistry, IActivationEventsReader } from '../../services/extensions/common/extensionDescriptionRegistry.js'; +import * as errors from '../../../base/common/errors.js'; import type * as vscode from 'vscode'; -import { ExtensionIdentifier, ExtensionIdentifierMap, ExtensionIdentifierSet, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { ExtensionGlobalMemento, ExtensionMemento } from 'vs/workbench/api/common/extHostMemento'; -import { RemoteAuthorityResolverError, ExtensionKind, ExtensionMode, ExtensionRuntime, ManagedResolvedAuthority as ExtHostManagedResolvedAuthority } from 'vs/workbench/api/common/extHostTypes'; -import { ResolvedAuthority, ResolvedOptions, RemoteAuthorityResolverErrorCode, IRemoteConnectionData, getRemoteAuthorityPrefix, TunnelInformation, ManagedRemoteConnection, WebSocketRemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { IExtHostLanguageModels } from 'vs/workbench/api/common/extHostLanguageModels'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IExtensionActivationHost, checkActivateWorkspaceContainsExtension } from 'vs/workbench/services/extensions/common/workspaceContains'; -import { ExtHostSecretState, IExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState'; -import { ExtensionSecrets } from 'vs/workbench/api/common/extHostSecrets'; -import { Schemas } from 'vs/base/common/network'; -import { IResolveAuthorityResult } from 'vs/workbench/services/extensions/common/extensionHostProxy'; -import { IExtHostLocalizationService } from 'vs/workbench/api/common/extHostLocalizationService'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { isCI, setTimeout0 } from 'vs/base/common/platform'; -import { IExtHostManagedSockets } from 'vs/workbench/api/common/extHostManagedSockets'; -import { Dto } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { ExtensionIdentifier, ExtensionIdentifierMap, ExtensionIdentifierSet, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { ExtensionGlobalMemento, ExtensionMemento } from './extHostMemento.js'; +import { RemoteAuthorityResolverError, ExtensionKind, ExtensionMode, ExtensionRuntime, ManagedResolvedAuthority as ExtHostManagedResolvedAuthority } from './extHostTypes.js'; +import { ResolvedAuthority, ResolvedOptions, RemoteAuthorityResolverErrorCode, IRemoteConnectionData, getRemoteAuthorityPrefix, TunnelInformation, ManagedRemoteConnection, WebSocketRemoteConnection } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { IInstantiationService, createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtensionStoragePaths } from './extHostStoragePaths.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { IExtHostTunnelService } from './extHostTunnelService.js'; +import { IExtHostTerminalService } from './extHostTerminalService.js'; +import { IExtHostLanguageModels } from './extHostLanguageModels.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IExtensionActivationHost, checkActivateWorkspaceContainsExtension } from '../../services/extensions/common/workspaceContains.js'; +import { ExtHostSecretState, IExtHostSecretState } from './extHostSecretState.js'; +import { ExtensionSecrets } from './extHostSecrets.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IResolveAuthorityResult } from '../../services/extensions/common/extensionHostProxy.js'; +import { IExtHostLocalizationService } from './extHostLocalizationService.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { isCI, setTimeout0 } from '../../../base/common/platform.js'; +import { IExtHostManagedSockets } from './extHostManagedSockets.js'; +import { Dto } from '../../services/extensions/common/proxyIdentifier.js'; interface ITestRunner { /** Old test runner API, as exported from `vscode/lib/testrunner` */ diff --git a/src/vs/workbench/api/common/extHostFileSystem.ts b/src/vs/workbench/api/common/extHostFileSystem.ts index dc740ddf3..f4aa98279 100644 --- a/src/vs/workbench/api/common/extHostFileSystem.ts +++ b/src/vs/workbench/api/common/extHostFileSystem.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI, UriComponents } from 'vs/base/common/uri'; -import { MainContext, IMainContext, ExtHostFileSystemShape, MainThreadFileSystemShape, IFileChangeDto } from './extHost.protocol'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { MainContext, IMainContext, ExtHostFileSystemShape, MainThreadFileSystemShape, IFileChangeDto } from './extHost.protocol.js'; import type * as vscode from 'vscode'; -import * as files from 'vs/platform/files/common/files'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { FileChangeType } from 'vs/workbench/api/common/extHostTypes'; -import * as typeConverter from 'vs/workbench/api/common/extHostTypeConverters'; -import { ExtHostLanguageFeatures } from 'vs/workbench/api/common/extHostLanguageFeatures'; -import { State, StateMachine, LinkComputer, Edge } from 'vs/editor/common/languages/linkComputer'; -import { commonPrefixLength } from 'vs/base/common/strings'; -import { CharCode } from 'vs/base/common/charCode'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { IMarkdownString, isMarkdownString } from 'vs/base/common/htmlContent'; +import * as files from '../../../platform/files/common/files.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { FileChangeType } from './extHostTypes.js'; +import * as typeConverter from './extHostTypeConverters.js'; +import { ExtHostLanguageFeatures } from './extHostLanguageFeatures.js'; +import { State, StateMachine, LinkComputer, Edge } from '../../../editor/common/languages/linkComputer.js'; +import { commonPrefixLength } from '../../../base/common/strings.js'; +import { CharCode } from '../../../base/common/charCode.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { IMarkdownString, isMarkdownString } from '../../../base/common/htmlContent.js'; class FsLinkProvider { diff --git a/src/vs/workbench/api/common/extHostFileSystemConsumer.ts b/src/vs/workbench/api/common/extHostFileSystemConsumer.ts index fb325813d..b44f22574 100644 --- a/src/vs/workbench/api/common/extHostFileSystemConsumer.ts +++ b/src/vs/workbench/api/common/extHostFileSystemConsumer.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainContext, MainThreadFileSystemShape } from './extHost.protocol'; +import { MainContext, MainThreadFileSystemShape } from './extHost.protocol.js'; import type * as vscode from 'vscode'; -import * as files from 'vs/platform/files/common/files'; -import { FileSystemError } from 'vs/workbench/api/common/extHostTypes'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ResourceQueue } from 'vs/base/common/async'; -import { IExtUri, extUri, extUriIgnorePathCase } from 'vs/base/common/resources'; -import { Schemas } from 'vs/base/common/network'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; +import * as files from '../../../platform/files/common/files.js'; +import { FileSystemError } from './extHostTypes.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IExtHostFileSystemInfo } from './extHostFileSystemInfo.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceQueue } from '../../../base/common/async.js'; +import { IExtUri, extUri, extUriIgnorePathCase } from '../../../base/common/resources.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; export class ExtHostConsumerFileSystem { diff --git a/src/vs/workbench/api/common/extHostFileSystemEventService.ts b/src/vs/workbench/api/common/extHostFileSystemEventService.ts index 5ad160530..ff4892239 100644 --- a/src/vs/workbench/api/common/extHostFileSystemEventService.ts +++ b/src/vs/workbench/api/common/extHostFileSystemEventService.ts @@ -3,20 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event, AsyncEmitter, IWaitUntil, IWaitUntilData } from 'vs/base/common/event'; -import { GLOBSTAR, GLOB_SPLIT, parse } from 'vs/base/common/glob'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; +import { Emitter, Event, AsyncEmitter, IWaitUntil, IWaitUntilData } from '../../../base/common/event.js'; +import { GLOBSTAR, GLOB_SPLIT, IRelativePattern, parse } from '../../../base/common/glob.js'; +import { URI } from '../../../base/common/uri.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; import type * as vscode from 'vscode'; -import { ExtHostFileSystemEventServiceShape, FileSystemEvents, IMainContext, SourceTargetPair, IWorkspaceEditDto, IWillRunFileOperationParticipation, MainContext, IRelativePatternDto } from './extHost.protocol'; -import * as typeConverter from './extHostTypeConverters'; -import { Disposable, WorkspaceEdit } from './extHostTypes'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { FileChangeFilter, FileOperation } from 'vs/platform/files/common/files'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { Lazy } from 'vs/base/common/lazy'; +import { ExtHostFileSystemEventServiceShape, FileSystemEvents, IMainContext, SourceTargetPair, IWorkspaceEditDto, IWillRunFileOperationParticipation, MainContext, IRelativePatternDto } from './extHost.protocol.js'; +import * as typeConverter from './extHostTypeConverters.js'; +import { Disposable, WorkspaceEdit } from './extHostTypes.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { FileChangeFilter, FileOperation, IGlobPatterns } from '../../../platform/files/common/files.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostWorkspace } from './extHostWorkspace.js'; +import { Lazy } from '../../../base/common/lazy.js'; +import { ExtHostConfigProvider } from './extHostConfiguration.js'; +import { rtrim } from '../../../base/common/strings.js'; +import { normalizeWatcherPattern } from '../../../platform/files/common/watcher.js'; export interface FileSystemWatcherCreateOptions { readonly correlate: boolean; @@ -51,15 +54,15 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { return Boolean(this._config & 0b100); } - constructor(mainContext: IMainContext, workspace: IExtHostWorkspace, extension: IExtensionDescription, dispatcher: Event, globPattern: string | IRelativePatternDto, options?: FileSystemWatcherCreateOptions) { + constructor(mainContext: IMainContext, configuration: ExtHostConfigProvider, workspace: IExtHostWorkspace, extension: IExtensionDescription, dispatcher: Event, globPattern: string | IRelativePatternDto, options: FileSystemWatcherCreateOptions) { this._config = 0; - if (options?.ignoreCreateEvents) { + if (options.ignoreCreateEvents) { this._config += 0b001; } - if (options?.ignoreChangeEvents) { + if (options.ignoreChangeEvents) { this._config += 0b010; } - if (options?.ignoreDeleteEvents) { + if (options.ignoreDeleteEvents) { this._config += 0b100; } @@ -75,7 +78,7 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { // 1.84.x introduces new proposed API for a watcher to set exclude // rules. In these cases, we turn the file watcher into correlation // mode and ignore any event that does not match the correlation ID. - const excludeUncorrelatedEvents = options?.correlate; + const excludeUncorrelatedEvents = options.correlate; const subscription = dispatcher(events => { if (typeof events.session === 'number' && events.session !== this.session) { @@ -86,7 +89,7 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { return; // ignore events from other non-correlating file watcher when we are in correlation mode } - if (!options?.ignoreCreateEvents) { + if (!options.ignoreCreateEvents) { for (const created of events.created) { const uri = URI.revive(created); if (parsedPattern(uri.fsPath) && (!excludeOutOfWorkspaceEvents || workspace.getWorkspaceFolder(uri))) { @@ -94,7 +97,7 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { } } } - if (!options?.ignoreChangeEvents) { + if (!options.ignoreChangeEvents) { for (const changed of events.changed) { const uri = URI.revive(changed); if (parsedPattern(uri.fsPath) && (!excludeOutOfWorkspaceEvents || workspace.getWorkspaceFolder(uri))) { @@ -102,7 +105,7 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { } } } - if (!options?.ignoreDeleteEvents) { + if (!options.ignoreDeleteEvents) { for (const deleted of events.deleted) { const uri = URI.revive(deleted); if (parsedPattern(uri.fsPath) && (!excludeOutOfWorkspaceEvents || workspace.getWorkspaceFolder(uri))) { @@ -112,17 +115,17 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { } }); - this._disposable = Disposable.from(this.ensureWatching(mainContext, extension, globPattern, options, options?.correlate), this._onDidCreate, this._onDidChange, this._onDidDelete, subscription); + this._disposable = Disposable.from(this.ensureWatching(mainContext, workspace, configuration, extension, globPattern, options, options.correlate), this._onDidCreate, this._onDidChange, this._onDidDelete, subscription); } - private ensureWatching(mainContext: IMainContext, extension: IExtensionDescription, globPattern: string | IRelativePatternDto, options: FileSystemWatcherCreateOptions | undefined, correlate: boolean | undefined): Disposable { + private ensureWatching(mainContext: IMainContext, workspace: IExtHostWorkspace, configuration: ExtHostConfigProvider, extension: IExtensionDescription, globPattern: string | IRelativePatternDto, options: FileSystemWatcherCreateOptions, correlate: boolean | undefined): Disposable { const disposable = Disposable.from(); if (typeof globPattern === 'string') { return disposable; // workspace is already watched by default, no need to watch again! } - if (options?.ignoreChangeEvents && options?.ignoreCreateEvents && options?.ignoreDeleteEvents) { + if (options.ignoreChangeEvents && options.ignoreCreateEvents && options.ignoreDeleteEvents) { return disposable; // no need to watch if we ignore all events } @@ -133,26 +136,86 @@ class FileSystemWatcher implements vscode.FileSystemWatcher { recursive = true; // only watch recursively if pattern indicates the need for it } + const excludes = options.excludes ?? []; + let includes: Array | undefined = undefined; let filter: FileChangeFilter | undefined; + + // Correlated: adjust filter based on arguments if (correlate) { - if (options?.ignoreChangeEvents || options?.ignoreCreateEvents || options?.ignoreDeleteEvents) { + if (options.ignoreChangeEvents || options.ignoreCreateEvents || options.ignoreDeleteEvents) { filter = FileChangeFilter.UPDATED | FileChangeFilter.ADDED | FileChangeFilter.DELETED; - if (options?.ignoreChangeEvents) { + if (options.ignoreChangeEvents) { filter &= ~FileChangeFilter.UPDATED; } - if (options?.ignoreCreateEvents) { + if (options.ignoreCreateEvents) { filter &= ~FileChangeFilter.ADDED; } - if (options?.ignoreDeleteEvents) { + if (options.ignoreDeleteEvents) { filter &= ~FileChangeFilter.DELETED; } } } - proxy.$watch(extension.identifier.value, this.session, globPattern.baseUri, { recursive, excludes: options?.excludes ?? [], filter }, Boolean(correlate)); + // Uncorrelated: adjust includes and excludes based on settings + else { + + // Automatically add `files.watcherExclude` patterns when watching + // recursively to give users a chance to configure exclude rules + // for reducing the overhead of watching recursively + if (recursive && excludes.length === 0) { + const workspaceFolder = workspace.getWorkspaceFolder(URI.revive(globPattern.baseUri)); + const watcherExcludes = configuration.getConfiguration('files', workspaceFolder).get('watcherExclude'); + if (watcherExcludes) { + for (const key in watcherExcludes) { + if (key && watcherExcludes[key] === true) { + excludes.push(key); + } + } + } + } + + // Non-recursive watching inside the workspace will overlap with + // our standard workspace watchers. To prevent duplicate events, + // we only want to include events for files that are otherwise + // excluded via `files.watcherExclude`. As such, we configure + // to include each configured exclude pattern so that only those + // events are reported that are otherwise excluded. + // However, we cannot just use the pattern as is, because a pattern + // such as `bar` for a exclude, will work to exclude any of + // `/bar` but will not work as include for files within + // `bar` unless a suffix of `/**` if added. + // (https://github.com/microsoft/vscode/issues/148245) + else if (!recursive) { + const workspaceFolder = workspace.getWorkspaceFolder(URI.revive(globPattern.baseUri)); + if (workspaceFolder) { + const watcherExcludes = configuration.getConfiguration('files', workspaceFolder).get('watcherExclude'); + if (watcherExcludes) { + for (const key in watcherExcludes) { + if (key && watcherExcludes[key] === true) { + const includePattern = `${rtrim(key, '/')}/${GLOBSTAR}`; + if (!includes) { + includes = []; + } + + includes.push(normalizeWatcherPattern(workspaceFolder.uri.fsPath, includePattern)); + } + } + } + + // Still ignore watch request if there are actually no configured + // exclude rules, because in that case our default recursive watcher + // should be able to take care of all events. + if (!includes || includes.length === 0) { + return disposable; + } + } + } + } + + proxy.$watch(extension.identifier.value, this.session, globPattern.baseUri, { recursive, excludes, includes, filter }, Boolean(correlate)); return Disposable.from({ dispose: () => proxy.$unwatch(this.session) }); } @@ -220,8 +283,8 @@ export class ExtHostFileSystemEventService implements ExtHostFileSystemEventServ //--- file events - createFileSystemWatcher(workspace: IExtHostWorkspace, extension: IExtensionDescription, globPattern: vscode.GlobPattern, options?: FileSystemWatcherCreateOptions): vscode.FileSystemWatcher { - return new FileSystemWatcher(this._mainContext, workspace, extension, this._onFileSystemEvent.event, typeConverter.GlobPattern.from(globPattern), options); + createFileSystemWatcher(workspace: IExtHostWorkspace, configProvider: ExtHostConfigProvider, extension: IExtensionDescription, globPattern: vscode.GlobPattern, options: FileSystemWatcherCreateOptions): vscode.FileSystemWatcher { + return new FileSystemWatcher(this._mainContext, configProvider, workspace, extension, this._onFileSystemEvent.event, typeConverter.GlobPattern.from(globPattern), options); } $onFileEvent(events: FileSystemEvents) { diff --git a/src/vs/workbench/api/common/extHostFileSystemInfo.ts b/src/vs/workbench/api/common/extHostFileSystemInfo.ts index 2fa583c67..5aeabdd9d 100644 --- a/src/vs/workbench/api/common/extHostFileSystemInfo.ts +++ b/src/vs/workbench/api/common/extHostFileSystemInfo.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Schemas } from 'vs/base/common/network'; -import { ExtUri, IExtUri } from 'vs/base/common/resources'; -import { UriComponents } from 'vs/base/common/uri'; -import { FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ExtHostFileSystemInfoShape } from 'vs/workbench/api/common/extHost.protocol'; +import { Schemas } from '../../../base/common/network.js'; +import { ExtUri, IExtUri } from '../../../base/common/resources.js'; +import { UriComponents } from '../../../base/common/uri.js'; +import { FileSystemProviderCapabilities } from '../../../platform/files/common/files.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ExtHostFileSystemInfoShape } from './extHost.protocol.js'; export class ExtHostFileSystemInfo implements ExtHostFileSystemInfoShape { diff --git a/src/vs/workbench/api/common/extHostInitDataService.ts b/src/vs/workbench/api/common/extHostInitDataService.ts index 5b7f1ebfa..49a45f019 100644 --- a/src/vs/workbench/api/common/extHostInitDataService.ts +++ b/src/vs/workbench/api/common/extHostInitDataService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionHostInitData } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IExtensionHostInitData } from '../../services/extensions/common/extensionHostProtocol.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export const IExtHostInitDataService = createDecorator('IExtHostInitDataService'); diff --git a/src/vs/workbench/api/common/extHostInteractive.ts b/src/vs/workbench/api/common/extHostInteractive.ts index 63296ab10..0debcfa5b 100644 --- a/src/vs/workbench/api/common/extHostInteractive.ts +++ b/src/vs/workbench/api/common/extHostInteractive.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostInteractiveShape, IMainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostInteractiveShape, IMainContext } from './extHost.protocol.js'; +import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from './extHostCommands.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; import { NotebookEditor } from 'vscode'; export class ExtHostInteractive implements ExtHostInteractiveShape { diff --git a/src/vs/workbench/api/common/extHostLabelService.ts b/src/vs/workbench/api/common/extHostLabelService.ts index 3a7eec9b5..66b0e0888 100644 --- a/src/vs/workbench/api/common/extHostLabelService.ts +++ b/src/vs/workbench/api/common/extHostLabelService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ResourceLabelFormatter } from 'vs/platform/label/common/label'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { MainThreadLabelServiceShape, ExtHostLabelServiceShape, MainContext, IMainContext } from 'vs/workbench/api/common/extHost.protocol'; +import { ResourceLabelFormatter } from '../../../platform/label/common/label.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { MainThreadLabelServiceShape, ExtHostLabelServiceShape, MainContext, IMainContext } from './extHost.protocol.js'; export class ExtHostLabelService implements ExtHostLabelServiceShape { diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 50ab3ea67..9459f74eb 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -3,40 +3,40 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asArray, coalesce, isFalsyOrEmpty, isNonEmptyArray } from 'vs/base/common/arrays'; -import { raceCancellationError } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { NotImplementedError, isCancellationError } from 'vs/base/common/errors'; -import { IdGenerator } from 'vs/base/common/idGenerator'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { equals, mixin } from 'vs/base/common/objects'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { regExpLeadsToEndlessLoop } from 'vs/base/common/strings'; -import { assertType, isObject } from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range as EditorRange, IRange } from 'vs/editor/common/core/range'; -import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import * as languages from 'vs/editor/common/languages'; -import { IAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; -import { encodeSemanticTokensDto } from 'vs/editor/common/services/semanticTokensDto'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { CommandsConverter, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostTelemetry, IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { CodeActionKind, CompletionList, Disposable, DocumentDropOrPasteEditKind, DocumentSymbol, InlineCompletionTriggerKind, InlineEditTriggerKind, InternalDataTransferItem, Location, NewSymbolNameTriggerKind, Range, SemanticTokens, SemanticTokensEdit, SemanticTokensEdits, SnippetString, SymbolInformation, SyntaxTokenType } from 'vs/workbench/api/common/extHostTypes'; -import { checkProposedApiEnabled, isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { asArray, coalesce, isFalsyOrEmpty, isNonEmptyArray } from '../../../base/common/arrays.js'; +import { raceCancellationError } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { NotImplementedError, isCancellationError } from '../../../base/common/errors.js'; +import { IdGenerator } from '../../../base/common/idGenerator.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { equals, mixin } from '../../../base/common/objects.js'; +import { StopWatch } from '../../../base/common/stopwatch.js'; +import { regExpLeadsToEndlessLoop } from '../../../base/common/strings.js'; +import { assertType, isObject } from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { ISingleEditOperation } from '../../../editor/common/core/editOperation.js'; +import { IPosition } from '../../../editor/common/core/position.js'; +import { Range as EditorRange, IRange } from '../../../editor/common/core/range.js'; +import { ISelection, Selection } from '../../../editor/common/core/selection.js'; +import * as languages from '../../../editor/common/languages.js'; +import { IAutoClosingPairConditional } from '../../../editor/common/languages/languageConfiguration.js'; +import { encodeSemanticTokensDto } from '../../../editor/common/services/semanticTokensDto.js'; +import { localize } from '../../../nls.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostApiDeprecationService } from './extHostApiDeprecationService.js'; +import { CommandsConverter, ExtHostCommands } from './extHostCommands.js'; +import { ExtHostDiagnostics } from './extHostDiagnostics.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { ExtHostTelemetry, IExtHostTelemetry } from './extHostTelemetry.js'; +import * as typeConvert from './extHostTypeConverters.js'; +import { CodeActionKind, CompletionList, Disposable, DocumentDropOrPasteEditKind, DocumentSymbol, InlineCompletionTriggerKind, InlineEditTriggerKind, InternalDataTransferItem, Location, NewSymbolNameTriggerKind, Range, SemanticTokens, SemanticTokensEdit, SemanticTokensEdits, SnippetString, SymbolInformation, SyntaxTokenType } from './extHostTypes.js'; +import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; import type * as vscode from 'vscode'; -import { Cache } from './cache'; -import * as extHostProtocol from './extHost.protocol'; +import { Cache } from './cache.js'; +import * as extHostProtocol from './extHost.protocol.js'; // --- adapter @@ -1287,7 +1287,7 @@ class InlineCompletionAdapterBase { return undefined; } - async provideInlineEdits(resource: URI, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise { + async provideInlineEditsForRange(resource: URI, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise { return undefined; } @@ -1396,8 +1396,8 @@ class InlineCompletionAdapter extends InlineCompletionAdapterBase { }; } - override async provideInlineEdits(resource: URI, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise { - if (!this._provider.provideInlineEdits) { + override async provideInlineEditsForRange(resource: URI, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise { + if (!this._provider.provideInlineEditsForRange) { return undefined; } checkProposedApiEnabled(this._extension, 'inlineCompletionsAdditions'); @@ -1405,7 +1405,7 @@ class InlineCompletionAdapter extends InlineCompletionAdapterBase { const doc = this._documents.getDocument(resource); const r = typeConvert.Range.to(range); - const result = await this._provider.provideInlineEdits(doc, r, { + const result = await this._provider.provideInlineEditsForRange(doc, r, { selectedCompletionInfo: context.selectedSuggestionInfo ? { @@ -2150,19 +2150,32 @@ class MappedEditsAdapter { const uri = URI.revive(resource); const doc = this._documents.getDocument(uri); - const usedContext = context.documents.map((docSubArray) => - docSubArray.map((r) => { - return { - uri: URI.revive(r.uri), - version: r.version, - ranges: r.ranges.map((range) => typeConvert.Range.to(range)), - }; - }) - ); + const reviveContextItem = (item: extHostProtocol.IDocumentContextItemDto) => ({ + uri: URI.revive(item.uri), + version: item.version, + ranges: item.ranges.map(r => typeConvert.Range.to(r)), + } satisfies vscode.DocumentContextItem); + + + const usedContext = context.documents.map(docSubArray => docSubArray.map(reviveContextItem)); const ctx = { documents: usedContext, - selections: usedContext[0]?.[0]?.ranges ?? [] // @ulugbekna: this is a hack for backward compatibility + selections: usedContext[0]?.[0]?.ranges ?? [], // @ulugbekna: this is a hack for backward compatibility + conversation: context.conversation?.map(c => { + if (c.type === 'response') { + return { + type: 'response', + message: c.message, + references: c.references?.map(reviveContextItem) + } satisfies vscode.ConversationResponse; + } else { + return { + type: 'request', + message: c.message, + } satisfies vscode.ConversationRequest; + } + }) }; const mappedEdits = await this._provider.provideMappedEdits(doc, codeBlocks, ctx, token); @@ -2312,15 +2325,15 @@ export class ExtHostLanguageFeatures implements extHostProtocol.ExtHostLanguageF } $provideCodeLenses(handle: number, resource: UriComponents, token: CancellationToken): Promise { - return this._withAdapter(handle, CodeLensAdapter, adapter => adapter.provideCodeLenses(URI.revive(resource), token), undefined, token); + return this._withAdapter(handle, CodeLensAdapter, adapter => adapter.provideCodeLenses(URI.revive(resource), token), undefined, token, resource.scheme === 'output'); } $resolveCodeLens(handle: number, symbol: extHostProtocol.ICodeLensDto, token: CancellationToken): Promise { - return this._withAdapter(handle, CodeLensAdapter, adapter => adapter.resolveCodeLens(symbol, token), undefined, undefined); + return this._withAdapter(handle, CodeLensAdapter, adapter => adapter.resolveCodeLens(symbol, token), undefined, undefined, true); } $releaseCodeLenses(handle: number, cacheId: number): void { - this._withAdapter(handle, CodeLensAdapter, adapter => Promise.resolve(adapter.releaseCodeLenses(cacheId)), undefined, undefined); + this._withAdapter(handle, CodeLensAdapter, adapter => Promise.resolve(adapter.releaseCodeLenses(cacheId)), undefined, undefined, true); } // --- declaration @@ -2661,8 +2674,8 @@ export class ExtHostLanguageFeatures implements extHostProtocol.ExtHostLanguageF return this._withAdapter(handle, InlineCompletionAdapterBase, adapter => adapter.provideInlineCompletions(URI.revive(resource), position, context, token), undefined, token); } - $provideInlineEdits(handle: number, resource: UriComponents, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise { - return this._withAdapter(handle, InlineCompletionAdapterBase, adapter => adapter.provideInlineEdits(URI.revive(resource), range, context, token), undefined, token); + $provideInlineEditsForRange(handle: number, resource: UriComponents, range: IRange, context: languages.InlineCompletionContext, token: CancellationToken): Promise { + return this._withAdapter(handle, InlineCompletionAdapterBase, adapter => adapter.provideInlineEditsForRange(URI.revive(resource), range, context, token), undefined, token); } $handleInlineCompletionDidShow(handle: number, pid: number, idx: number, updatedInsertText: string): void { diff --git a/src/vs/workbench/api/common/extHostLanguageModelTools.ts b/src/vs/workbench/api/common/extHostLanguageModelTools.ts index d792a7bb0..dd9cb9299 100644 --- a/src/vs/workbench/api/common/extHostLanguageModelTools.ts +++ b/src/vs/workbench/api/common/extHostLanguageModelTools.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { raceCancellation } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CancellationError } from 'vs/base/common/errors'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { revive } from 'vs/base/common/marshalling'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostLanguageModelToolsShape, IMainContext, IToolDataDto, MainContext, MainThreadLanguageModelToolsShape } from 'vs/workbench/api/common/extHost.protocol'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { IToolInvocation, IToolResult } from 'vs/workbench/contrib/chat/common/languageModelToolsService'; +import { raceCancellation } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { CancellationError } from '../../../base/common/errors.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostLanguageModelToolsShape, IMainContext, IToolDataDto, MainContext, MainThreadLanguageModelToolsShape } from './extHost.protocol.js'; +import * as typeConvert from './extHostTypeConverters.js'; +import { IToolConfirmationMessages, IToolInvocation, IToolInvocationContext, IToolResult } from '../../contrib/chat/common/languageModelToolsService.js'; import type * as vscode from 'vscode'; export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape { @@ -44,6 +44,10 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape } async invokeTool(toolId: string, options: vscode.LanguageModelToolInvocationOptions, token: CancellationToken): Promise { + if (!options.requestedContentTypes?.length) { + throw new Error('LanguageModelToolInvocationOptions.requestedContentTypes is required to be set'); + } + const callId = generateUuid(); if (options.tokenOptions) { this._tokenCountFuncs.set(callId, options.tokenOptions.countTokens); @@ -55,8 +59,10 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape callId, parameters: options.parameters, tokenBudget: options.tokenOptions?.tokenBudget, + context: options.toolInvocationToken as IToolInvocationContext | undefined, + requestedContentTypes: options.requestedContentTypes, }, token); - return typeConvert.LanguageModelToolResult.to(result); + return result; } finally { this._tokenCountFuncs.delete(callId); } @@ -80,7 +86,7 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape throw new Error(`Unknown tool ${dto.toolId}`); } - const options: vscode.LanguageModelToolInvocationOptions = { parameters: dto.parameters }; + const options: vscode.LanguageModelToolInvocationOptions = { parameters: dto.parameters, toolInvocationToken: dto.context, requestedContentTypes: dto.requestedContentTypes }; if (dto.tokenBudget !== undefined) { options.tokenOptions = { tokenBudget: dto.tokenBudget, @@ -89,6 +95,12 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape }; } + // Some participant in extHostChatAgents calls invokeTool, goes to extHostLMTools + // mainThreadLMTools invokes the tool, which calls back to extHostLMTools + // The tool requests permission + // The tool in extHostLMTools calls for permission back to mainThreadLMTools + // And back to extHostLMTools, and back to the participant in extHostChatAgents + // Is there a tool call ID to identify the call? const extensionResult = await raceCancellation(Promise.resolve(item.tool.invoke(options, token)), token); if (!extensionResult) { throw new CancellationError(); @@ -98,19 +110,58 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape const value = extensionResult[key]; if (value instanceof Promise) { throw new Error(`Tool result for '${key}' cannot be a Promise`); + } else if (!options.requestedContentTypes.includes(key) && key !== 'toString') { + // This could help the scenario where a tool updated the prompt-tsx library, but did not update the contentType in package.json. + // Or, where a tool author didn't declare supportedContentTypes and isn't checking the list of requestedContentTypes. + // toString check can be temp, just to help with tools that are already published. + throw new Error(`Tool result for '${key}' was not requested from ${dto.toolId}.`); } } - return typeConvert.LanguageModelToolResult.from(extensionResult); + return extensionResult; + } + + async $provideToolConfirmationMessages(toolId: string, participantName: string, parameters: any, token: CancellationToken): Promise { + const item = this._registeredTools.get(toolId); + if (!item) { + throw new Error(`Unknown tool ${toolId}`); + } + + if (!item.tool.provideToolConfirmationMessages) { + return undefined; + } + + const result = await item.tool.provideToolConfirmationMessages({ participantName, parameters }, token); + if (!result) { + return undefined; + } + + return { + title: result.title, + message: typeof result.message === 'string' ? result.message : typeConvert.MarkdownString.from(result.message), + }; + } + + async $provideToolInvocationMessage(toolId: string, parameters: any, token: CancellationToken): Promise { + const item = this._registeredTools.get(toolId); + if (!item) { + throw new Error(`Unknown tool ${toolId}`); + } + + if (!item.tool.provideToolInvocationMessage) { + return undefined; + } + + return await item.tool.provideToolInvocationMessage(parameters, token); } - registerTool(extension: IExtensionDescription, name: string, tool: vscode.LanguageModelTool): IDisposable { - this._registeredTools.set(name, { extension, tool }); - this._proxy.$registerTool(name); + registerTool(extension: IExtensionDescription, id: string, tool: vscode.LanguageModelTool): IDisposable { + this._registeredTools.set(id, { extension, tool }); + this._proxy.$registerTool(id); return toDisposable(() => { - this._registeredTools.delete(name); - this._proxy.$unregisterTool(name); + this._registeredTools.delete(id); + this._proxy.$unregisterTool(id); }); } } diff --git a/src/vs/workbench/api/common/extHostLanguageModels.ts b/src/vs/workbench/api/common/extHostLanguageModels.ts index dd0ccfc98..95a9f2d1a 100644 --- a/src/vs/workbench/api/common/extHostLanguageModels.ts +++ b/src/vs/workbench/api/common/extHostLanguageModels.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AsyncIterableObject, AsyncIterableSource } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { CancellationError, SerializedError, transformErrorForSerialization, transformErrorFromSerialization } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier, ExtensionIdentifierMap, ExtensionIdentifierSet, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Progress } from 'vs/platform/progress/common/progress'; -import { ExtHostLanguageModelsShape, MainContext, MainThreadLanguageModelsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostAuthentication } from 'vs/workbench/api/common/extHostAuthentication'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { IChatMessage, IChatResponseFragment, IChatResponsePart, ILanguageModelChatMetadata } from 'vs/workbench/contrib/chat/common/languageModels'; -import { INTERNAL_AUTH_PROVIDER_PREFIX } from 'vs/workbench/services/authentication/common/authentication'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { AsyncIterableObject, AsyncIterableSource } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toErrorMessage } from '../../../base/common/errorMessage.js'; +import { CancellationError, SerializedError, transformErrorForSerialization, transformErrorFromSerialization } from '../../../base/common/errors.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Iterable } from '../../../base/common/iterator.js'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; +import { ExtensionIdentifier, ExtensionIdentifierMap, ExtensionIdentifierSet, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { Progress } from '../../../platform/progress/common/progress.js'; +import { ExtHostLanguageModelsShape, MainContext, MainThreadLanguageModelsShape } from './extHost.protocol.js'; +import { IExtHostAuthentication } from './extHostAuthentication.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import * as typeConvert from './extHostTypeConverters.js'; +import * as extHostTypes from './extHostTypes.js'; +import { IChatMessage, IChatResponseFragment, IChatResponsePart, ILanguageModelChatMetadata } from '../../contrib/chat/common/languageModels.js'; +import { INTERNAL_AUTH_PROVIDER_PREFIX } from '../../services/authentication/common/authentication.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; import type * as vscode from 'vscode'; export interface IExtHostLanguageModels extends ExtHostLanguageModels { } @@ -165,7 +165,7 @@ export class ExtHostLanguageModels implements ExtHostLanguageModelsShape { accountLabel: typeof metadata.auth === 'object' ? metadata.auth.label : undefined }; } - this._proxy.$registerLanguageModelProvider(handle, `${ExtensionIdentifier.toKey(extension.identifier)}/${handle}/${identifier}`, { + this._proxy.$registerLanguageModelProvider(handle, `${ExtensionIdentifier.toKey(extension.identifier)}/${identifier}`, { extension: extension.identifier, id: identifier, vendor: metadata.vendor ?? ExtensionIdentifier.toKey(extension.identifier), @@ -175,7 +175,9 @@ export class ExtHostLanguageModels implements ExtHostLanguageModelsShape { maxInputTokens: metadata.maxInputTokens, maxOutputTokens: metadata.maxOutputTokens, auth, - targetExtensions: metadata.extensions + targetExtensions: metadata.extensions, + isDefault: metadata.isDefault, + isUserSelectable: metadata.isUserSelectable, }); const responseReceivedListener = provider.onDidReceiveLanguageModelResponse2?.(({ extensionId, participant, tokenCount }) => { @@ -289,54 +291,62 @@ export class ExtHostLanguageModels implements ExtHostLanguageModelsShape { this._onDidChangeProviders.fire(undefined); } + async getLanguageModelByIdentifier(extension: IExtensionDescription, identifier: string): Promise { + + const data = this._allLanguageModelData.get(identifier); + if (!data) { + // model gone? is this an error on us? + return; + } + + // make sure auth information is correct + if (this._isUsingAuth(extension.identifier, data.metadata)) { + await this._fakeAuthPopulate(data.metadata); + } + + let apiObject = data.apiObjects.get(extension.identifier); + if (!apiObject) { + const that = this; + apiObject = { + id: data.metadata.id, + vendor: data.metadata.vendor, + family: data.metadata.family, + version: data.metadata.version, + name: data.metadata.name, + maxInputTokens: data.metadata.maxInputTokens, + countTokens(text, token) { + if (!that._allLanguageModelData.has(identifier)) { + throw extHostTypes.LanguageModelError.NotFound(identifier); + } + return that._computeTokenLength(identifier, text, token ?? CancellationToken.None); + }, + sendRequest(messages, options, token) { + if (!that._allLanguageModelData.has(identifier)) { + throw extHostTypes.LanguageModelError.NotFound(identifier); + } + return that._sendChatRequest(extension, identifier, messages, options ?? {}, token ?? CancellationToken.None); + } + }; + + Object.freeze(apiObject); + data.apiObjects.set(extension.identifier, apiObject); + } + + return apiObject; + } + async selectLanguageModels(extension: IExtensionDescription, selector: vscode.LanguageModelChatSelector) { // this triggers extension activation const models = await this._proxy.$selectChatModels({ ...selector, extension: extension.identifier }); const result: vscode.LanguageModelChat[] = []; - const that = this; - for (const identifier of models) { - const data = this._allLanguageModelData.get(identifier); - if (!data) { - // model gone? is this an error on us? - continue; - } - - // make sure auth information is correct - if (this._isUsingAuth(extension.identifier, data.metadata)) { - await this._fakeAuthPopulate(data.metadata); - } - let apiObject = data.apiObjects.get(extension.identifier); - - if (!apiObject) { - apiObject = { - id: identifier, - vendor: data.metadata.vendor, - family: data.metadata.family, - version: data.metadata.version, - name: data.metadata.name, - maxInputTokens: data.metadata.maxInputTokens, - countTokens(text, token) { - if (!that._allLanguageModelData.has(identifier)) { - throw extHostTypes.LanguageModelError.NotFound(identifier); - } - return that._computeTokenLength(identifier, text, token ?? CancellationToken.None); - }, - sendRequest(messages, options, token) { - if (!that._allLanguageModelData.has(identifier)) { - throw extHostTypes.LanguageModelError.NotFound(identifier); - } - return that._sendChatRequest(extension, identifier, messages, options ?? {}, token ?? CancellationToken.None); - } - }; - - Object.freeze(apiObject); - data.apiObjects.set(extension.identifier, apiObject); + for (const identifier of models) { + const model = await this.getLanguageModelByIdentifier(extension, identifier); + if (model) { + result.push(model); } - - result.push(apiObject); } return result; diff --git a/src/vs/workbench/api/common/extHostLanguages.ts b/src/vs/workbench/api/common/extHostLanguages.ts index 78c5be841..c8dadb3f8 100644 --- a/src/vs/workbench/api/common/extHostLanguages.ts +++ b/src/vs/workbench/api/common/extHostLanguages.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainContext, MainThreadLanguagesShape, IMainContext, ExtHostLanguagesShape } from './extHost.protocol'; +import { MainContext, MainThreadLanguagesShape, IMainContext, ExtHostLanguagesShape } from './extHost.protocol.js'; import type * as vscode from 'vscode'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { StandardTokenType, Range, Position, LanguageStatusSeverity } from 'vs/workbench/api/common/extHostTypes'; -import Severity from 'vs/base/common/severity'; -import { disposableTimeout } from 'vs/base/common/async'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import * as typeConvert from './extHostTypeConverters.js'; +import { StandardTokenType, Range, Position, LanguageStatusSeverity } from './extHostTypes.js'; +import Severity from '../../../base/common/severity.js'; +import { disposableTimeout } from '../../../base/common/async.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { CommandsConverter } from './extHostCommands.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; export class ExtHostLanguages implements ExtHostLanguagesShape { diff --git a/src/vs/workbench/api/common/extHostLocalizationService.ts b/src/vs/workbench/api/common/extHostLocalizationService.ts index 6ed204b58..754a6e713 100644 --- a/src/vs/workbench/api/common/extHostLocalizationService.ts +++ b/src/vs/workbench/api/common/extHostLocalizationService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { LANGUAGE_DEFAULT } from 'vs/base/common/platform'; -import { format2 } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostLocalizationShape, IStringDetails, MainContext, MainThreadLocalizationShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { LANGUAGE_DEFAULT } from '../../../base/common/platform.js'; +import { format2 } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostLocalizationShape, IStringDetails, MainContext, MainThreadLocalizationShape } from './extHost.protocol.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; export class ExtHostLocalizationService implements ExtHostLocalizationShape { readonly _serviceBrand: undefined; diff --git a/src/vs/workbench/api/common/extHostLogService.ts b/src/vs/workbench/api/common/extHostLogService.ts index d4baa5ae8..54a6c3d0d 100644 --- a/src/vs/workbench/api/common/extHostLogService.ts +++ b/src/vs/workbench/api/common/extHostLogService.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { ILoggerService } from 'vs/platform/log/common/log'; -import { LogService } from 'vs/platform/log/common/logService'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; +import { localize } from '../../../nls.js'; +import { ILoggerService } from '../../../platform/log/common/log.js'; +import { LogService } from '../../../platform/log/common/logService.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; export class ExtHostLogService extends LogService { diff --git a/src/vs/workbench/api/common/extHostLoggerService.ts b/src/vs/workbench/api/common/extHostLoggerService.ts index 1d7b42883..87ee75161 100644 --- a/src/vs/workbench/api/common/extHostLoggerService.ts +++ b/src/vs/workbench/api/common/extHostLoggerService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogger, ILoggerOptions, AbstractMessageLogger, LogLevel, AbstractLoggerService } from 'vs/platform/log/common/log'; -import { MainThreadLoggerShape, MainContext, ExtHostLogLevelServiceShape as ExtHostLogLevelServiceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { revive } from 'vs/base/common/marshalling'; +import { ILogger, ILoggerOptions, AbstractMessageLogger, LogLevel, AbstractLoggerService } from '../../../platform/log/common/log.js'; +import { MainThreadLoggerShape, MainContext, ExtHostLogLevelServiceShape as ExtHostLogLevelServiceShape } from './extHost.protocol.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { revive } from '../../../base/common/marshalling.js'; export class ExtHostLoggerService extends AbstractLoggerService implements ExtHostLogLevelServiceShape { diff --git a/src/vs/workbench/api/common/extHostManagedSockets.ts b/src/vs/workbench/api/common/extHostManagedSockets.ts index d2f028df1..6b020bca2 100644 --- a/src/vs/workbench/api/common/extHostManagedSockets.ts +++ b/src/vs/workbench/api/common/extHostManagedSockets.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ExtHostManagedSocketsShape, MainContext, MainThreadManagedSocketsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { ExtHostManagedSocketsShape, MainContext, MainThreadManagedSocketsShape } from './extHost.protocol.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; import * as vscode from 'vscode'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { VSBuffer } from 'vs/base/common/buffer'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; export interface IExtHostManagedSockets extends ExtHostManagedSocketsShape { setFactory(socketFactoryId: number, makeConnection: () => Thenable): void; diff --git a/src/vs/workbench/api/common/extHostMemento.ts b/src/vs/workbench/api/common/extHostMemento.ts index c309007bc..e1dc4f279 100644 --- a/src/vs/workbench/api/common/extHostMemento.ts +++ b/src/vs/workbench/api/common/extHostMemento.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { ExtHostStorage } from 'vs/workbench/api/common/extHostStorage'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { DeferredPromise, RunOnceScheduler } from 'vs/base/common/async'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import { ExtHostStorage } from './extHostStorage.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { DeferredPromise, RunOnceScheduler } from '../../../base/common/async.js'; export class ExtensionMemento implements vscode.Memento { diff --git a/src/vs/workbench/api/common/extHostMessageService.ts b/src/vs/workbench/api/common/extHostMessageService.ts index 2503a5319..eb84156fb 100644 --- a/src/vs/workbench/api/common/extHostMessageService.ts +++ b/src/vs/workbench/api/common/extHostMessageService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import Severity from 'vs/base/common/severity'; +import Severity from '../../../base/common/severity.js'; import type * as vscode from 'vscode'; -import { MainContext, MainThreadMessageServiceShape, MainThreadMessageOptions, IMainContext } from './extHost.protocol'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { MainContext, MainThreadMessageServiceShape, MainThreadMessageOptions, IMainContext } from './extHost.protocol.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; function isMessageItem(item: any): item is vscode.MessageItem { return item && item.title; diff --git a/src/vs/workbench/api/common/extHostNotebook.ts b/src/vs/workbench/api/common/extHostNotebook.ts index a8c5d9f62..75b648572 100644 --- a/src/vs/workbench/api/common/extHostNotebook.ts +++ b/src/vs/workbench/api/common/extHostNotebook.ts @@ -3,41 +3,41 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IRelativePattern } from 'vs/base/common/glob'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap, ResourceSet } from 'vs/base/common/map'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { isFalsyOrWhitespace } from 'vs/base/common/strings'; -import { assertIsDefined } from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import * as files from 'vs/platform/files/common/files'; -import { Cache } from 'vs/workbench/api/common/cache'; -import { ExtHostNotebookShape, IMainContext, IModelAddedData, INotebookCellStatusBarListDto, INotebookDocumentsAndEditorsDelta, INotebookDocumentShowOptions, INotebookEditorAddData, INotebookPartialFileStatsWithMetadata, MainContext, MainThreadNotebookDocumentsShape, MainThreadNotebookEditorsShape, MainThreadNotebookShape, NotebookDataDto } from 'vs/workbench/api/common/extHost.protocol'; -import { ApiCommand, ApiCommandArgument, ApiCommandResult, CommandsConverter, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { INotebookExclusiveDocumentFilter, INotebookContributionData } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { localize } from '../../../nls.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IRelativePattern } from '../../../base/common/glob.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap, ResourceSet } from '../../../base/common/map.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { isFalsyOrWhitespace } from '../../../base/common/strings.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import * as files from '../../../platform/files/common/files.js'; +import { Cache } from './cache.js'; +import { ExtHostNotebookShape, IMainContext, IModelAddedData, INotebookCellStatusBarListDto, INotebookDocumentsAndEditorsDelta, INotebookDocumentShowOptions, INotebookEditorAddData, INotebookPartialFileStatsWithMetadata, MainContext, MainThreadNotebookDocumentsShape, MainThreadNotebookEditorsShape, MainThreadNotebookShape, NotebookDataDto } from './extHost.protocol.js'; +import { ApiCommand, ApiCommandArgument, ApiCommandResult, CommandsConverter, ExtHostCommands } from './extHostCommands.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import * as extHostTypes from './extHostTypes.js'; +import { INotebookExclusiveDocumentFilter, INotebookContributionData } from '../../contrib/notebook/common/notebookCommon.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; import type * as vscode from 'vscode'; -import { ExtHostCell, ExtHostNotebookDocument } from './extHostNotebookDocument'; -import { ExtHostNotebookEditor } from './extHostNotebookEditor'; -import { IExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { filter } from 'vs/base/common/objects'; -import { Schemas } from 'vs/base/common/network'; -import { IFileQuery, ITextQuery, QueryType } from 'vs/workbench/services/search/common/search'; -import { IExtHostSearch } from 'vs/workbench/api/common/extHostSearch'; -import { CellSearchModel } from 'vs/workbench/contrib/search/common/cellSearchModel'; -import { INotebookCellMatchNoModel, INotebookFileMatchNoModel, IRawClosedNotebookFileMatch, genericCellMatchesToTextSearchMatches } from 'vs/workbench/contrib/search/common/searchNotebookHelpers'; -import { NotebookPriorityInfo } from 'vs/workbench/contrib/search/common/search'; -import { globMatchesResource, RegisteredEditorPriority } from 'vs/workbench/services/editor/common/editorResolverService'; -import { ILogService } from 'vs/platform/log/common/log'; +import { ExtHostCell, ExtHostNotebookDocument } from './extHostNotebookDocument.js'; +import { ExtHostNotebookEditor } from './extHostNotebookEditor.js'; +import { IExtHostConsumerFileSystem } from './extHostFileSystemConsumer.js'; +import { filter } from '../../../base/common/objects.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IFileQuery, ITextQuery, QueryType } from '../../services/search/common/search.js'; +import { IExtHostSearch } from './extHostSearch.js'; +import { CellSearchModel } from '../../contrib/search/common/cellSearchModel.js'; +import { INotebookCellMatchNoModel, INotebookFileMatchNoModel, IRawClosedNotebookFileMatch, genericCellMatchesToTextSearchMatches } from '../../contrib/search/common/searchNotebookHelpers.js'; +import { NotebookPriorityInfo } from '../../contrib/search/common/search.js'; +import { globMatchesResource, RegisteredEditorPriority } from '../../services/editor/common/editorResolverService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; export class ExtHostNotebookController implements ExtHostNotebookShape { private static _notebookStatusBarItemProviderHandlePool: number = 0; @@ -211,7 +211,11 @@ export class ExtHostNotebookController implements ExtHostNotebookShape { preserveFocus: options.preserveFocus, selections: options.selections && options.selections.map(typeConverters.NotebookRange.from), pinned: typeof options.preview === 'boolean' ? !options.preview : undefined, - label: options?.label + label: typeof options.asRepl === 'string' ? + options.asRepl : + typeof options.asRepl === 'object' ? + options.asRepl.label : + undefined, }; } else { resolvedOptions = { @@ -220,7 +224,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape { }; } - const viewType = options?.asRepl ? 'repl' : notebook.notebookType; + const viewType = !!options?.asRepl ? 'repl' : notebook.notebookType; const editorId = await this._notebookEditorsProxy.$tryShowNotebookDocument(notebook.uri, viewType, resolvedOptions); const editor = editorId && this._editors.get(editorId)?.apiEditor; @@ -588,7 +592,8 @@ export class ExtHostNotebookController implements ExtHostNotebookShape { document, data.visibleRanges.map(typeConverters.NotebookRange.to), data.selections.map(typeConverters.NotebookRange.to), - typeof data.viewColumn === 'number' ? typeConverters.ViewColumn.to(data.viewColumn) : undefined + typeof data.viewColumn === 'number' ? typeConverters.ViewColumn.to(data.viewColumn) : undefined, + data.viewType ); this._editors.set(editorId, editor); diff --git a/src/vs/workbench/api/common/extHostNotebookDocument.ts b/src/vs/workbench/api/common/extHostNotebookDocument.ts index 382fd39c3..205a89985 100644 --- a/src/vs/workbench/api/common/extHostNotebookDocument.ts +++ b/src/vs/workbench/api/common/extHostNotebookDocument.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import * as extHostTypeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { NotebookRange } from 'vs/workbench/api/common/extHostTypes'; -import * as notebookCommon from 'vs/workbench/contrib/notebook/common/notebookCommon'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import * as extHostProtocol from './extHost.protocol.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import * as extHostTypeConverters from './extHostTypeConverters.js'; +import { NotebookRange } from './extHostTypes.js'; +import * as notebookCommon from '../../contrib/notebook/common/notebookCommon.js'; import * as vscode from 'vscode'; class RawContentChangeEvent { diff --git a/src/vs/workbench/api/common/extHostNotebookDocumentSaveParticipant.ts b/src/vs/workbench/api/common/extHostNotebookDocumentSaveParticipant.ts index 0f031e2f7..b86e6a7a9 100644 --- a/src/vs/workbench/api/common/extHostNotebookDocumentSaveParticipant.ts +++ b/src/vs/workbench/api/common/extHostNotebookDocumentSaveParticipant.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { AsyncEmitter, Event } from 'vs/base/common/event'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostNotebookDocumentSaveParticipantShape, IWorkspaceEditDto, MainThreadBulkEditsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { TextDocumentSaveReason, WorkspaceEdit as WorksapceEditConverter } from 'vs/workbench/api/common/extHostTypeConverters'; -import { WorkspaceEdit } from 'vs/workbench/api/common/extHostTypes'; -import { SaveReason } from 'vs/workbench/common/editor'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { AsyncEmitter, Event } from '../../../base/common/event.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostNotebookDocumentSaveParticipantShape, IWorkspaceEditDto, MainThreadBulkEditsShape } from './extHost.protocol.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; +import { TextDocumentSaveReason, WorkspaceEdit as WorksapceEditConverter } from './extHostTypeConverters.js'; +import { WorkspaceEdit } from './extHostTypes.js'; +import { SaveReason } from '../../common/editor.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; import { NotebookDocumentWillSaveEvent } from 'vscode'; interface IExtensionListener { diff --git a/src/vs/workbench/api/common/extHostNotebookDocuments.ts b/src/vs/workbench/api/common/extHostNotebookDocuments.ts index b89b9cd1f..359eb9468 100644 --- a/src/vs/workbench/api/common/extHostNotebookDocuments.ts +++ b/src/vs/workbench/api/common/extHostNotebookDocuments.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { NotebookDocumentMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { Emitter } from '../../../base/common/event.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import * as extHostProtocol from './extHost.protocol.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; +import { NotebookDocumentMetadata } from '../../contrib/notebook/common/notebookCommon.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; import type * as vscode from 'vscode'; export class ExtHostNotebookDocuments implements extHostProtocol.ExtHostNotebookDocumentsShape { diff --git a/src/vs/workbench/api/common/extHostNotebookEditor.ts b/src/vs/workbench/api/common/extHostNotebookEditor.ts index 4aec54c26..c4c357d14 100644 --- a/src/vs/workbench/api/common/extHostNotebookEditor.ts +++ b/src/vs/workbench/api/common/extHostNotebookEditor.ts @@ -3,21 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { illegalArgument } from 'vs/base/common/errors'; -import { MainThreadNotebookEditorsShape } from 'vs/workbench/api/common/extHost.protocol'; -import * as extHostConverter from 'vs/workbench/api/common/extHostTypeConverters'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; +import { illegalArgument } from '../../../base/common/errors.js'; +import { MainThreadNotebookEditorsShape } from './extHost.protocol.js'; +import * as extHostConverter from './extHostTypeConverters.js'; +import * as extHostTypes from './extHostTypes.js'; import * as vscode from 'vscode'; -import { ExtHostNotebookDocument } from './extHostNotebookDocument'; +import { ExtHostNotebookDocument } from './extHostNotebookDocument.js'; export class ExtHostNotebookEditor { public static readonly apiEditorsToExtHost = new WeakMap(); - private _selections: vscode.NotebookRange[] = []; - private _visibleRanges: vscode.NotebookRange[] = []; - private _viewColumn?: vscode.ViewColumn; - private _visible: boolean = false; private _editor?: vscode.NotebookEditor; @@ -26,14 +22,11 @@ export class ExtHostNotebookEditor { readonly id: string, private readonly _proxy: MainThreadNotebookEditorsShape, readonly notebookData: ExtHostNotebookDocument, - visibleRanges: vscode.NotebookRange[], - selections: vscode.NotebookRange[], - viewColumn: vscode.ViewColumn | undefined - ) { - this._selections = selections; - this._visibleRanges = visibleRanges; - this._viewColumn = viewColumn; - } + private _visibleRanges: vscode.NotebookRange[], + private _selections: vscode.NotebookRange[], + private _viewColumn: vscode.ViewColumn | undefined, + private readonly viewType: string + ) { } get apiEditor(): vscode.NotebookEditor { if (!this._editor) { @@ -71,6 +64,12 @@ export class ExtHostNotebookEditor { get viewColumn() { return that._viewColumn; }, + get replOptions() { + if (that.viewType === 'repl') { + return { appendIndex: this.notebook.cellCount - 1 }; + } + return undefined; + }, [Symbol.for('debug.description')]() { return `NotebookEditor(${this.notebook.uri.toString()})`; } diff --git a/src/vs/workbench/api/common/extHostNotebookEditors.ts b/src/vs/workbench/api/common/extHostNotebookEditors.ts index 5073d92c5..519f69219 100644 --- a/src/vs/workbench/api/common/extHostNotebookEditors.ts +++ b/src/vs/workbench/api/common/extHostNotebookEditors.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostNotebookEditorsShape, INotebookEditorPropertiesChangeData, INotebookEditorViewColumnInfo } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; +import { Emitter } from '../../../base/common/event.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostNotebookEditorsShape, INotebookEditorPropertiesChangeData, INotebookEditorViewColumnInfo } from './extHost.protocol.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; +import * as typeConverters from './extHostTypeConverters.js'; import type * as vscode from 'vscode'; diff --git a/src/vs/workbench/api/common/extHostNotebookKernels.ts b/src/vs/workbench/api/common/extHostNotebookKernels.ts index ecb6b4a7d..584a45080 100644 --- a/src/vs/workbench/api/common/extHostNotebookKernels.ts +++ b/src/vs/workbench/api/common/extHostNotebookKernels.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asArray } from 'vs/base/common/arrays'; -import { DeferredPromise, timeout } from 'vs/base/common/async'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { ResourceMap } from 'vs/base/common/map'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostNotebookKernelsShape, ICellExecuteUpdateDto, IMainContext, INotebookKernelDto2, MainContext, MainThreadNotebookKernelsShape, NotebookOutputDto, VariablesResult } from 'vs/workbench/api/common/extHost.protocol'; -import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { ExtHostCell, ExtHostNotebookDocument } from 'vs/workbench/api/common/extHostNotebookDocument'; -import * as extHostTypeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { NotebookCellExecutionState as ExtHostNotebookCellExecutionState, NotebookCellOutput, NotebookControllerAffinity2, NotebookVariablesRequestKind } from 'vs/workbench/api/common/extHostTypes'; -import { asWebviewUri } from 'vs/workbench/contrib/webview/common/webview'; -import { INotebookKernelSourceAction, NotebookCellExecutionState } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { CellExecutionUpdateType } from 'vs/workbench/contrib/notebook/common/notebookExecutionService'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { asArray } from '../../../base/common/arrays.js'; +import { DeferredPromise, timeout } from '../../../base/common/async.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostNotebookKernelsShape, ICellExecuteUpdateDto, IMainContext, INotebookKernelDto2, MainContext, MainThreadNotebookKernelsShape, NotebookOutputDto, VariablesResult } from './extHost.protocol.js'; +import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from './extHostCommands.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; +import { ExtHostCell, ExtHostNotebookDocument } from './extHostNotebookDocument.js'; +import * as extHostTypeConverters from './extHostTypeConverters.js'; +import { NotebookCellExecutionState as ExtHostNotebookCellExecutionState, NotebookCellOutput, NotebookControllerAffinity2, NotebookVariablesRequestKind } from './extHostTypes.js'; +import { asWebviewUri } from '../../contrib/webview/common/webview.js'; +import { INotebookKernelSourceAction, NotebookCellExecutionState } from '../../contrib/notebook/common/notebookCommon.js'; +import { CellExecutionUpdateType } from '../../contrib/notebook/common/notebookExecutionService.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; import * as vscode from 'vscode'; -import { variablePageSize } from 'vs/workbench/contrib/notebook/common/notebookKernelService'; +import { variablePageSize } from '../../contrib/notebook/common/notebookKernelService.js'; interface IKernelData { extensionId: ExtensionIdentifier; diff --git a/src/vs/workbench/api/common/extHostNotebookRenderers.ts b/src/vs/workbench/api/common/extHostNotebookRenderers.ts index e63bbffcc..56c273a7b 100644 --- a/src/vs/workbench/api/common/extHostNotebookRenderers.ts +++ b/src/vs/workbench/api/common/extHostNotebookRenderers.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostNotebookRenderersShape, IMainContext, MainContext, MainThreadNotebookRenderersShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { ExtHostNotebookEditor } from 'vs/workbench/api/common/extHostNotebookEditor'; +import { Emitter } from '../../../base/common/event.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostNotebookRenderersShape, IMainContext, MainContext, MainThreadNotebookRenderersShape } from './extHost.protocol.js'; +import { ExtHostNotebookController } from './extHostNotebook.js'; +import { ExtHostNotebookEditor } from './extHostNotebookEditor.js'; import * as vscode from 'vscode'; diff --git a/src/vs/workbench/api/common/extHostOutput.ts b/src/vs/workbench/api/common/extHostOutput.ts index 502dd47fd..c7aeef7a1 100644 --- a/src/vs/workbench/api/common/extHostOutput.ts +++ b/src/vs/workbench/api/common/extHostOutput.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainContext, MainThreadOutputServiceShape, ExtHostOutputServiceShape } from './extHost.protocol'; +import { MainContext, MainThreadOutputServiceShape, ExtHostOutputServiceShape } from './extHost.protocol.js'; import type * as vscode from 'vscode'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { AbstractMessageLogger, ILogger, ILoggerService, ILogService, log, LogLevel, parseLogLevel } from 'vs/platform/log/common/log'; -import { OutputChannelUpdateMode } from 'vs/workbench/services/output/common/output'; -import { IExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { toLocalISOString } from 'vs/base/common/date'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { isString } from 'vs/base/common/types'; -import { FileSystemProviderErrorCode, toFileSystemProviderErrorCode } from 'vs/platform/files/common/files'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { AbstractMessageLogger, ILogger, ILoggerService, ILogService, log, LogLevel, parseLogLevel } from '../../../platform/log/common/log.js'; +import { OutputChannelUpdateMode } from '../../services/output/common/output.js'; +import { IExtHostConsumerFileSystem } from './extHostFileSystemConsumer.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtHostFileSystemInfo } from './extHostFileSystemInfo.js'; +import { toLocalISOString } from '../../../base/common/date.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { isString } from '../../../base/common/types.js'; +import { FileSystemProviderErrorCode, toFileSystemProviderErrorCode } from '../../../platform/files/common/files.js'; +import { Emitter } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; class ExtHostOutputChannel extends AbstractMessageLogger implements vscode.LogOutputChannel { diff --git a/src/vs/workbench/api/common/extHostProfileContentHandler.ts b/src/vs/workbench/api/common/extHostProfileContentHandler.ts index 19c2fb0d9..fbe8de654 100644 --- a/src/vs/workbench/api/common/extHostProfileContentHandler.ts +++ b/src/vs/workbench/api/common/extHostProfileContentHandler.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { isString } from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { ISaveProfileResult } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toDisposable } from '../../../base/common/lifecycle.js'; +import { isString } from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { ISaveProfileResult } from '../../services/userDataProfile/common/userDataProfile.js'; import type * as vscode from 'vscode'; -import { ExtHostProfileContentHandlersShape, IMainContext, MainContext, MainThreadProfileContentHandlersShape } from './extHost.protocol'; +import { ExtHostProfileContentHandlersShape, IMainContext, MainContext, MainThreadProfileContentHandlersShape } from './extHost.protocol.js'; export class ExtHostProfileContentHandlers implements ExtHostProfileContentHandlersShape { diff --git a/src/vs/workbench/api/common/extHostProgress.ts b/src/vs/workbench/api/common/extHostProgress.ts index 42d8484a6..0914c2e79 100644 --- a/src/vs/workbench/api/common/extHostProgress.ts +++ b/src/vs/workbench/api/common/extHostProgress.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { ProgressOptions } from 'vscode'; -import { MainThreadProgressShape, ExtHostProgressShape } from './extHost.protocol'; -import { ProgressLocation } from './extHostTypeConverters'; -import { Progress, IProgressStep } from 'vs/platform/progress/common/progress'; -import { CancellationTokenSource, CancellationToken } from 'vs/base/common/cancellation'; -import { throttle } from 'vs/base/common/decorators'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; +import { MainThreadProgressShape, ExtHostProgressShape } from './extHost.protocol.js'; +import { ProgressLocation } from './extHostTypeConverters.js'; +import { Progress, IProgressStep } from '../../../platform/progress/common/progress.js'; +import { CancellationTokenSource, CancellationToken } from '../../../base/common/cancellation.js'; +import { throttle } from '../../../base/common/decorators.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { onUnexpectedExternalError } from '../../../base/common/errors.js'; export class ExtHostProgress implements ExtHostProgressShape { diff --git a/src/vs/workbench/api/common/extHostQuickDiff.ts b/src/vs/workbench/api/common/extHostQuickDiff.ts index 04e7c04a1..f959ebf9d 100644 --- a/src/vs/workbench/api/common/extHostQuickDiff.ts +++ b/src/vs/workbench/api/common/extHostQuickDiff.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtHostQuickDiffShape, IMainContext, MainContext, MainThreadQuickDiffShape } from 'vs/workbench/api/common/extHost.protocol'; -import { asPromise } from 'vs/base/common/async'; -import { DocumentSelector } from 'vs/workbench/api/common/extHostTypeConverters'; -import { IURITransformer } from 'vs/base/common/uriIpc'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ExtHostQuickDiffShape, IMainContext, MainContext, MainThreadQuickDiffShape } from './extHost.protocol.js'; +import { asPromise } from '../../../base/common/async.js'; +import { DocumentSelector } from './extHostTypeConverters.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; export class ExtHostQuickDiff implements ExtHostQuickDiffShape { private static handlePool: number = 0; diff --git a/src/vs/workbench/api/common/extHostQuickOpen.ts b/src/vs/workbench/api/common/extHostQuickOpen.ts index 3a9075f95..a5194dce8 100644 --- a/src/vs/workbench/api/common/extHostQuickOpen.ts +++ b/src/vs/workbench/api/common/extHostQuickOpen.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { IExtHostWorkspaceProvider } from 'vs/workbench/api/common/extHostWorkspace'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { dispose, IDisposable } from '../../../base/common/lifecycle.js'; +import { ExtHostCommands } from './extHostCommands.js'; +import { IExtHostWorkspaceProvider } from './extHostWorkspace.js'; import { InputBox, InputBoxOptions, InputBoxValidationMessage, QuickInput, QuickInputButton, QuickPick, QuickPickItem, QuickPickItemButtonEvent, QuickPickOptions, WorkspaceFolder, WorkspaceFolderPickOptions } from 'vscode'; -import { ExtHostQuickOpenShape, IMainContext, MainContext, TransferQuickInput, TransferQuickInputButton, TransferQuickPickItemOrSeparator } from './extHost.protocol'; -import { URI } from 'vs/base/common/uri'; -import { ThemeIcon, QuickInputButtons, QuickPickItemKind, InputBoxValidationSeverity } from 'vs/workbench/api/common/extHostTypes'; -import { isCancellationError } from 'vs/base/common/errors'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { coalesce } from 'vs/base/common/arrays'; -import Severity from 'vs/base/common/severity'; -import { ThemeIcon as ThemeIconUtils } from 'vs/base/common/themables'; -import { isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { MarkdownString } from 'vs/workbench/api/common/extHostTypeConverters'; +import { ExtHostQuickOpenShape, IMainContext, MainContext, TransferQuickInput, TransferQuickInputButton, TransferQuickPickItemOrSeparator } from './extHost.protocol.js'; +import { URI } from '../../../base/common/uri.js'; +import { ThemeIcon, QuickInputButtons, QuickPickItemKind, InputBoxValidationSeverity } from './extHostTypes.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { coalesce } from '../../../base/common/arrays.js'; +import Severity from '../../../base/common/severity.js'; +import { ThemeIcon as ThemeIconUtils } from '../../../base/common/themables.js'; +import { isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { MarkdownString } from './extHostTypeConverters.js'; export type Item = string | QuickPickItem; diff --git a/src/vs/workbench/api/common/extHostRequireInterceptor.ts b/src/vs/workbench/api/common/extHostRequireInterceptor.ts index bcf03a6a0..f01e80dd5 100644 --- a/src/vs/workbench/api/common/extHostRequireInterceptor.ts +++ b/src/vs/workbench/api/common/extHostRequireInterceptor.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as performance from 'vs/base/common/performance'; -import { URI } from 'vs/base/common/uri'; -import { MainThreadTelemetryShape, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostConfigProvider, IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; +import * as performance from '../../../base/common/performance.js'; +import { URI } from '../../../base/common/uri.js'; +import { MainThreadTelemetryShape, MainContext } from './extHost.protocol.js'; +import { ExtHostConfigProvider, IExtHostConfiguration } from './extHostConfiguration.js'; +import { nullExtensionDescription } from '../../services/extensions/common/extensions.js'; import * as vscode from 'vscode'; -import { ExtensionIdentifierMap } from 'vs/platform/extensions/common/extensions'; -import { IExtensionApiFactory, IExtensionRegistries } from 'vs/workbench/api/common/extHost.api.impl'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ExtensionPaths, IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; +import { ExtensionIdentifierMap } from '../../../platform/extensions/common/extensions.js'; +import { IExtensionApiFactory, IExtensionRegistries } from './extHost.api.impl.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ExtensionPaths, IExtHostExtensionService } from './extHostExtensionService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { escapeRegExpCharacters } from '../../../base/common/strings.js'; interface LoadFunction { diff --git a/src/vs/workbench/api/common/extHostRpcService.ts b/src/vs/workbench/api/common/extHostRpcService.ts index c6df14903..7886259ae 100644 --- a/src/vs/workbench/api/common/extHostRpcService.ts +++ b/src/vs/workbench/api/common/extHostRpcService.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ProxyIdentifier, IRPCProtocol, Proxied } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { ProxyIdentifier, IRPCProtocol, Proxied } from '../../services/extensions/common/proxyIdentifier.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export const IExtHostRpcService = createDecorator('IExtHostRpcService'); diff --git a/src/vs/workbench/api/common/extHostSCM.ts b/src/vs/workbench/api/common/extHostSCM.ts index b07e8f498..53ddbe4d9 100644 --- a/src/vs/workbench/api/common/extHostSCM.ts +++ b/src/vs/workbench/api/common/extHostSCM.ts @@ -5,28 +5,28 @@ /* eslint-disable local/code-no-native-private */ -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Event, Emitter } from 'vs/base/common/event'; -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 } from './extHost.protocol'; -import { sortedDiff, equals } from 'vs/base/common/arrays'; -import { comparePaths } from 'vs/base/common/comparers'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { debounce } from '../../../base/common/decorators.js'; +import { DisposableStore, IDisposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { asPromise } from '../../../base/common/async.js'; +import { ExtHostCommands } from './extHostCommands.js'; +import { MainContext, MainThreadSCMShape, SCMRawResource, SCMRawResourceSplice, SCMRawResourceSplices, IMainContext, ExtHostSCMShape, ICommandDto, MainThreadTelemetryShape, SCMGroupFeatures, SCMHistoryItemDto, SCMHistoryItemChangeDto, SCMHistoryItemRefDto } from './extHost.protocol.js'; +import { sortedDiff, equals } from '../../../base/common/arrays.js'; +import { comparePaths } from '../../../base/common/comparers.js'; import type * as vscode from 'vscode'; -import { ISplice } from 'vs/base/common/sequence'; -import { ILogService } from 'vs/platform/log/common/log'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ExtensionIdentifierMap, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { MarkdownString } from 'vs/workbench/api/common/extHostTypeConverters'; -import { checkProposedApiEnabled, isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { Schemas } from 'vs/base/common/network'; -import { isLinux } from 'vs/base/common/platform'; +import { ISplice } from '../../../base/common/sequence.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { ExtensionIdentifierMap, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IMarkdownString } from '../../../base/common/htmlContent.js'; +import { MarkdownString } from './extHostTypeConverters.js'; +import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/extensions/common/extensions.js'; +import { ExtHostDocuments } from './extHostDocuments.js'; +import { Schemas } from '../../../base/common/network.js'; +import { isLinux } from '../../../base/common/platform.js'; type ProviderHandle = number; type GroupHandle = number; @@ -72,10 +72,15 @@ function getHistoryItemIconDto(icon: vscode.Uri | { light: vscode.Uri; dark: vsc } function toSCMHistoryItemDto(historyItem: vscode.SourceControlHistoryItem): SCMHistoryItemDto { - const icon = getHistoryItemIconDto(historyItem.icon); - const labels = historyItem.labels?.map(l => ({ title: l.title, icon: getHistoryItemIconDto(l.icon) })); + const references = historyItem.references?.map(r => ({ + ...r, icon: getHistoryItemIconDto(r.icon) + })); - return { ...historyItem, icon, labels }; + return { ...historyItem, references }; +} + +function toSCMHistoryItemRefDto(historyItemRef?: vscode.SourceControlHistoryItemRef): SCMHistoryItemRefDto | undefined { + return historyItemRef ? { ...historyItemRef, icon: getHistoryItemIconDto(historyItemRef.icon) } : undefined; } function compareResourceThemableDecorations(a: vscode.SourceControlResourceThemableDecorations, b: vscode.SourceControlResourceThemableDecorations): number { @@ -210,6 +215,10 @@ function compareResourceStates(a: vscode.SourceControlResourceState, b: vscode.S return -1; } + if (result !== 0) { + return result; + } + if (a.multiFileDiffEditorModifiedUri && b.multiFileDiffEditorModifiedUri) { result = comparePaths(a.multiFileDiffEditorModifiedUri.fsPath, b.multiFileDiffEditorModifiedUri.fsPath, true); } else if (a.multiFileDiffEditorModifiedUri) { @@ -217,6 +226,11 @@ function compareResourceStates(a: vscode.SourceControlResourceState, b: vscode.S } else if (b.multiFileDiffEditorModifiedUri) { return -1; } + + if (result !== 0) { + return result; + } + if (a.multiDiffEditorOriginalUri && b.multiDiffEditorOriginalUri) { result = comparePaths(a.multiDiffEditorOriginalUri.fsPath, b.multiDiffEditorOriginalUri.fsPath, true); } else if (a.multiDiffEditorOriginalUri) { @@ -567,7 +581,6 @@ class ExtHostSourceControl implements vscode.SourceControl { private _historyProvider: vscode.SourceControlHistoryProvider | undefined; private readonly _historyProviderDisposable = new MutableDisposable(); - private _historyProviderCurrentHistoryItemGroup: vscode.SourceControlHistoryItemGroup | undefined; get historyProvider(): vscode.SourceControlHistoryProvider | undefined { checkProposedApiEnabled(this._extension, 'scmHistoryProvider'); @@ -583,9 +596,23 @@ class ExtHostSourceControl implements vscode.SourceControl { this.#proxy.$updateSourceControl(this.handle, { hasHistoryProvider: !!historyProvider }); if (historyProvider) { - this._historyProviderDisposable.value.add(historyProvider.onDidChangeCurrentHistoryItemGroup(() => { - this._historyProviderCurrentHistoryItemGroup = historyProvider?.currentHistoryItemGroup; - this.#proxy.$onDidChangeHistoryProviderCurrentHistoryItemGroup(this.handle, this._historyProviderCurrentHistoryItemGroup); + this._historyProviderDisposable.value.add(historyProvider.onDidChangeCurrentHistoryItemRefs(() => { + const historyItemRef = toSCMHistoryItemRefDto(historyProvider?.currentHistoryItemRef); + const historyItemRemoteRef = toSCMHistoryItemRefDto(historyProvider?.currentHistoryItemRemoteRef); + const historyItemBaseRef = toSCMHistoryItemRefDto(historyProvider?.currentHistoryItemBaseRef); + + this.#proxy.$onDidChangeHistoryProviderCurrentHistoryItemRefs(this.handle, historyItemRef, historyItemRemoteRef, historyItemBaseRef); + })); + this._historyProviderDisposable.value.add(historyProvider.onDidChangeHistoryItemRefs((e) => { + if (e.added.length === 0 && e.modified.length === 0 && e.removed.length === 0) { + return; + } + + const added = e.added.map(ref => ({ ...ref, icon: getHistoryItemIconDto(ref.icon) })); + const modified = e.modified.map(ref => ({ ...ref, icon: getHistoryItemIconDto(ref.icon) })); + const removed = e.removed.map(ref => ({ ...ref, icon: getHistoryItemIconDto(ref.icon) })); + + this.#proxy.$onDidChangeHistoryProviderHistoryItemRefs(this.handle, { added, modified, removed, silent: e.silent }); })); } } @@ -967,40 +994,25 @@ export class ExtHostSCM implements ExtHostSCMShape { return Promise.resolve(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; - } - - async $resolveHistoryItemGroupCommonAncestor2(sourceControlHandle: number, historyItemGroupIds: string[], token: CancellationToken): Promise { + async $resolveHistoryItemRefsCommonAncestor(sourceControlHandle: number, historyItemRefs: string[], token: CancellationToken): Promise { const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; - return await historyProvider?.resolveHistoryItemGroupCommonAncestor2(historyItemGroupIds, token) ?? undefined; + return await historyProvider?.resolveHistoryItemRefsCommonAncestor(historyItemRefs, token) ?? undefined; } - async $provideHistoryItems(sourceControlHandle: number, historyItemGroupId: string, options: any, token: CancellationToken): Promise { + async $provideHistoryItemRefs(sourceControlHandle: number, historyItemRefs: string[] | undefined, token: CancellationToken): Promise { const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; - const historyItems = await historyProvider?.provideHistoryItems(historyItemGroupId, options, token); + const refs = await historyProvider?.provideHistoryItemRefs(historyItemRefs, token); - return historyItems?.map(item => toSCMHistoryItemDto(item)) ?? undefined; + return refs?.map(ref => ({ ...ref, icon: getHistoryItemIconDto(ref.icon) })) ?? undefined; } - async $provideHistoryItems2(sourceControlHandle: number, options: any, token: CancellationToken): Promise { + async $provideHistoryItems(sourceControlHandle: number, options: any, token: CancellationToken): Promise { const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; - const historyItems = await historyProvider?.provideHistoryItems2(options, token); + const historyItems = await historyProvider?.provideHistoryItems(options, token); return historyItems?.map(item => toSCMHistoryItemDto(item)) ?? undefined; } - async $provideHistoryItemSummary(sourceControlHandle: number, historyItemId: string, historyItemParentId: string | undefined, token: CancellationToken): Promise { - const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; - if (typeof historyProvider?.provideHistoryItemSummary !== 'function') { - return undefined; - } - - const historyItem = await historyProvider.provideHistoryItemSummary(historyItemId, historyItemParentId, token); - return historyItem ? toSCMHistoryItemDto(historyItem) : undefined; - } - async $provideHistoryItemChanges(sourceControlHandle: number, historyItemId: string, historyItemParentId: string | undefined, token: CancellationToken): Promise { const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; return await historyProvider?.provideHistoryItemChanges(historyItemId, historyItemParentId, token) ?? undefined; diff --git a/src/vs/workbench/api/common/extHostSearch.ts b/src/vs/workbench/api/common/extHostSearch.ts index bf7f40497..fbb111a79 100644 --- a/src/vs/workbench/api/common/extHostSearch.ts +++ b/src/vs/workbench/api/common/extHostSearch.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; import type * as vscode from 'vscode'; -import { ExtHostSearchShape, MainThreadSearchShape, MainContext } from '../common/extHost.protocol'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { FileSearchManager } from 'vs/workbench/services/search/common/fileSearchManager'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IRawFileQuery, ISearchCompleteStats, IFileQuery, IRawTextQuery, IRawQuery, ITextQuery, IFolderQuery, IRawAITextQuery, IAITextQuery } from 'vs/workbench/services/search/common/search'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { TextSearchManager } from 'vs/workbench/services/search/common/textSearchManager'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { revive } from 'vs/base/common/marshalling'; -import { OldAITextSearchProviderConverter, OldFileSearchProviderConverter, OldTextSearchProviderConverter } from 'vs/workbench/services/search/common/searchExtConversionTypes'; +import { ExtHostSearchShape, MainThreadSearchShape, MainContext } from './extHost.protocol.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { FileSearchManager } from '../../services/search/common/fileSearchManager.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IURITransformerService } from './extHostUriTransformerService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IRawFileQuery, ISearchCompleteStats, IFileQuery, IRawTextQuery, IRawQuery, ITextQuery, IFolderQuery, IRawAITextQuery, IAITextQuery } from '../../services/search/common/search.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { TextSearchManager } from '../../services/search/common/textSearchManager.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { OldAITextSearchProviderConverter, OldFileSearchProviderConverter, OldTextSearchProviderConverter } from '../../services/search/common/searchExtConversionTypes.js'; export interface IExtHostSearch extends ExtHostSearchShape { registerTextSearchProviderOld(scheme: string, provider: vscode.TextSearchProvider): IDisposable; @@ -198,6 +198,16 @@ export class ExtHostSearch implements IExtHostSearch { $enableExtensionHostSearch(): void { } + async $getAIName(handle: number): Promise { + const provider = this._aiTextSearchProvider.get(handle); + if (!provider || !provider.provideAITextSearchResults) { + return undefined; + } + + // if the provider is defined, but has no name, use default name + return provider.name ?? 'AI'; + } + protected createTextSearchManager(query: ITextQuery, provider: vscode.TextSearchProviderNew): TextSearchManager { return new TextSearchManager({ query, provider }, { readdir: resource => Promise.resolve([]), diff --git a/src/vs/workbench/api/common/extHostSecretState.ts b/src/vs/workbench/api/common/extHostSecretState.ts index 1e906df3f..314a158fe 100644 --- a/src/vs/workbench/api/common/extHostSecretState.ts +++ b/src/vs/workbench/api/common/extHostSecretState.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ExtHostSecretStateShape, MainContext, MainThreadSecretStateShape } from 'vs/workbench/api/common/extHost.protocol'; -import { Emitter } from 'vs/base/common/event'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { ExtHostSecretStateShape, MainContext, MainThreadSecretStateShape } from './extHost.protocol.js'; +import { Emitter } from '../../../base/common/event.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; export class ExtHostSecretState implements ExtHostSecretStateShape { private _proxy: MainThreadSecretStateShape; diff --git a/src/vs/workbench/api/common/extHostSecrets.ts b/src/vs/workbench/api/common/extHostSecrets.ts index 13fb3293a..f183b889f 100644 --- a/src/vs/workbench/api/common/extHostSecrets.ts +++ b/src/vs/workbench/api/common/extHostSecrets.ts @@ -7,10 +7,10 @@ import type * as vscode from 'vscode'; -import { ExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { ExtHostSecretState } from './extHostSecretState.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { Event } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; export class ExtensionSecrets implements vscode.SecretStorage { diff --git a/src/vs/workbench/api/common/extHostShare.ts b/src/vs/workbench/api/common/extHostShare.ts index 56cd94f38..d10bda088 100644 --- a/src/vs/workbench/api/common/extHostShare.ts +++ b/src/vs/workbench/api/common/extHostShare.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { ExtHostShareShape, IMainContext, IShareableItemDto, MainContext, MainThreadShareShape } from 'vs/workbench/api/common/extHost.protocol'; -import { DocumentSelector, Range } from 'vs/workbench/api/common/extHostTypeConverters'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI, UriComponents } from 'vs/base/common/uri'; +import { ExtHostShareShape, IMainContext, IShareableItemDto, MainContext, MainThreadShareShape } from './extHost.protocol.js'; +import { DocumentSelector, Range } from './extHostTypeConverters.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; export class ExtHostShare implements ExtHostShareShape { private static handlePool: number = 0; diff --git a/src/vs/workbench/api/common/extHostSpeech.ts b/src/vs/workbench/api/common/extHostSpeech.ts index 198eaee26..0900b33bd 100644 --- a/src/vs/workbench/api/common/extHostSpeech.ts +++ b/src/vs/workbench/api/common/extHostSpeech.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ExtHostSpeechShape, IMainContext, MainContext, MainThreadSpeechShape } from 'vs/workbench/api/common/extHost.protocol'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { ExtHostSpeechShape, IMainContext, MainContext, MainThreadSpeechShape } from './extHost.protocol.js'; import type * as vscode from 'vscode'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; export class ExtHostSpeech implements ExtHostSpeechShape { diff --git a/src/vs/workbench/api/common/extHostStatusBar.ts b/src/vs/workbench/api/common/extHostStatusBar.ts index 982cdc28c..327d53c5c 100644 --- a/src/vs/workbench/api/common/extHostStatusBar.ts +++ b/src/vs/workbench/api/common/extHostStatusBar.ts @@ -5,15 +5,15 @@ /* eslint-disable local/code-no-native-private */ -import { StatusBarAlignment as ExtHostStatusBarAlignment, Disposable, ThemeColor, asStatusBarItemIdentifier } from './extHostTypes'; +import { StatusBarAlignment as ExtHostStatusBarAlignment, Disposable, ThemeColor, asStatusBarItemIdentifier } from './extHostTypes.js'; import type * as vscode from 'vscode'; -import { MainContext, MainThreadStatusBarShape, IMainContext, ICommandDto, ExtHostStatusBarShape, StatusBarItemDto } from './extHost.protocol'; -import { localize } from 'vs/nls'; -import { CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { MarkdownString } from 'vs/workbench/api/common/extHostTypeConverters'; -import { isNumber } from 'vs/base/common/types'; +import { MainContext, MainThreadStatusBarShape, IMainContext, ICommandDto, ExtHostStatusBarShape, StatusBarItemDto } from './extHost.protocol.js'; +import { localize } from '../../../nls.js'; +import { CommandsConverter } from './extHostCommands.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { MarkdownString } from './extHostTypeConverters.js'; +import { isNumber } from '../../../base/common/types.js'; export class ExtHostStatusBarEntry implements vscode.StatusBarItem { diff --git a/src/vs/workbench/api/common/extHostStorage.ts b/src/vs/workbench/api/common/extHostStorage.ts index f5ea20880..f4cc16fc0 100644 --- a/src/vs/workbench/api/common/extHostStorage.ts +++ b/src/vs/workbench/api/common/extHostStorage.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MainContext, MainThreadStorageShape, ExtHostStorageShape } from './extHost.protocol'; -import { Emitter } from 'vs/base/common/event'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtensionIdWithVersion } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { ILogService } from 'vs/platform/log/common/log'; +import { MainContext, MainThreadStorageShape, ExtHostStorageShape } from './extHost.protocol.js'; +import { Emitter } from '../../../base/common/event.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtensionIdWithVersion } from '../../../platform/extensionManagement/common/extensionStorage.js'; +import { ILogService } from '../../../platform/log/common/log.js'; export interface IStorageChangeEvent { shared: boolean; diff --git a/src/vs/workbench/api/common/extHostStoragePaths.ts b/src/vs/workbench/api/common/extHostStoragePaths.ts index 713422242..b12bb7255 100644 --- a/src/vs/workbench/api/common/extHostStoragePaths.ts +++ b/src/vs/workbench/api/common/extHostStoragePaths.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IEnvironment, IStaticWorkspaceData } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { IExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { URI } from 'vs/base/common/uri'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IEnvironment, IStaticWorkspaceData } from '../../services/extensions/common/extensionHostProtocol.js'; +import { IExtHostConsumerFileSystem } from './extHostFileSystemConsumer.js'; +import { URI } from '../../../base/common/uri.js'; export const IExtensionStoragePaths = createDecorator('IExtensionStoragePaths'); diff --git a/src/vs/workbench/api/common/extHostTask.ts b/src/vs/workbench/api/common/extHostTask.ts index 99968d5d7..e0774e293 100644 --- a/src/vs/workbench/api/common/extHostTask.ts +++ b/src/vs/workbench/api/common/extHostTask.ts @@ -5,30 +5,30 @@ /* eslint-disable local/code-no-native-private */ -import { URI, UriComponents } from 'vs/base/common/uri'; -import { asPromise } from 'vs/base/common/async'; -import { Event, Emitter } from 'vs/base/common/event'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { asPromise } from '../../../base/common/async.js'; +import { Event, Emitter } from '../../../base/common/event.js'; -import { MainContext, MainThreadTaskShape, ExtHostTaskShape } from 'vs/workbench/api/common/extHost.protocol'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { IExtHostWorkspaceProvider, IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; +import { MainContext, MainThreadTaskShape, ExtHostTaskShape } from './extHost.protocol.js'; +import * as types from './extHostTypes.js'; +import { IExtHostWorkspaceProvider, IExtHostWorkspace } from './extHostWorkspace.js'; import type * as vscode from 'vscode'; -import * as tasks from '../common/shared/tasks'; -import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Schemas } from 'vs/base/common/network'; -import * as Platform from 'vs/base/common/platform'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { USER_TASKS_GROUP_KEY } from 'vs/workbench/contrib/tasks/common/tasks'; -import { ErrorNoTelemetry, NotSupportedError } from 'vs/base/common/errors'; -import { asArray } from 'vs/base/common/arrays'; +import * as tasks from './shared/tasks.js'; +import { IExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { IExtHostConfiguration } from './extHostConfiguration.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { IExtHostTerminalService } from './extHostTerminalService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { Schemas } from '../../../base/common/network.js'; +import * as Platform from '../../../base/common/platform.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostApiDeprecationService } from './extHostApiDeprecationService.js'; +import { USER_TASKS_GROUP_KEY } from '../../contrib/tasks/common/tasks.js'; +import { ErrorNoTelemetry, NotSupportedError } from '../../../base/common/errors.js'; +import { asArray } from '../../../base/common/arrays.js'; export interface IExtHostTask extends ExtHostTaskShape { diff --git a/src/vs/workbench/api/common/extHostTelemetry.ts b/src/vs/workbench/api/common/extHostTelemetry.ts index 64a128696..ffef0eeb5 100644 --- a/src/vs/workbench/api/common/extHostTelemetry.ts +++ b/src/vs/workbench/api/common/extHostTelemetry.ts @@ -4,20 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Event, Emitter } from 'vs/base/common/event'; -import { ExtHostTelemetryShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ICommonProperties, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { ILogger, ILoggerService, LogLevel, isLogLevel } from 'vs/platform/log/common/log'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { UIKind } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { getRemoteName } from 'vs/platform/remote/common/remoteHosts'; -import { cleanData, cleanRemoteAuthority, extensionTelemetryLogChannelId } from 'vs/platform/telemetry/common/telemetryUtils'; -import { mixin } from 'vs/base/common/objects'; -import { URI } from 'vs/base/common/uri'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { ExtHostTelemetryShape } from './extHost.protocol.js'; +import { ICommonProperties, TelemetryLevel } from '../../../platform/telemetry/common/telemetry.js'; +import { ILogger, ILoggerService, LogLevel, isLogLevel } from '../../../platform/log/common/log.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { UIKind } from '../../services/extensions/common/extensionHostProtocol.js'; +import { getRemoteName } from '../../../platform/remote/common/remoteHosts.js'; +import { cleanData, cleanRemoteAuthority, extensionTelemetryLogChannelId } from '../../../platform/telemetry/common/telemetryUtils.js'; +import { mixin } from '../../../base/common/objects.js'; +import { URI } from '../../../base/common/uri.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { localize } from '../../../nls.js'; export class ExtHostTelemetry extends Disposable implements ExtHostTelemetryShape { diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 9ce31e714..39ce96961 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -4,29 +4,29 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { Event, Emitter } from 'vs/base/common/event'; -import { ExtHostTerminalServiceShape, MainContext, MainThreadTerminalServiceShape, ITerminalDimensionsDto, ITerminalLinkDto, ExtHostTerminalIdentifier, ICommandDto, ITerminalQuickFixOpenerDto, ITerminalQuickFixTerminalCommandDto, TerminalCommandMatchResultDto, ITerminalCommandDto } from 'vs/workbench/api/common/extHost.protocol'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { URI } from 'vs/base/common/uri'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IDisposable, DisposableStore, Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { Disposable as VSCodeDisposable, EnvironmentVariableMutatorType, TerminalExitReason } from './extHostTypes'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { localize } from 'vs/nls'; -import { NotSupportedError } from 'vs/base/common/errors'; -import { serializeEnvironmentDescriptionMap, serializeEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariableShared'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IEnvironmentVariableCollectionDescription, IEnvironmentVariableMutator, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable'; -import { ICreateContributedTerminalProfileOptions, IProcessReadyEvent, IShellLaunchConfigDto, ITerminalChildProcess, ITerminalLaunchError, ITerminalProfile, TerminalIcon, TerminalLocation, IProcessProperty, ProcessPropertyType, IProcessPropertyMap } from 'vs/platform/terminal/common/terminal'; -import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; -import { ThemeColor } from 'vs/base/common/themables'; -import { Promises } from 'vs/base/common/async'; -import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { TerminalQuickFix, ViewColumn } from 'vs/workbench/api/common/extHostTypeConverters'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { ISerializedTerminalInstanceContext } from 'vs/workbench/contrib/terminal/common/terminal'; +import { Event, Emitter } from '../../../base/common/event.js'; +import { ExtHostTerminalServiceShape, MainContext, MainThreadTerminalServiceShape, ITerminalDimensionsDto, ITerminalLinkDto, ExtHostTerminalIdentifier, ICommandDto, ITerminalQuickFixOpenerDto, ITerminalQuickFixTerminalCommandDto, TerminalCommandMatchResultDto, ITerminalCommandDto } from './extHost.protocol.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { URI } from '../../../base/common/uri.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IDisposable, DisposableStore, Disposable, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { Disposable as VSCodeDisposable, EnvironmentVariableMutatorType, TerminalExitReason } from './extHostTypes.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { localize } from '../../../nls.js'; +import { NotSupportedError } from '../../../base/common/errors.js'; +import { serializeEnvironmentDescriptionMap, serializeEnvironmentVariableCollection } from '../../../platform/terminal/common/environmentVariableShared.js'; +import { CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IEnvironmentVariableCollectionDescription, IEnvironmentVariableMutator, ISerializableEnvironmentVariableCollection } from '../../../platform/terminal/common/environmentVariable.js'; +import { ICreateContributedTerminalProfileOptions, IProcessReadyEvent, IShellLaunchConfigDto, ITerminalChildProcess, ITerminalLaunchError, ITerminalProfile, TerminalIcon, TerminalLocation, IProcessProperty, ProcessPropertyType, IProcessPropertyMap } from '../../../platform/terminal/common/terminal.js'; +import { TerminalDataBufferer } from '../../../platform/terminal/common/terminalDataBuffering.js'; +import { ThemeColor } from '../../../base/common/themables.js'; +import { Promises } from '../../../base/common/async.js'; +import { EditorGroupColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { TerminalQuickFix, ViewColumn } from './extHostTypeConverters.js'; +import { IExtHostCommands } from './extHostCommands.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { ISerializedTerminalInstanceContext } from '../../contrib/terminal/common/terminal.js'; export interface IExtHostTerminalService extends ExtHostTerminalServiceShape, IDisposable { diff --git a/src/vs/workbench/api/common/extHostTerminalShellIntegration.ts b/src/vs/workbench/api/common/extHostTerminalShellIntegration.ts index 06417a279..8acc68b0d 100644 --- a/src/vs/workbench/api/common/extHostTerminalShellIntegration.ts +++ b/src/vs/workbench/api/common/extHostTerminalShellIntegration.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { TerminalShellExecutionCommandLineConfidence } from './extHostTypes'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { MainContext, type ExtHostTerminalShellIntegrationShape, type MainThreadTerminalShellIntegrationShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { Emitter, type Event } from 'vs/base/common/event'; -import { URI, type UriComponents } from 'vs/base/common/uri'; -import { AsyncIterableObject, Barrier, type AsyncIterableEmitter } from 'vs/base/common/async'; +import { TerminalShellExecutionCommandLineConfidence } from './extHostTypes.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { MainContext, type ExtHostTerminalShellIntegrationShape, type MainThreadTerminalShellIntegrationShape } from './extHost.protocol.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { IExtHostTerminalService } from './extHostTerminalService.js'; +import { Emitter, type Event } from '../../../base/common/event.js'; +import { URI, type UriComponents } from '../../../base/common/uri.js'; +import { AsyncIterableObject, Barrier, type AsyncIterableEmitter } from '../../../base/common/async.js'; export interface IExtHostTerminalShellIntegration extends ExtHostTerminalShellIntegrationShape { readonly _serviceBrand: undefined; diff --git a/src/vs/workbench/api/common/extHostTestItem.ts b/src/vs/workbench/api/common/extHostTestItem.ts index 496cc12a0..7c4bfe2cd 100644 --- a/src/vs/workbench/api/common/extHostTestItem.ts +++ b/src/vs/workbench/api/common/extHostTestItem.ts @@ -2,15 +2,15 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as editorRange from 'vs/editor/common/core/range'; -import { createPrivateApiFor, getPrivateApiFor, IExtHostTestItemApi } from 'vs/workbench/api/common/extHostTestingPrivateApi'; -import { TestId, TestIdPathParts } from 'vs/workbench/contrib/testing/common/testId'; -import { createTestItemChildren, ExtHostTestItemEvent, ITestChildrenLike, ITestItemApi, ITestItemChildren, TestItemCollection, TestItemEventOp } from 'vs/workbench/contrib/testing/common/testItemCollection'; -import { denamespaceTestTag, ITestItem, ITestItemContext } from 'vs/workbench/contrib/testing/common/testTypes'; +import * as editorRange from '../../../editor/common/core/range.js'; +import { createPrivateApiFor, getPrivateApiFor, IExtHostTestItemApi } from './extHostTestingPrivateApi.js'; +import { TestId, TestIdPathParts } from '../../contrib/testing/common/testId.js'; +import { createTestItemChildren, ExtHostTestItemEvent, ITestChildrenLike, ITestItemApi, ITestItemChildren, TestItemCollection, TestItemEventOp } from '../../contrib/testing/common/testItemCollection.js'; +import { denamespaceTestTag, ITestItem, ITestItemContext } from '../../contrib/testing/common/testTypes.js'; import type * as vscode from 'vscode'; -import * as Convert from 'vs/workbench/api/common/extHostTypeConverters'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; +import * as Convert from './extHostTypeConverters.js'; +import { URI } from '../../../base/common/uri.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; const testItemPropAccessor = ( api: IExtHostTestItemApi, diff --git a/src/vs/workbench/api/common/extHostTesting.ts b/src/vs/workbench/api/common/extHostTesting.ts index 456816da2..e3ae92ae4 100644 --- a/src/vs/workbench/api/common/extHostTesting.ts +++ b/src/vs/workbench/api/common/extHostTesting.ts @@ -5,33 +5,33 @@ /* eslint-disable local/code-no-native-private */ -import { RunOnceScheduler } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Emitter, Event } from 'vs/base/common/event'; -import { createSingleCallFunction } from 'vs/base/common/functional'; -import { hash } from 'vs/base/common/hash'; -import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { isDefined } from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ExtHostTestingShape, ILocationDto, MainContext, MainThreadTestingShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostTestItemCollection, TestItemImpl, TestItemRootImpl, toItemFromContext } from 'vs/workbench/api/common/extHostTestItem'; -import * as Convert from 'vs/workbench/api/common/extHostTypeConverters'; -import { FileCoverage, TestRunProfileKind, TestRunRequest } from 'vs/workbench/api/common/extHostTypes'; -import { TestCommandId } from 'vs/workbench/contrib/testing/common/constants'; -import { TestId, TestPosition } from 'vs/workbench/contrib/testing/common/testId'; -import { InvalidTestItemError } from 'vs/workbench/contrib/testing/common/testItemCollection'; -import { AbstractIncrementalTestCollection, CoverageDetails, ICallProfileRunHandler, ISerializedTestResults, IStartControllerTests, IStartControllerTestsResult, ITestErrorMessage, ITestItem, ITestItemContext, ITestMessageMenuArgs, ITestRunProfile, IncrementalChangeCollector, IncrementalTestCollectionItem, InternalTestItem, TestControllerCapability, TestMessageFollowupRequest, TestMessageFollowupResponse, TestResultState, TestRunProfileBitset, TestsDiff, TestsDiffOp, isStartControllerTests } from 'vs/workbench/contrib/testing/common/testTypes'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { createSingleCallFunction } from '../../../base/common/functional.js'; +import { hash } from '../../../base/common/hash.js'; +import { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { isDefined } from '../../../base/common/types.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IPosition } from '../../../editor/common/core/position.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ExtHostTestingShape, ILocationDto, MainContext, MainThreadTestingShape } from './extHost.protocol.js'; +import { IExtHostCommands } from './extHostCommands.js'; +import { IExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ExtHostTestItemCollection, TestItemImpl, TestItemRootImpl, toItemFromContext } from './extHostTestItem.js'; +import * as Convert from './extHostTypeConverters.js'; +import { FileCoverage, TestRunProfileKind, TestRunRequest } from './extHostTypes.js'; +import { TestCommandId } from '../../contrib/testing/common/constants.js'; +import { TestId, TestPosition } from '../../contrib/testing/common/testId.js'; +import { InvalidTestItemError } from '../../contrib/testing/common/testItemCollection.js'; +import { AbstractIncrementalTestCollection, CoverageDetails, ICallProfileRunHandler, ISerializedTestResults, IStartControllerTests, IStartControllerTestsResult, ITestErrorMessage, ITestItem, ITestItemContext, ITestMessageMenuArgs, ITestRunProfile, IncrementalChangeCollector, IncrementalTestCollectionItem, InternalTestItem, TestControllerCapability, TestMessageFollowupRequest, TestMessageFollowupResponse, TestResultState, TestRunProfileBitset, TestsDiff, TestsDiffOp, isStartControllerTests } from '../../contrib/testing/common/testTypes.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; import type * as vscode from 'vscode'; interface ControllerInfo { diff --git a/src/vs/workbench/api/common/extHostTestingPrivateApi.ts b/src/vs/workbench/api/common/extHostTestingPrivateApi.ts index f0870fd5a..ea320c2a8 100644 --- a/src/vs/workbench/api/common/extHostTestingPrivateApi.ts +++ b/src/vs/workbench/api/common/extHostTestingPrivateApi.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ExtHostTestItemEvent, InvalidTestItemError } from 'vs/workbench/contrib/testing/common/testItemCollection'; +import { ExtHostTestItemEvent, InvalidTestItemError } from '../../contrib/testing/common/testItemCollection.js'; import * as vscode from 'vscode'; export interface IExtHostTestItemApi { diff --git a/src/vs/workbench/api/common/extHostTextEditor.ts b/src/vs/workbench/api/common/extHostTextEditor.ts index 73334e5ac..cba39eb86 100644 --- a/src/vs/workbench/api/common/extHostTextEditor.ts +++ b/src/vs/workbench/api/common/extHostTextEditor.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ok } from 'vs/base/common/assert'; -import { ReadonlyError, illegalArgument } from 'vs/base/common/errors'; -import { IdGenerator } from 'vs/base/common/idGenerator'; -import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; -import { IRange } from 'vs/editor/common/core/range'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; -import { IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, MainThreadTextEditorsShape } from 'vs/workbench/api/common/extHost.protocol'; -import * as TypeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { EndOfLine, Position, Range, Selection, SnippetString, TextEditorLineNumbersStyle, TextEditorRevealType } from 'vs/workbench/api/common/extHostTypes'; +import { ok } from '../../../base/common/assert.js'; +import { ReadonlyError, illegalArgument } from '../../../base/common/errors.js'; +import { IdGenerator } from '../../../base/common/idGenerator.js'; +import { TextEditorCursorStyle } from '../../../editor/common/config/editorOptions.js'; +import { IRange } from '../../../editor/common/core/range.js'; +import { ISingleEditOperation } from '../../../editor/common/core/editOperation.js'; +import { IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, MainThreadTextEditorsShape } from './extHost.protocol.js'; +import * as TypeConverters from './extHostTypeConverters.js'; +import { EndOfLine, Position, Range, Selection, SnippetString, TextEditorLineNumbersStyle, TextEditorRevealType } from './extHostTypes.js'; import type * as vscode from 'vscode'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Lazy } from 'vs/base/common/lazy'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { Lazy } from '../../../base/common/lazy.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; export class TextEditorDecorationType { diff --git a/src/vs/workbench/api/common/extHostTextEditors.ts b/src/vs/workbench/api/common/extHostTextEditors.ts index 277422f9a..178c6c5be 100644 --- a/src/vs/workbench/api/common/extHostTextEditors.ts +++ b/src/vs/workbench/api/common/extHostTextEditors.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostEditorsShape, IEditorPropertiesChangeData, IMainContext, ITextDocumentShowOptions, ITextEditorPositionData, MainContext, MainThreadTextEditorsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { ExtHostTextEditor, TextEditorDecorationType } from 'vs/workbench/api/common/extHostTextEditor'; -import * as TypeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { TextEditorSelectionChangeKind } from 'vs/workbench/api/common/extHostTypes'; +import * as arrays from '../../../base/common/arrays.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostEditorsShape, IEditorPropertiesChangeData, IMainContext, ITextDocumentShowOptions, ITextEditorPositionData, MainContext, MainThreadTextEditorsShape } from './extHost.protocol.js'; +import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { ExtHostTextEditor, TextEditorDecorationType } from './extHostTextEditor.js'; +import * as TypeConverters from './extHostTypeConverters.js'; +import { TextEditorSelectionChangeKind } from './extHostTypes.js'; import * as vscode from 'vscode'; export class ExtHostEditors extends Disposable implements ExtHostEditorsShape { diff --git a/src/vs/workbench/api/common/extHostTheming.ts b/src/vs/workbench/api/common/extHostTheming.ts index 1bcb3cad0..0f512fcf0 100644 --- a/src/vs/workbench/api/common/extHostTheming.ts +++ b/src/vs/workbench/api/common/extHostTheming.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ColorTheme, ColorThemeKind } from './extHostTypes'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostThemingShape } from 'vs/workbench/api/common/extHost.protocol'; -import { Emitter, Event } from 'vs/base/common/event'; +import { ColorTheme, ColorThemeKind } from './extHostTypes.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { ExtHostThemingShape } from './extHost.protocol.js'; +import { Emitter, Event } from '../../../base/common/event.js'; export class ExtHostTheming implements ExtHostThemingShape { diff --git a/src/vs/workbench/api/common/extHostTimeline.ts b/src/vs/workbench/api/common/extHostTimeline.ts index f769766f5..4bfa096c1 100644 --- a/src/vs/workbench/api/common/extHostTimeline.ts +++ b/src/vs/workbench/api/common/extHostTimeline.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { UriComponents, URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ExtHostTimelineShape, MainThreadTimelineShape, IMainContext, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { Timeline, TimelineItem, TimelineOptions, TimelineProvider } from 'vs/workbench/contrib/timeline/common/timeline'; -import { IDisposable, toDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { CommandsConverter, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ThemeIcon, MarkdownString as MarkdownStringType } from 'vs/workbench/api/common/extHostTypes'; -import { MarkdownString } from 'vs/workbench/api/common/extHostTypeConverters'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { isString } from 'vs/base/common/types'; +import { UriComponents, URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ExtHostTimelineShape, MainThreadTimelineShape, IMainContext, MainContext } from './extHost.protocol.js'; +import { Timeline, TimelineItem, TimelineOptions, TimelineProvider } from '../../contrib/timeline/common/timeline.js'; +import { IDisposable, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { CommandsConverter, ExtHostCommands } from './extHostCommands.js'; +import { ThemeIcon, MarkdownString as MarkdownStringType } from './extHostTypes.js'; +import { MarkdownString } from './extHostTypeConverters.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; +import { MarshalledId } from '../../../base/common/marshallingIds.js'; +import { isString } from '../../../base/common/types.js'; export interface IExtHostTimeline extends ExtHostTimelineShape { readonly _serviceBrand: undefined; diff --git a/src/vs/workbench/api/common/extHostTreeViews.ts b/src/vs/workbench/api/common/extHostTreeViews.ts index ba5e9aa7c..d3c2aae3c 100644 --- a/src/vs/workbench/api/common/extHostTreeViews.ts +++ b/src/vs/workbench/api/common/extHostTreeViews.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; +import { localize } from '../../../nls.js'; import type * as vscode from 'vscode'; -import { basename } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { CheckboxUpdate, DataTransferDTO, ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.protocol'; -import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions, TreeCommand, TreeViewPaneHandleArg, ITreeItemCheckboxState, NoTreeViewError } from 'vs/workbench/common/views'; -import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; -import { asPromise } from 'vs/base/common/async'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { isUndefinedOrNull, isString } from 'vs/base/common/types'; -import { equals, coalesce } from 'vs/base/common/arrays'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { MarkdownString, ViewBadge, DataTransfer } from 'vs/workbench/api/common/extHostTypeConverters'; -import { IMarkdownString, isMarkdownString } from 'vs/base/common/htmlContent'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { ITreeViewsDnDService, TreeViewsDnDService } from 'vs/editor/common/services/treeViewsDnd'; -import { IAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility'; -import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; +import { basename } from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import { CheckboxUpdate, DataTransferDTO, ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.protocol.js'; +import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions, TreeCommand, TreeViewPaneHandleArg, ITreeItemCheckboxState, NoTreeViewError } from '../../common/views.js'; +import { ExtHostCommands, CommandsConverter } from './extHostCommands.js'; +import { asPromise } from '../../../base/common/async.js'; +import * as extHostTypes from './extHostTypes.js'; +import { isUndefinedOrNull, isString } from '../../../base/common/types.js'; +import { equals, coalesce } from '../../../base/common/arrays.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { MarkdownString, ViewBadge, DataTransfer } from './extHostTypeConverters.js'; +import { IMarkdownString, isMarkdownString } from '../../../base/common/htmlContent.js'; +import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js'; +import { ITreeViewsDnDService, TreeViewsDnDService } from '../../../editor/common/services/treeViewsDnd.js'; +import { IAccessibilityInformation } from '../../../platform/accessibility/common/accessibility.js'; +import { checkProposedApiEnabled } from '../../services/extensions/common/extensions.js'; type TreeItemHandle = string; diff --git a/src/vs/workbench/api/common/extHostTunnelService.ts b/src/vs/workbench/api/common/extHostTunnelService.ts index 650b852e1..17d8417ea 100644 --- a/src/vs/workbench/api/common/extHostTunnelService.ts +++ b/src/vs/workbench/api/common/extHostTunnelService.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import * as nls from 'vs/nls'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { DisposableTunnel, ProvidedOnAutoForward, ProvidedPortAttributes, RemoteTunnel, TunnelCreationOptions, TunnelOptions, TunnelPrivacyId } from 'vs/platform/tunnel/common/tunnel'; -import { ExtHostTunnelServiceShape, MainContext, MainThreadTunnelServiceShape, PortAttributesSelector, TunnelDto } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { CandidatePort } from 'vs/workbench/services/remote/common/tunnelModel'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import * as nls from '../../../nls.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { DisposableTunnel, ProvidedOnAutoForward, ProvidedPortAttributes, RemoteTunnel, TunnelCreationOptions, TunnelOptions, TunnelPrivacyId } from '../../../platform/tunnel/common/tunnel.js'; +import { ExtHostTunnelServiceShape, MainContext, MainThreadTunnelServiceShape, PortAttributesSelector, TunnelDto } from './extHost.protocol.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import * as types from './extHostTypes.js'; +import { CandidatePort } from '../../services/remote/common/tunnelModel.js'; import * as vscode from 'vscode'; class ExtensionTunnel extends DisposableTunnel implements vscode.Tunnel { } @@ -162,10 +162,10 @@ export class ExtHostTunnelService extends Disposable implements IExtHostTunnelSe protocol: information.tunnelFeatures.protocol === undefined ? true : information.tunnelFeatures.protocol, } : undefined; - this._proxy.$setTunnelProvider(tunnelFeatures); + this._proxy.$setTunnelProvider(tunnelFeatures, true); return Promise.resolve(toDisposable(() => { this._forwardPortProvider = undefined; - this._proxy.$setTunnelProvider(undefined); + this._proxy.$setTunnelProvider(undefined, false); })); } @@ -214,7 +214,7 @@ export class ExtHostTunnelService extends Disposable implements IExtHostTunnelSe protocol: true } : undefined; - this._proxy.$setTunnelProvider(tunnelFeatures); + this._proxy.$setTunnelProvider(tunnelFeatures, !!provider.tunnelFactory); } } else { this._forwardPortProvider = undefined; diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index b0e7f785f..f893d7e77 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -3,57 +3,57 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { asArray, coalesce, isNonEmptyArray } from 'vs/base/common/arrays'; -import { VSBuffer, encodeBase64 } from 'vs/base/common/buffer'; -import { IDataTransferFile, IDataTransferItem, UriList } from 'vs/base/common/dataTransfer'; -import { createSingleCallFunction } from 'vs/base/common/functional'; -import * as htmlContent from 'vs/base/common/htmlContent'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ResourceMap, ResourceSet } from 'vs/base/common/map'; -import * as marked from 'vs/base/common/marked/marked'; -import { parse, revive } from 'vs/base/common/marshalling'; -import { Mimes } from 'vs/base/common/mime'; -import { cloneAndChange } from 'vs/base/common/objects'; -import { IPrefixTreeNode, WellDefinedPrefixTree } from 'vs/base/common/prefixTree'; -import { basename } from 'vs/base/common/resources'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { isDefined, isEmptyObject, isNumber, isString, isUndefinedOrNull } from 'vs/base/common/types'; -import { URI, UriComponents, isUriComponents } from 'vs/base/common/uri'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; -import { IPosition } from 'vs/editor/common/core/position'; -import * as editorRange from 'vs/editor/common/core/range'; -import { ISelection } from 'vs/editor/common/core/selection'; -import { IContentDecorationRenderOptions, IDecorationOptions, IDecorationRenderOptions, IThemeDecorationRenderOptions } from 'vs/editor/common/editorCommon'; -import * as encodedTokenAttributes from 'vs/editor/common/encodedTokenAttributes'; -import * as languageSelector from 'vs/editor/common/languageSelector'; -import * as languages from 'vs/editor/common/languages'; -import { EndOfLineSequence, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { IMarkerData, IRelatedInformation, MarkerSeverity, MarkerTag } from 'vs/platform/markers/common/markers'; -import { ProgressLocation as MainProgressLocation } from 'vs/platform/progress/common/progress'; -import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; -import { CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; -import { getPrivateApiFor } from 'vs/workbench/api/common/extHostTestingPrivateApi'; -import { DEFAULT_EDITOR_ASSOCIATION, SaveReason } from 'vs/workbench/common/editor'; -import { IViewBadge } from 'vs/workbench/common/views'; -import { ChatAgentLocation, IChatAgentRequest, IChatAgentResult } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { IChatRequestVariableEntry } from 'vs/workbench/contrib/chat/common/chatModel'; -import { IChatAgentDetection, IChatAgentMarkdownContentWithVulnerability, IChatCodeCitation, IChatCommandButton, IChatConfirmation, IChatContentInlineReference, IChatContentReference, IChatFollowup, IChatMarkdownContent, IChatMoveMessage, IChatProgressMessage, IChatTaskDto, IChatTaskResult, IChatTextEdit, IChatTreeData, IChatUserActionEvent, IChatWarningMessage } from 'vs/workbench/contrib/chat/common/chatService'; -import { IToolData, IToolResult } from 'vs/workbench/contrib/chat/common/languageModelToolsService'; -import * as chatProvider from 'vs/workbench/contrib/chat/common/languageModels'; -import { DebugTreeItemCollapsibleState, IDebugVisualizationTreeItem } from 'vs/workbench/contrib/debug/common/debug'; -import * as notebooks from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; -import * as search from 'vs/workbench/contrib/search/common/search'; -import { TestId } from 'vs/workbench/contrib/testing/common/testId'; -import { CoverageDetails, DetailType, ICoverageCount, IFileCoverage, ISerializedTestResults, ITestErrorMessage, ITestItem, ITestTag, TestMessageType, TestResultItem, denamespaceTestTag, namespaceTestTag } from 'vs/workbench/contrib/testing/common/testTypes'; -import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { ACTIVE_GROUP, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { Dto } from 'vs/workbench/services/extensions/common/proxyIdentifier'; import type * as vscode from 'vscode'; -import * as types from './extHostTypes'; +import { asArray, coalesce, isNonEmptyArray } from '../../../base/common/arrays.js'; +import { VSBuffer, encodeBase64 } from '../../../base/common/buffer.js'; +import { IDataTransferFile, IDataTransferItem, UriList } from '../../../base/common/dataTransfer.js'; +import { createSingleCallFunction } from '../../../base/common/functional.js'; +import * as htmlContent from '../../../base/common/htmlContent.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { ResourceMap, ResourceSet } from '../../../base/common/map.js'; +import * as marked from '../../../base/common/marked/marked.js'; +import { parse, revive } from '../../../base/common/marshalling.js'; +import { Mimes } from '../../../base/common/mime.js'; +import { cloneAndChange } from '../../../base/common/objects.js'; +import { IPrefixTreeNode, WellDefinedPrefixTree } from '../../../base/common/prefixTree.js'; +import { basename } from '../../../base/common/resources.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { isDefined, isEmptyObject, isNumber, isString, isUndefinedOrNull } from '../../../base/common/types.js'; +import { URI, UriComponents, isUriComponents } from '../../../base/common/uri.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { RenderLineNumbersType } from '../../../editor/common/config/editorOptions.js'; +import { IPosition } from '../../../editor/common/core/position.js'; +import * as editorRange from '../../../editor/common/core/range.js'; +import { ISelection } from '../../../editor/common/core/selection.js'; +import { IContentDecorationRenderOptions, IDecorationOptions, IDecorationRenderOptions, IThemeDecorationRenderOptions } from '../../../editor/common/editorCommon.js'; +import * as encodedTokenAttributes from '../../../editor/common/encodedTokenAttributes.js'; +import * as languageSelector from '../../../editor/common/languageSelector.js'; +import * as languages from '../../../editor/common/languages.js'; +import { EndOfLineSequence, TrackedRangeStickiness } from '../../../editor/common/model.js'; +import { ITextEditorOptions } from '../../../platform/editor/common/editor.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { IMarkerData, IRelatedInformation, MarkerSeverity, MarkerTag } from '../../../platform/markers/common/markers.js'; +import { ProgressLocation as MainProgressLocation } from '../../../platform/progress/common/progress.js'; +import { DEFAULT_EDITOR_ASSOCIATION, SaveReason } from '../../common/editor.js'; +import { IViewBadge } from '../../common/views.js'; +import { ChatAgentLocation, IChatAgentRequest, IChatAgentResult } from '../../contrib/chat/common/chatAgents.js'; +import { IChatRequestVariableEntry } from '../../contrib/chat/common/chatModel.js'; +import { IChatAgentDetection, IChatAgentMarkdownContentWithVulnerability, IChatCodeCitation, IChatCommandButton, IChatConfirmation, IChatContentInlineReference, IChatContentReference, IChatFollowup, IChatMarkdownContent, IChatMoveMessage, IChatProgressMessage, IChatResponseCodeblockUriPart, IChatTaskDto, IChatTaskResult, IChatTextEdit, IChatTreeData, IChatUserActionEvent, IChatWarningMessage } from '../../contrib/chat/common/chatService.js'; +import { IToolData } from '../../contrib/chat/common/languageModelToolsService.js'; +import * as chatProvider from '../../contrib/chat/common/languageModels.js'; +import { DebugTreeItemCollapsibleState, IDebugVisualizationTreeItem } from '../../contrib/debug/common/debug.js'; +import * as notebooks from '../../contrib/notebook/common/notebookCommon.js'; +import { ICellRange } from '../../contrib/notebook/common/notebookRange.js'; +import * as search from '../../contrib/search/common/search.js'; +import { TestId } from '../../contrib/testing/common/testId.js'; +import { CoverageDetails, DetailType, ICoverageCount, IFileCoverage, ISerializedTestResults, ITestErrorMessage, ITestItem, ITestTag, TestMessageType, TestResultItem, denamespaceTestTag, namespaceTestTag } from '../../contrib/testing/common/testTypes.js'; +import { EditorGroupColumn } from '../../services/editor/common/editorGroupColumn.js'; +import { ACTIVE_GROUP, SIDE_GROUP } from '../../services/editor/common/editorService.js'; +import { Dto } from '../../services/extensions/common/proxyIdentifier.js'; +import * as extHostProtocol from './extHost.protocol.js'; +import { CommandsConverter } from './extHostCommands.js'; +import { getPrivateApiFor } from './extHostTestingPrivateApi.js'; +import * as types from './extHostTypes.js'; export namespace Command { @@ -1623,27 +1623,51 @@ export namespace MappedEditsContext { !!v && typeof v === 'object' && 'documents' in v && Array.isArray(v.documents) && - v.documents.every(subArr => - Array.isArray(subArr) && - subArr.every(docRef => - docRef && typeof docRef === 'object' && - 'uri' in docRef && URI.isUri(docRef.uri) && - 'version' in docRef && typeof docRef.version === 'number' && - 'ranges' in docRef && Array.isArray(docRef.ranges) && docRef.ranges.every((r: unknown) => r instanceof types.Range) - ) - ) + v.documents.every( + subArr => Array.isArray(subArr) && + subArr.every(DocumentContextItem.is)) ); } export function from(extContext: vscode.MappedEditsContext): languages.MappedEditsContext { return { documents: extContext.documents.map((subArray) => - subArray.map((r) => ({ - uri: URI.from(r.uri), - version: r.version, - ranges: r.ranges.map((r) => Range.from(r)), - })) + subArray.map(DocumentContextItem.from) ), + conversation: extContext.conversation?.map(item => ( + (item.type === 'request') ? + { + type: 'request', + message: item.message, + } : + { + type: 'response', + message: item.message, + references: item.references?.map(DocumentContextItem.from) + } + )) + }; + + } +} + +export namespace DocumentContextItem { + + export function is(item: unknown): item is vscode.DocumentContextItem { + return ( + typeof item === 'object' && + item !== null && + 'uri' in item && URI.isUri(item.uri) && + 'version' in item && typeof item.version === 'number' && + 'ranges' in item && Array.isArray(item.ranges) && item.ranges.every((r: unknown) => r instanceof types.Range) + ); + } + + export function from(item: vscode.DocumentContextItem): languages.DocumentContextItem { + return { + uri: URI.from(item.uri), + version: item.version, + ranges: item.ranges.map(r => Range.from(r)), }; } } @@ -2381,6 +2405,18 @@ export namespace ChatResponseMarkdownPart { } } +export namespace ChatResponseCodeblockUriPart { + export function from(part: vscode.ChatResponseCodeblockUriPart): Dto { + return { + kind: 'codeblockUri', + uri: part.value, + }; + } + export function to(part: Dto): vscode.ChatResponseCodeblockUriPart { + return new types.ChatResponseCodeblockUriPart(URI.revive(part.uri)); + } +} + export namespace ChatResponseMarkdownWithVulnerabilitiesPart { export function from(part: vscode.ChatResponseMarkdownWithVulnerabilitiesPart): Dto { return { @@ -2462,18 +2498,27 @@ export namespace ChatResponseAnchorPart { export function from(part: vscode.ChatResponseAnchorPart): Dto { // Work around type-narrowing confusion between vscode.Uri and URI const isUri = (thing: unknown): thing is vscode.Uri => URI.isUri(thing); + const isSymbolInformation = (x: any): x is vscode.SymbolInformation => x instanceof types.SymbolInformation; return { kind: 'inlineReference', name: part.title, - inlineReference: isUri(part.value) ? part.value : Location.from(part.value) + inlineReference: isUri(part.value) + ? part.value + : isSymbolInformation(part.value) + ? WorkspaceSymbol.from(part.value) + : Location.from(part.value) }; } export function to(part: Dto): vscode.ChatResponseAnchorPart { const value = revive(part); return new types.ChatResponseAnchorPart( - URI.isUri(value.inlineReference) ? value.inlineReference : Location.to(value.inlineReference), + URI.isUri(value.inlineReference) + ? value.inlineReference + : 'location' in value.inlineReference + ? WorkspaceSymbol.to(value.inlineReference) as vscode.SymbolInformation + : Location.to(value.inlineReference), part.name ); } @@ -2640,6 +2685,8 @@ export namespace ChatResponsePart { return ChatResponseTextEditPart.from(part); } else if (part instanceof types.ChatResponseMarkdownWithVulnerabilitiesPart) { return ChatResponseMarkdownWithVulnerabilitiesPart.from(part); + } else if (part instanceof types.ChatResponseCodeblockUriPart) { + return ChatResponseCodeblockUriPart.from(part); } else if (part instanceof types.ChatResponseDetectedParticipantPart) { return ChatResponseDetectedParticipantPart.from(part); } else if (part instanceof types.ChatResponseWarningPart) { @@ -2700,6 +2747,7 @@ export namespace ChatAgentRequest { acceptedConfirmationData: request.acceptedConfirmationData, rejectedConfirmationData: request.rejectedConfirmationData, location2, + toolInvocationToken: Object.freeze({ sessionId: request.sessionId }) }; } } @@ -2809,25 +2857,6 @@ export namespace ChatAgentUserActionEvent { } } -export namespace LanguageModelToolResult { - export function from(result: vscode.LanguageModelToolResult): IToolResult { - return { - ...result, - string: result.toString(), - }; - } - - export function to(result: IToolResult): vscode.LanguageModelToolResult { - const copy: vscode.LanguageModelToolResult = { - ...result, - toString: () => result.string, - }; - delete copy.string; - - return copy; - } -} - export namespace TerminalQuickFix { export function from(quickFix: vscode.TerminalQuickFixTerminalCommand | vscode.TerminalQuickFixOpener | vscode.Command, converter: Command.ICommandsConverter, disposables: DisposableStore): extHostProtocol.ITerminalQuickFixTerminalCommandDto | extHostProtocol.ITerminalQuickFixOpenerDto | extHostProtocol.ICommandDto | undefined { if ('terminalCommand' in quickFix) { @@ -2883,6 +2912,7 @@ export namespace LanguageModelToolDescription { modelDescription: item.modelDescription, parametersSchema: item.parametersSchema, displayName: item.displayName, + supportedContentTypes: item.supportedContentTypes, }; } } diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index e8d472392..ada4e5e51 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -5,21 +5,21 @@ /* eslint-disable local/code-no-native-private */ -import { asArray, coalesceInPlace, equals } from 'vs/base/common/arrays'; -import { illegalArgument } from 'vs/base/common/errors'; -import { IRelativePattern } from 'vs/base/common/glob'; -import { MarkdownString as BaseMarkdownString, MarkdownStringTrustedOptions } from 'vs/base/common/htmlContent'; -import { ResourceMap } from 'vs/base/common/map'; -import { Mimes, normalizeMimeType } from 'vs/base/common/mime'; -import { nextCharLength } from 'vs/base/common/strings'; -import { isNumber, isObject, isString, isStringArray } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from 'vs/platform/files/common/files'; -import { RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { IRelativePatternDto } from 'vs/workbench/api/common/extHost.protocol'; -import { CellEditType, ICellMetadataEdit, IDocumentMetadataEdit, isTextStreamMime } from 'vs/workbench/contrib/notebook/common/notebookCommon'; +import { asArray, coalesceInPlace, equals } from '../../../base/common/arrays.js'; +import { illegalArgument } from '../../../base/common/errors.js'; +import { IRelativePattern } from '../../../base/common/glob.js'; +import { MarkdownString as BaseMarkdownString, MarkdownStringTrustedOptions } from '../../../base/common/htmlContent.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { Mimes, normalizeMimeType } from '../../../base/common/mime.js'; +import { nextCharLength } from '../../../base/common/strings.js'; +import { isNumber, isObject, isString, isStringArray } from '../../../base/common/types.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from '../../../platform/files/common/files.js'; +import { RemoteAuthorityResolverErrorCode } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { IRelativePatternDto } from './extHost.protocol.js'; +import { CellEditType, ICellMetadataEdit, IDocumentMetadataEdit, isTextStreamMime } from '../../contrib/notebook/common/notebookCommon.js'; import type * as vscode from 'vscode'; /** @@ -4423,9 +4423,11 @@ export class ChatResponseFileTreePart { export class ChatResponseAnchorPart { value: vscode.Uri | vscode.Location; + value2: vscode.Uri | vscode.Location | vscode.SymbolInformation; title?: string; - constructor(value: vscode.Uri | vscode.Location, title?: string) { - this.value = value; + constructor(value: vscode.Uri | vscode.Location | vscode.SymbolInformation, title?: string) { + this.value = value as any; + this.value2 = value; this.title = title; } } @@ -4475,6 +4477,13 @@ export class ChatResponseReferencePart { } } +export class ChatResponseCodeblockUriPart { + value: vscode.Uri; + constructor(value: vscode.Uri) { + this.value = value; + } +} + export class ChatResponseCodeCitationPart { value: vscode.Uri; license: string; diff --git a/src/vs/workbench/api/common/extHostUriOpener.ts b/src/vs/workbench/api/common/extHostUriOpener.ts index 4e3577ec1..7e97bb4fb 100644 --- a/src/vs/workbench/api/common/extHostUriOpener.ts +++ b/src/vs/workbench/api/common/extHostUriOpener.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import * as languages from 'vs/editor/common/languages'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { toDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import * as languages from '../../../editor/common/languages.js'; +import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; import type * as vscode from 'vscode'; -import { ExtHostUriOpenersShape, IMainContext, MainContext, MainThreadUriOpenersShape } from './extHost.protocol'; +import { ExtHostUriOpenersShape, IMainContext, MainContext, MainThreadUriOpenersShape } from './extHost.protocol.js'; export class ExtHostUriOpeners implements ExtHostUriOpenersShape { diff --git a/src/vs/workbench/api/common/extHostUriTransformerService.ts b/src/vs/workbench/api/common/extHostUriTransformerService.ts index 4d86037b0..58f7ab6a6 100644 --- a/src/vs/workbench/api/common/extHostUriTransformerService.ts +++ b/src/vs/workbench/api/common/extHostUriTransformerService.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { URI, UriComponents } from 'vs/base/common/uri'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; export interface IURITransformerService extends IURITransformer { readonly _serviceBrand: undefined; diff --git a/src/vs/workbench/api/common/extHostUrls.ts b/src/vs/workbench/api/common/extHostUrls.ts index 2450fd6de..c75ce2d4c 100644 --- a/src/vs/workbench/api/common/extHostUrls.ts +++ b/src/vs/workbench/api/common/extHostUrls.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { MainContext, IMainContext, ExtHostUrlsShape, MainThreadUrlsShape } from './extHost.protocol'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { ExtensionIdentifierSet, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; +import { MainContext, IMainContext, ExtHostUrlsShape, MainThreadUrlsShape } from './extHost.protocol.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { toDisposable } from '../../../base/common/lifecycle.js'; +import { onUnexpectedError } from '../../../base/common/errors.js'; +import { ExtensionIdentifierSet, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; export class ExtHostUrls implements ExtHostUrlsShape { diff --git a/src/vs/workbench/api/common/extHostVariableResolverService.ts b/src/vs/workbench/api/common/extHostVariableResolverService.ts index be13e5177..d5c19b162 100644 --- a/src/vs/workbench/api/common/extHostVariableResolverService.ts +++ b/src/vs/workbench/api/common/extHostVariableResolverService.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Lazy } from 'vs/base/common/lazy'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as path from 'vs/base/common/path'; -import * as process from 'vs/base/common/process'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs'; -import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { CustomEditorTabInput, NotebookDiffEditorTabInput, NotebookEditorTabInput, TextDiffTabInput, TextTabInput } from 'vs/workbench/api/common/extHostTypes'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; -import { AbstractVariableResolverService } from 'vs/workbench/services/configurationResolver/common/variableResolver'; +import { Lazy } from '../../../base/common/lazy.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import * as path from '../../../base/common/path.js'; +import * as process from '../../../base/common/process.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js'; +import { IExtHostEditorTabs } from './extHostEditorTabs.js'; +import { IExtHostExtensionService } from './extHostExtensionService.js'; +import { CustomEditorTabInput, NotebookDiffEditorTabInput, NotebookEditorTabInput, TextDiffTabInput, TextTabInput } from './extHostTypes.js'; +import { IExtHostWorkspace } from './extHostWorkspace.js'; +import { IConfigurationResolverService } from '../../services/configurationResolver/common/configurationResolver.js'; +import { AbstractVariableResolverService } from '../../services/configurationResolver/common/variableResolver.js'; import * as vscode from 'vscode'; -import { ExtHostConfigProvider, IExtHostConfiguration } from './extHostConfiguration'; +import { ExtHostConfigProvider, IExtHostConfiguration } from './extHostConfiguration.js'; export interface IExtHostVariableResolverProvider { readonly _serviceBrand: undefined; diff --git a/src/vs/workbench/api/common/extHostWebview.ts b/src/vs/workbench/api/common/extHostWebview.ts index 367d4efba..435df4b03 100644 --- a/src/vs/workbench/api/common/extHostWebview.ts +++ b/src/vs/workbench/api/common/extHostWebview.ts @@ -5,22 +5,22 @@ /* eslint-disable local/code-no-native-private */ -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import * as objects from 'vs/base/common/objects'; -import { URI } from 'vs/base/common/uri'; -import { normalizeVersion, parseVersion } from 'vs/platform/extensions/common/extensionValidator'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { deserializeWebviewMessage, serializeWebviewMessage } from 'vs/workbench/api/common/extHostWebviewMessaging'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { WebviewRemoteInfo, asWebviewUri, webviewGenericCspSource } from 'vs/workbench/contrib/webview/common/webview'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import * as objects from '../../../base/common/objects.js'; +import { URI } from '../../../base/common/uri.js'; +import { normalizeVersion, parseVersion } from '../../../platform/extensions/common/extensionValidator.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostApiDeprecationService } from './extHostApiDeprecationService.js'; +import { deserializeWebviewMessage, serializeWebviewMessage } from './extHostWebviewMessaging.js'; +import { IExtHostWorkspace } from './extHostWorkspace.js'; +import { WebviewRemoteInfo, asWebviewUri, webviewGenericCspSource } from '../../contrib/webview/common/webview.js'; +import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js'; import type * as vscode from 'vscode'; -import * as extHostProtocol from './extHost.protocol'; +import * as extHostProtocol from './extHost.protocol.js'; export class ExtHostWebview implements vscode.Webview { diff --git a/src/vs/workbench/api/common/extHostWebviewMessaging.ts b/src/vs/workbench/api/common/extHostWebviewMessaging.ts index 88c477baa..faf3d2286 100644 --- a/src/vs/workbench/api/common/extHostWebviewMessaging.ts +++ b/src/vs/workbench/api/common/extHostWebviewMessaging.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; -import * as extHostProtocol from './extHost.protocol'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import * as extHostProtocol from './extHost.protocol.js'; class ArrayBufferSet { public readonly buffers: ArrayBuffer[] = []; diff --git a/src/vs/workbench/api/common/extHostWebviewPanels.ts b/src/vs/workbench/api/common/extHostWebviewPanels.ts index 6018c3718..872c1fbe3 100644 --- a/src/vs/workbench/api/common/extHostWebviewPanels.ts +++ b/src/vs/workbench/api/common/extHostWebviewPanels.ts @@ -5,18 +5,18 @@ /* eslint-disable local/code-no-native-private */ -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { serializeWebviewOptions, ExtHostWebview, ExtHostWebviews, toExtensionData, shouldSerializeBuffersForPostMessage } from 'vs/workbench/api/common/extHostWebview'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { URI } from '../../../base/common/uri.js'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import * as typeConverters from './extHostTypeConverters.js'; +import { serializeWebviewOptions, ExtHostWebview, ExtHostWebviews, toExtensionData, shouldSerializeBuffersForPostMessage } from './extHostWebview.js'; +import { IExtHostWorkspace } from './extHostWorkspace.js'; +import { EditorGroupColumn } from '../../services/editor/common/editorGroupColumn.js'; import type * as vscode from 'vscode'; -import * as extHostProtocol from './extHost.protocol'; -import * as extHostTypes from './extHostTypes'; +import * as extHostProtocol from './extHost.protocol.js'; +import * as extHostTypes from './extHostTypes.js'; type IconPath = URI | { readonly light: URI; readonly dark: URI }; diff --git a/src/vs/workbench/api/common/extHostWebviewView.ts b/src/vs/workbench/api/common/extHostWebviewView.ts index 89ae50c50..4696f33c5 100644 --- a/src/vs/workbench/api/common/extHostWebviewView.ts +++ b/src/vs/workbench/api/common/extHostWebviewView.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtHostWebview, ExtHostWebviews, toExtensionData, shouldSerializeBuffersForPostMessage } from 'vs/workbench/api/common/extHostWebview'; -import { ViewBadge } from 'vs/workbench/api/common/extHostTypeConverters'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Emitter } from '../../../base/common/event.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtHostWebview, ExtHostWebviews, toExtensionData, shouldSerializeBuffersForPostMessage } from './extHostWebview.js'; +import { ViewBadge } from './extHostTypeConverters.js'; import type * as vscode from 'vscode'; -import * as extHostProtocol from './extHost.protocol'; -import * as extHostTypes from './extHostTypes'; +import * as extHostProtocol from './extHost.protocol.js'; +import * as extHostTypes from './extHostTypes.js'; /* eslint-disable local/code-no-native-private */ diff --git a/src/vs/workbench/api/common/extHostWindow.ts b/src/vs/workbench/api/common/extHostWindow.ts index 82b721fe4..6f74b721b 100644 --- a/src/vs/workbench/api/common/extHostWindow.ts +++ b/src/vs/workbench/api/common/extHostWindow.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Schemas } from 'vs/base/common/network'; -import { isFalsyOrWhitespace } from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { Schemas } from '../../../base/common/network.js'; +import { isFalsyOrWhitespace } from '../../../base/common/strings.js'; +import { URI } from '../../../base/common/uri.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; import { WindowState } from 'vscode'; -import { ExtHostWindowShape, IOpenUriOptions, MainContext, MainThreadWindowShape } from './extHost.protocol'; +import { ExtHostWindowShape, IOpenUriOptions, MainContext, MainThreadWindowShape } from './extHost.protocol.js'; export class ExtHostWindow implements ExtHostWindowShape { diff --git a/src/vs/workbench/api/common/extHostWorkspace.ts b/src/vs/workbench/api/common/extHostWorkspace.ts index 33e3bafe5..abb49a3cc 100644 --- a/src/vs/workbench/api/common/extHostWorkspace.ts +++ b/src/vs/workbench/api/common/extHostWorkspace.ts @@ -3,38 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { delta as arrayDelta, mapArrayOrNot } from 'vs/base/common/arrays'; -import { AsyncIterableObject, Barrier } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { AsyncEmitter, Emitter, Event } from 'vs/base/common/event'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { Schemas } from 'vs/base/common/network'; -import { Counter } from 'vs/base/common/numbers'; -import { basename, basenameOrAuthority, dirname, ExtUri, relativePath } from 'vs/base/common/resources'; -import { compare } from 'vs/base/common/strings'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Severity } from 'vs/platform/notification/common/notification'; -import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions'; -import { Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { GlobPattern } from 'vs/workbench/api/common/extHostTypeConverters'; -import { Range } from 'vs/workbench/api/common/extHostTypes'; -import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { IFileQueryBuilderOptions, ISearchPatternBuilder, ITextQueryBuilderOptions } from 'vs/workbench/services/search/common/queryBuilder'; -import { IRawFileMatch2, ITextSearchResult, resultIsMatch } from 'vs/workbench/services/search/common/search'; +import { delta as arrayDelta, mapArrayOrNot } from '../../../base/common/arrays.js'; +import { AsyncIterableObject, Barrier } from '../../../base/common/async.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { AsyncEmitter, Emitter, Event } from '../../../base/common/event.js'; +import { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js'; +import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js'; +import { Schemas } from '../../../base/common/network.js'; +import { Counter } from '../../../base/common/numbers.js'; +import { basename, basenameOrAuthority, dirname, ExtUri, relativePath } from '../../../base/common/resources.js'; +import { compare } from '../../../base/common/strings.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { localize } from '../../../nls.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { FileSystemProviderCapabilities } from '../../../platform/files/common/files.js'; +import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { Severity } from '../../../platform/notification/common/notification.js'; +import { EditSessionIdentityMatch } from '../../../platform/workspace/common/editSessions.js'; +import { Workspace, WorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; +import { IExtHostFileSystemInfo } from './extHostFileSystemInfo.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { IExtHostRpcService } from './extHostRpcService.js'; +import { GlobPattern } from './extHostTypeConverters.js'; +import { Range } from './extHostTypes.js'; +import { IURITransformerService } from './extHostUriTransformerService.js'; +import { IFileQueryBuilderOptions, ISearchPatternBuilder, ITextQueryBuilderOptions } from '../../services/search/common/queryBuilder.js'; +import { IRawFileMatch2, ITextSearchResult, resultIsMatch } from '../../services/search/common/search.js'; import type * as vscode from 'vscode'; -import { ExtHostWorkspaceShape, IRelativePatternDto, IWorkspaceData, MainContext, MainThreadMessageOptions, MainThreadMessageServiceShape, MainThreadWorkspaceShape } from './extHost.protocol'; -import { revive } from 'vs/base/common/marshalling'; -import { AuthInfo, Credentials } from 'vs/platform/request/common/request'; -import { ExcludeSettingOptions, TextSearchContextNew, TextSearchMatchNew } from 'vs/workbench/services/search/common/searchExtTypes'; +import { ExtHostWorkspaceShape, IRelativePatternDto, IWorkspaceData, MainContext, MainThreadMessageOptions, MainThreadMessageServiceShape, MainThreadWorkspaceShape } from './extHost.protocol.js'; +import { revive } from '../../../base/common/marshalling.js'; +import { AuthInfo, Credentials } from '../../../platform/request/common/request.js'; +import { ExcludeSettingOptions, TextSearchContextNew, TextSearchMatchNew } from '../../services/search/common/searchExtTypes.js'; export interface IExtHostWorkspaceProvider { getWorkspaceFolder2(uri: vscode.Uri, resolveParent?: boolean): Promise; @@ -571,7 +571,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac return result.flat(); } - findTextInFilesNew(query: vscode.TextSearchQueryNew, extensionId: ExtensionIdentifier, options?: vscode.FindTextInFilesOptionsNew, token?: vscode.CancellationToken): vscode.FindTextInFilesResponse { + findTextInFilesNew(query: vscode.TextSearchQueryNew, options: vscode.FindTextInFilesOptionsNew | undefined, extensionId: ExtensionIdentifier, token: vscode.CancellationToken = CancellationToken.None): vscode.FindTextInFilesResponse { this._logService.trace(`extHostWorkspace#findTextInFilesNew: textSearch, extension: ${extensionId.value}, entryPoint: findTextInFilesNew`); @@ -584,7 +584,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac } const parsedInclude = include ? parseSearchExcludeInclude(GlobPattern.from(include)) : undefined; - const excludePatterns = include ? globsToISearchPatternBuilder(options.exclude) : undefined; + const excludePatterns = options.exclude ? globsToISearchPatternBuilder(options.exclude) : undefined; return { options: { @@ -615,10 +615,18 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac const queryOptions = queryOptionsRaw.filter((queryOps): queryOps is QueryOptions => !!queryOps); - const complete: Promise = Promise.resolve(undefined); - + const disposables = new DisposableStore(); + const progressEmitter = disposables.add(new Emitter<{ result: ITextSearchResult; uri: URI }>()); + const complete = this.findTextInFilesBase( + query, + queryOptions, + (result, uri) => progressEmitter.fire({ result, uri }), + token + ); const asyncIterable = new AsyncIterableObject(async emitter => { - const progress = (result: ITextSearchResult, uri: URI) => { + disposables.add(progressEmitter.event(e => { + const result = e.result; + const uri = e.uri; if (resultIsMatch(result)) { emitter.emitOne(new TextSearchMatchNew( uri, @@ -637,22 +645,14 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac )); } - return result; - }; - - await complete.then(e => { - return this.findTextInFilesBase( - query, - queryOptions, - progress, - token - ); - }); + })); + await complete; }); return { results: asyncIterable, complete: complete.then((e) => { + disposables.dispose(); return { limitHit: e?.limitHit ?? false }; @@ -664,7 +664,10 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac async findTextInFilesBase(query: vscode.TextSearchQuery, queryOptions: QueryOptions[] | undefined, callback: (result: ITextSearchResult, uri: URI) => void, token: vscode.CancellationToken = CancellationToken.None): Promise { const requestId = this._requestIdProvider.getNext(); - const isCanceled = false; + let isCanceled = false; + token.onCancellationRequested(_ => { + isCanceled = true; + }); this._activeSearchCallbacks[requestId] = p => { if (isCanceled) { @@ -984,9 +987,9 @@ interface IExtensionListener { (e: E): any; } -function globsToISearchPatternBuilder(excludes: vscode.GlobPattern[] | undefined): ISearchPatternBuilder[] { +function globsToISearchPatternBuilder(excludes: vscode.GlobPattern[] | undefined): ISearchPatternBuilder[] { return ( - excludes?.map((exclude): ISearchPatternBuilder | undefined => { + excludes?.map((exclude): ISearchPatternBuilder | undefined => { if (typeof exclude === 'string') { if (exclude === '') { return undefined; @@ -994,7 +997,7 @@ function globsToISearchPatternBuilder(excludes: vscode.GlobPattern[] | undefined return { pattern: exclude, uri: undefined - } satisfies ISearchPatternBuilder; + } satisfies ISearchPatternBuilder; } else { const parsedExclude = parseSearchExcludeInclude(exclude); if (!parsedExclude) { @@ -1003,8 +1006,8 @@ function globsToISearchPatternBuilder(excludes: vscode.GlobPattern[] | undefined return { pattern: parsedExclude.pattern, uri: parsedExclude.folder - } satisfies ISearchPatternBuilder; + } satisfies ISearchPatternBuilder; } }) ?? [] - ).filter((e): e is ISearchPatternBuilder => !!e); + ).filter((e): e is ISearchPatternBuilder => !!e); } diff --git a/src/vs/workbench/api/common/extensionHostMain.ts b/src/vs/workbench/api/common/extensionHostMain.ts index 50c47ba98..6c93b88e4 100644 --- a/src/vs/workbench/api/common/extensionHostMain.ts +++ b/src/vs/workbench/api/common/extensionHostMain.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as errors from 'vs/base/common/errors'; -import * as performance from 'vs/base/common/performance'; -import { URI } from 'vs/base/common/uri'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc'; -import { MainContext, MainThreadConsoleShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IExtensionHostInitData } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { RPCProtocol } from 'vs/workbench/services/extensions/common/rpcProtocol'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { getSingletonServiceDescriptors } from 'vs/platform/instantiation/common/extensions'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IExtHostRpcService, ExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IURITransformerService, URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { IExtHostExtensionService, IHostUtils } from 'vs/workbench/api/common/extHostExtensionService'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { Mutable } from 'vs/base/common/types'; +import * as errors from '../../../base/common/errors.js'; +import * as performance from '../../../base/common/performance.js'; +import { URI } from '../../../base/common/uri.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { IMessagePassingProtocol } from '../../../base/parts/ipc/common/ipc.js'; +import { MainContext, MainThreadConsoleShape } from './extHost.protocol.js'; +import { IExtensionHostInitData } from '../../services/extensions/common/extensionHostProtocol.js'; +import { RPCProtocol } from '../../services/extensions/common/rpcProtocol.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { getSingletonServiceDescriptors } from '../../../platform/instantiation/common/extensions.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { IExtHostInitDataService } from './extHostInitDataService.js'; +import { InstantiationService } from '../../../platform/instantiation/common/instantiationService.js'; +import { IInstantiationService, ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { IExtHostRpcService, ExtHostRpcService } from './extHostRpcService.js'; +import { IURITransformerService, URITransformerService } from './extHostUriTransformerService.js'; +import { IExtHostExtensionService, IHostUtils } from './extHostExtensionService.js'; +import { IExtHostTelemetry } from './extHostTelemetry.js'; +import { Mutable } from '../../../base/common/types.js'; export interface IExitFn { (code?: number): any; diff --git a/src/vs/workbench/api/common/jsonValidationExtensionPoint.ts b/src/vs/workbench/api/common/jsonValidationExtensionPoint.ts index 1b82d305f..24559bee3 100644 --- a/src/vs/workbench/api/common/jsonValidationExtensionPoint.ts +++ b/src/vs/workbench/api/common/jsonValidationExtensionPoint.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; -import { ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry'; -import * as resources from 'vs/base/common/resources'; -import { isString } from 'vs/base/common/types'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Extensions, IExtensionFeatureTableRenderer, IExtensionFeaturesRegistry, IRenderedData, IRowData, ITableData } from 'vs/workbench/services/extensionManagement/common/extensionFeatures'; -import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { MarkdownString } from 'vs/base/common/htmlContent'; +import * as nls from '../../../nls.js'; +import { ExtensionsRegistry } from '../../services/extensions/common/extensionsRegistry.js'; +import * as resources from '../../../base/common/resources.js'; +import { isString } from '../../../base/common/types.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Extensions, IExtensionFeatureTableRenderer, IExtensionFeaturesRegistry, IRenderedData, IRowData, ITableData } from '../../services/extensionManagement/common/extensionFeatures.js'; +import { IExtensionManifest } from '../../../platform/extensions/common/extensions.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { MarkdownString } from '../../../base/common/htmlContent.js'; interface IJSONValidationExtensionPoint { fileMatch: string | string[]; diff --git a/src/vs/workbench/api/common/shared/dataTransferCache.ts b/src/vs/workbench/api/common/shared/dataTransferCache.ts index 49ff0735c..229407d21 100644 --- a/src/vs/workbench/api/common/shared/dataTransferCache.ts +++ b/src/vs/workbench/api/common/shared/dataTransferCache.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { coalesce } from 'vs/base/common/arrays'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { IDataTransferFile, IReadonlyVSDataTransfer } from 'vs/base/common/dataTransfer'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { IDataTransferFile, IReadonlyVSDataTransfer } from '../../../../base/common/dataTransfer.js'; export class DataTransferFileCache { diff --git a/src/vs/workbench/api/common/shared/tasks.ts b/src/vs/workbench/api/common/shared/tasks.ts index 6f0445ab3..67a3fe9e0 100644 --- a/src/vs/workbench/api/common/shared/tasks.ts +++ b/src/vs/workbench/api/common/shared/tasks.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { UriComponents } from 'vs/base/common/uri'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import type { Dto } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { UriComponents } from '../../../../base/common/uri.js'; +import { IExtensionDescription } from '../../../../platform/extensions/common/extensions.js'; +import type { Dto } from '../../../services/extensions/common/proxyIdentifier.js'; export interface ITaskDefinitionDTO { type: string; diff --git a/src/vs/workbench/api/node/extHost.node.services.ts b/src/vs/workbench/api/node/extHost.node.services.ts index 582cea087..17d845a2c 100644 --- a/src/vs/workbench/api/node/extHost.node.services.ts +++ b/src/vs/workbench/api/node/extHost.node.services.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { ExtHostTerminalService } from 'vs/workbench/api/node/extHostTerminalService'; -import { ExtHostTask } from 'vs/workbench/api/node/extHostTask'; -import { ExtHostDebugService } from 'vs/workbench/api/node/extHostDebugService'; -import { NativeExtHostSearch } from 'vs/workbench/api/node/extHostSearch'; -import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService'; -import { NodeExtHostTunnelService } from 'vs/workbench/api/node/extHostTunnelService'; -import { IExtHostDebugService } from 'vs/workbench/api/common/extHostDebugService'; -import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { IExtHostSearch } from 'vs/workbench/api/common/extHostSearch'; -import { IExtHostTask } from 'vs/workbench/api/common/extHostTask'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService'; -import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths'; -import { ExtensionStoragePaths } from 'vs/workbench/api/node/extHostStoragePaths'; -import { ExtHostLoggerService } from 'vs/workbench/api/node/extHostLoggerService'; -import { ILogService, ILoggerService } from 'vs/platform/log/common/log'; -import { NodeExtHostVariableResolverProviderService } from 'vs/workbench/api/node/extHostVariableResolverService'; -import { IExtHostVariableResolverProvider } from 'vs/workbench/api/common/extHostVariableResolverService'; -import { ExtHostLogService } from 'vs/workbench/api/common/extHostLogService'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { SignService } from 'vs/platform/sign/node/signService'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { ExtHostTerminalService } from './extHostTerminalService.js'; +import { ExtHostTask } from './extHostTask.js'; +import { ExtHostDebugService } from './extHostDebugService.js'; +import { NativeExtHostSearch } from './extHostSearch.js'; +import { ExtHostExtensionService } from './extHostExtensionService.js'; +import { NodeExtHostTunnelService } from './extHostTunnelService.js'; +import { IExtHostDebugService } from '../common/extHostDebugService.js'; +import { IExtHostExtensionService } from '../common/extHostExtensionService.js'; +import { IExtHostSearch } from '../common/extHostSearch.js'; +import { IExtHostTask } from '../common/extHostTask.js'; +import { IExtHostTerminalService } from '../common/extHostTerminalService.js'; +import { IExtHostTunnelService } from '../common/extHostTunnelService.js'; +import { IExtensionStoragePaths } from '../common/extHostStoragePaths.js'; +import { ExtensionStoragePaths } from './extHostStoragePaths.js'; +import { ExtHostLoggerService } from './extHostLoggerService.js'; +import { ILogService, ILoggerService } from '../../../platform/log/common/log.js'; +import { NodeExtHostVariableResolverProviderService } from './extHostVariableResolverService.js'; +import { IExtHostVariableResolverProvider } from '../common/extHostVariableResolverService.js'; +import { ExtHostLogService } from '../common/extHostLogService.js'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { ISignService } from '../../../platform/sign/common/sign.js'; +import { SignService } from '../../../platform/sign/node/signService.js'; // ######################################################################### // ### ### diff --git a/src/vs/workbench/api/node/extHostCLIServer.ts b/src/vs/workbench/api/node/extHostCLIServer.ts index d9bb87acc..e6261fb0b 100644 --- a/src/vs/workbench/api/node/extHostCLIServer.ts +++ b/src/vs/workbench/api/node/extHostCLIServer.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createRandomIPCHandle } from 'vs/base/parts/ipc/node/ipc.net'; +import { createRandomIPCHandle } from '../../../base/parts/ipc/node/ipc.net.js'; import * as http from 'http'; import * as fs from 'fs'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { IWindowOpenable, IOpenWindowOptions } from 'vs/platform/window/common/window'; -import { URI } from 'vs/base/common/uri'; -import { ILogService } from 'vs/platform/log/common/log'; -import { hasWorkspaceFileExtension } from 'vs/platform/workspace/common/workspace'; +import { IExtHostCommands } from '../common/extHostCommands.js'; +import { IWindowOpenable, IOpenWindowOptions } from '../../../platform/window/common/window.js'; +import { URI } from '../../../base/common/uri.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { hasWorkspaceFileExtension } from '../../../platform/workspace/common/workspace.js'; export interface OpenCommandPipeArgs { type: 'open'; diff --git a/src/vs/workbench/api/node/extHostConsoleForwarder.ts b/src/vs/workbench/api/node/extHostConsoleForwarder.ts index 9069b9d04..aa2dbca28 100644 --- a/src/vs/workbench/api/node/extHostConsoleForwarder.ts +++ b/src/vs/workbench/api/node/extHostConsoleForwarder.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AbstractExtHostConsoleForwarder } from 'vs/workbench/api/common/extHostConsoleForwarder'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { NativeLogMarkers } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; +import { AbstractExtHostConsoleForwarder } from '../common/extHostConsoleForwarder.js'; +import { IExtHostInitDataService } from '../common/extHostInitDataService.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; +import { NativeLogMarkers } from '../../services/extensions/common/extensionHostProtocol.js'; const MAX_STREAM_BUFFER_LENGTH = 1024 * 1024; diff --git a/src/vs/workbench/api/node/extHostDebugService.ts b/src/vs/workbench/api/node/extHostDebugService.ts index dc48354e3..e28cee046 100644 --- a/src/vs/workbench/api/node/extHostDebugService.ts +++ b/src/vs/workbench/api/node/extHostDebugService.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createCancelablePromise, firstParallel, timeout } from 'vs/base/common/async'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import * as nls from 'vs/nls'; -import { IExternalTerminalService } from 'vs/platform/externalTerminal/common/externalTerminal'; -import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from 'vs/platform/externalTerminal/node/externalTerminalService'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { SignService } from 'vs/platform/sign/node/signService'; -import { ExtHostDebugServiceBase, ExtHostDebugSession } from 'vs/workbench/api/common/extHostDebugService'; -import { IExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs'; -import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { DebugAdapterExecutable, ThemeIcon } from 'vs/workbench/api/common/extHostTypes'; -import { IExtHostVariableResolverProvider } from 'vs/workbench/api/common/extHostVariableResolverService'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { AbstractDebugAdapter } from 'vs/workbench/contrib/debug/common/abstractDebugAdapter'; -import { IAdapterDescriptor } from 'vs/workbench/contrib/debug/common/debug'; -import { ExecutableDebugAdapter, NamedPipeDebugAdapter, SocketDebugAdapter } from 'vs/workbench/contrib/debug/node/debugAdapter'; -import { hasChildProcesses, prepareCommand } from 'vs/workbench/contrib/debug/node/terminals'; -import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; -import type * as vscode from 'vscode'; -import { ExtHostConfigProvider, IExtHostConfiguration } from '../common/extHostConfiguration'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { IExtHostTesting } from 'vs/workbench/api/common/extHostTesting'; +import * as vscode from 'vscode'; +import { createCancelablePromise, disposableTimeout, firstParallel, RunOnceScheduler, timeout } from '../../../base/common/async.js'; +import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js'; +import * as platform from '../../../base/common/platform.js'; +import * as nls from '../../../nls.js'; +import { IExternalTerminalService } from '../../../platform/externalTerminal/common/externalTerminal.js'; +import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from '../../../platform/externalTerminal/node/externalTerminalService.js'; +import { ISignService } from '../../../platform/sign/common/sign.js'; +import { SignService } from '../../../platform/sign/node/signService.js'; +import { AbstractDebugAdapter } from '../../contrib/debug/common/abstractDebugAdapter.js'; +import { ExecutableDebugAdapter, NamedPipeDebugAdapter, SocketDebugAdapter } from '../../contrib/debug/node/debugAdapter.js'; +import { hasChildProcesses, prepareCommand } from '../../contrib/debug/node/terminals.js'; +import { ExtensionDescriptionRegistry } from '../../services/extensions/common/extensionDescriptionRegistry.js'; +import { IExtHostCommands } from '../common/extHostCommands.js'; +import { ExtHostConfigProvider, IExtHostConfiguration } from '../common/extHostConfiguration.js'; +import { ExtHostDebugServiceBase, ExtHostDebugSession } from '../common/extHostDebugService.js'; +import { IExtHostEditorTabs } from '../common/extHostEditorTabs.js'; +import { IExtHostExtensionService } from '../common/extHostExtensionService.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; +import { IExtHostTerminalService } from '../common/extHostTerminalService.js'; +import { IExtHostTesting } from '../common/extHostTesting.js'; +import { DebugAdapterExecutable, DebugAdapterNamedPipeServer, DebugAdapterServer, ThemeIcon } from '../common/extHostTypes.js'; +import { IExtHostVariableResolverProvider } from '../common/extHostVariableResolverService.js'; +import { IExtHostWorkspace } from '../common/extHostWorkspace.js'; +import { IExtHostTerminalShellIntegration } from '../common/extHostTerminalShellIntegration.js'; export class ExtHostDebugService extends ExtHostDebugServiceBase { @@ -42,6 +42,7 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { @IExtHostExtensionService extensionService: IExtHostExtensionService, @IExtHostConfiguration configurationService: IExtHostConfiguration, @IExtHostTerminalService private _terminalService: IExtHostTerminalService, + @IExtHostTerminalShellIntegration private _terminalShellIntegrationService: IExtHostTerminalShellIntegration, @IExtHostEditorTabs editorTabs: IExtHostEditorTabs, @IExtHostVariableResolverProvider variableResolver: IExtHostVariableResolverProvider, @IExtHostCommands commands: IExtHostCommands, @@ -50,16 +51,16 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { super(extHostRpcService, workspaceService, extensionService, configurationService, editorTabs, variableResolver, commands, testing); } - protected override createDebugAdapter(adapter: IAdapterDescriptor, session: ExtHostDebugSession): AbstractDebugAdapter | undefined { - switch (adapter.type) { - case 'server': - return new SocketDebugAdapter(adapter); - case 'pipeServer': - return new NamedPipeDebugAdapter(adapter); - case 'executable': - return new ExecutableDebugAdapter(adapter, session.type); + protected override createDebugAdapter(adapter: vscode.DebugAdapterDescriptor, session: ExtHostDebugSession): AbstractDebugAdapter | undefined { + if (adapter instanceof DebugAdapterExecutable) { + return new ExecutableDebugAdapter(this.convertExecutableToDto(adapter), session.type); + } else if (adapter instanceof DebugAdapterServer) { + return new SocketDebugAdapter(this.convertServerToDto(adapter)); + } else if (adapter instanceof DebugAdapterNamedPipeServer) { + return new NamedPipeDebugAdapter(this.convertPipeServerToDto(adapter)); + } else { + return super.createDebugAdapter(adapter, session); } - return super.createDebugAdapter(adapter, session); } protected override daExecutableFromPackage(session: ExtHostDebugSession, extensionRegistry: ExtensionDescriptionRegistry): DebugAdapterExecutable | undefined { @@ -124,10 +125,34 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { const shellProcessId = await terminal.processId; if (giveShellTimeToInitialize) { - // give a new terminal some time to initialize the shell - await new Promise(resolve => setTimeout(resolve, 1000)); + // give a new terminal some time to initialize the shell (most recently, #228191) + // - If shell integration is available, use that as a deterministic signal + // - Debounce content being written to known when the prompt is available + // - Give a longer timeout otherwise + const enum Timing { + DataDebounce = 500, + MaxDelay = 5000, + } + + const ds = new DisposableStore(); + await new Promise(resolve => { + const scheduler = ds.add(new RunOnceScheduler(resolve, Timing.DataDebounce)); + ds.add(this._terminalService.onDidWriteTerminalData(e => { + if (e.terminal === terminal) { + scheduler.schedule(); + } + })); + ds.add(this._terminalShellIntegrationService.onDidChangeTerminalShellIntegration(e => { + if (e.terminal === terminal) { + resolve(); + } + })); + ds.add(disposableTimeout(resolve, Timing.MaxDelay)); + }); + + ds.dispose(); } else { - if (terminal.state.isInteractedWith) { + if (terminal.state.isInteractedWith && !terminal.shellIntegration) { terminal.sendText('\u0003'); // Ctrl+C for #106743. Not part of the same command for #107969 await timeout(200); // mirroring https://github.com/microsoft/vscode/blob/c67ccc70ece5f472ec25464d3eeb874cfccee9f1/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts#L852-L857 } @@ -147,7 +172,12 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { } const command = prepareCommand(shell, args.args, !!args.argsCanBeInterpretedByShell, cwdForPrepareCommand, args.env); - terminal.sendText(command); + + if (terminal.shellIntegration) { + terminal.shellIntegration.executeCommand(command); + } else { + terminal.sendText(command); + } // Mark terminal as unused when its session ends, see #112055 const sessionListener = this.onDidTerminateDebugSession(s => { diff --git a/src/vs/workbench/api/node/extHostDiskFileSystemProvider.ts b/src/vs/workbench/api/node/extHostDiskFileSystemProvider.ts index c4a5e1d2b..2be6ba465 100644 --- a/src/vs/workbench/api/node/extHostDiskFileSystemProvider.ts +++ b/src/vs/workbench/api/node/extHostDiskFileSystemProvider.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; -import { IExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { Schemas } from 'vs/base/common/network'; -import { ILogService } from 'vs/platform/log/common/log'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { FilePermission } from 'vs/platform/files/common/files'; -import { isLinux } from 'vs/base/common/platform'; +import { IExtHostConsumerFileSystem } from '../common/extHostFileSystemConsumer.js'; +import { Schemas } from '../../../base/common/network.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { DiskFileSystemProvider } from '../../../platform/files/node/diskFileSystemProvider.js'; +import { FilePermission } from '../../../platform/files/common/files.js'; +import { isLinux } from '../../../base/common/platform.js'; export class ExtHostDiskFileSystemProvider { diff --git a/src/vs/workbench/api/node/extHostDownloadService.ts b/src/vs/workbench/api/node/extHostDownloadService.ts index 9d81fe712..671dc268b 100644 --- a/src/vs/workbench/api/node/extHostDownloadService.ts +++ b/src/vs/workbench/api/node/extHostDownloadService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { join } from 'vs/base/common/path'; +import { join } from '../../../base/common/path.js'; import { tmpdir } from 'os'; -import { generateUuid } from 'vs/base/common/uuid'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { URI } from 'vs/base/common/uri'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IExtHostCommands } from '../common/extHostCommands.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { MainContext } from '../common/extHost.protocol.js'; +import { URI } from '../../../base/common/uri.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; export class ExtHostDownloadService extends Disposable { diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 4d17df384..51e767f1f 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as performance from 'vs/base/common/performance'; -import { createApiFactoryAndRegisterActors } from 'vs/workbench/api/common/extHost.api.impl'; -import { RequireInterceptor } from 'vs/workbench/api/common/extHostRequireInterceptor'; -import { ExtensionActivationTimesBuilder } from 'vs/workbench/api/common/extHostExtensionActivator'; -import { connectProxyResolver } from 'vs/workbench/api/node/proxyResolver'; -import { AbstractExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { ExtHostDownloadService } from 'vs/workbench/api/node/extHostDownloadService'; -import { URI } from 'vs/base/common/uri'; -import { Schemas } from 'vs/base/common/network'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes'; -import { CLIServer } from 'vs/workbench/api/node/extHostCLIServer'; -import { realpathSync } from 'vs/base/node/extpath'; -import { ExtHostConsoleForwarder } from 'vs/workbench/api/node/extHostConsoleForwarder'; -import { ExtHostDiskFileSystemProvider } from 'vs/workbench/api/node/extHostDiskFileSystemProvider'; +import * as performance from '../../../base/common/performance.js'; +import { createApiFactoryAndRegisterActors } from '../common/extHost.api.impl.js'; +import { RequireInterceptor } from '../common/extHostRequireInterceptor.js'; +import { ExtensionActivationTimesBuilder } from '../common/extHostExtensionActivator.js'; +import { connectProxyResolver } from './proxyResolver.js'; +import { AbstractExtHostExtensionService } from '../common/extHostExtensionService.js'; +import { ExtHostDownloadService } from './extHostDownloadService.js'; +import { URI } from '../../../base/common/uri.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtensionRuntime } from '../common/extHostTypes.js'; +import { CLIServer } from './extHostCLIServer.js'; +import { realpathSync } from '../../../base/node/extpath.js'; +import { ExtHostConsoleForwarder } from './extHostConsoleForwarder.js'; +import { ExtHostDiskFileSystemProvider } from './extHostDiskFileSystemProvider.js'; // ESM-uncomment-begin -// import { createRequire } from 'node:module'; -// const require = createRequire(import.meta.url); +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); // ESM-uncomment-end class NodeModuleRequireInterceptor extends RequireInterceptor { protected _installInterceptor(): void { const that = this; - const node_module = globalThis._VSCODE_NODE_MODULES.module; + const node_module = require('module'); const originalLoad = node_module._load; node_module._load = function load(request: string, parent: { filename: string }, isMain: boolean) { request = applyAlternatives(request); @@ -46,6 +46,20 @@ class NodeModuleRequireInterceptor extends RequireInterceptor { return originalLookup.call(this, applyAlternatives(request), parent); }; + // ESM-uncomment-begin + const originalResolveFilename = node_module._resolveFilename; + node_module._resolveFilename = function resolveFilename(request: string, parent: unknown, isMain: boolean, options?: { paths?: string[] }) { + if (request === 'vsda' && Array.isArray(options?.paths) && options.paths.length === 0) { + // ESM: ever since we moved to ESM, `require.main` will be `undefined` for extensions + // Some extensions have been using `require.resolve('vsda', { paths: require.main.paths })` + // to find the `vsda` module in our app root. To be backwards compatible with this pattern, + // we help by filling in the `paths` array with the node modules paths of the current module. + options.paths = node_module._nodeModulePaths(import.meta.dirname); + } + return originalResolveFilename.call(this, request, parent, isMain, options); + }; + // ESM-uncomment-end + const applyAlternatives = (request: string) => { for (const alternativeModuleName of that._alternatives) { const alternative = alternativeModuleName(request); @@ -89,7 +103,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService { // Do this when extension service exists, but extensions are not being activated yet. const configProvider = await this._extHostConfiguration.getConfigProvider(); - await connectProxyResolver(this._extHostWorkspace, configProvider, this, this._logService, this._mainThreadTelemetryProxy, this._initData); + await connectProxyResolver(this._extHostWorkspace, configProvider, this, this._logService, this._mainThreadTelemetryProxy, this._initData, this._store); performance.mark('code/extHost/didInitProxyResolver'); } diff --git a/src/vs/workbench/api/node/extHostLoggerService.ts b/src/vs/workbench/api/node/extHostLoggerService.ts index 37bd422fb..8d7d79c98 100644 --- a/src/vs/workbench/api/node/extHostLoggerService.ts +++ b/src/vs/workbench/api/node/extHostLoggerService.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILogger, ILoggerOptions, ILoggerResource, LogLevel } from 'vs/platform/log/common/log'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostLoggerService as BaseExtHostLoggerService } from 'vs/workbench/api/common/extHostLoggerService'; -import { Schemas } from 'vs/base/common/network'; -import { SpdLogLogger } from 'vs/platform/log/node/spdlogLog'; -import { generateUuid } from 'vs/base/common/uuid'; +import { ILogger, ILoggerOptions, ILoggerResource, LogLevel } from '../../../platform/log/common/log.js'; +import { URI } from '../../../base/common/uri.js'; +import { ExtHostLoggerService as BaseExtHostLoggerService } from '../common/extHostLoggerService.js'; +import { Schemas } from '../../../base/common/network.js'; +import { SpdLogLogger } from '../../../platform/log/node/spdlogLog.js'; +import { generateUuid } from '../../../base/common/uuid.js'; export class ExtHostLoggerService extends BaseExtHostLoggerService { diff --git a/src/vs/workbench/api/node/extHostSearch.ts b/src/vs/workbench/api/node/extHostSearch.ts index 573aeb08c..c91dd9046 100644 --- a/src/vs/workbench/api/node/extHostSearch.ts +++ b/src/vs/workbench/api/node/extHostSearch.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import * as pfs from 'vs/base/node/pfs'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostSearch, reviveQuery } from 'vs/workbench/api/common/extHostSearch'; -import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { IFileQuery, IRawFileQuery, ISearchCompleteStats, ISerializedSearchProgressItem, isSerializedFileMatch, ITextQuery } from 'vs/workbench/services/search/common/search'; -import { TextSearchManager } from 'vs/workbench/services/search/common/textSearchManager'; -import { SearchService } from 'vs/workbench/services/search/node/rawSearchService'; -import { RipgrepSearchProvider } from 'vs/workbench/services/search/node/ripgrepSearchProvider'; -import { OutputChannel } from 'vs/workbench/services/search/node/ripgrepSearchUtils'; -import { NativeTextSearchManager } from 'vs/workbench/services/search/node/textSearchManager'; +import { DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; +import * as pfs from '../../../base/node/pfs.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostConfiguration } from '../common/extHostConfiguration.js'; +import { IExtHostInitDataService } from '../common/extHostInitDataService.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; +import { ExtHostSearch, reviveQuery } from '../common/extHostSearch.js'; +import { IURITransformerService } from '../common/extHostUriTransformerService.js'; +import { IFileQuery, IRawFileQuery, ISearchCompleteStats, ISerializedSearchProgressItem, isSerializedFileMatch, ITextQuery } from '../../services/search/common/search.js'; +import { TextSearchManager } from '../../services/search/common/textSearchManager.js'; +import { SearchService } from '../../services/search/node/rawSearchService.js'; +import { RipgrepSearchProvider } from '../../services/search/node/ripgrepSearchProvider.js'; +import { OutputChannel } from '../../services/search/node/ripgrepSearchUtils.js'; +import { NativeTextSearchManager } from '../../services/search/node/textSearchManager.js'; import type * as vscode from 'vscode'; export class NativeExtHostSearch extends ExtHostSearch implements IDisposable { diff --git a/src/vs/workbench/api/node/extHostStoragePaths.ts b/src/vs/workbench/api/node/extHostStoragePaths.ts index e259b3b0d..4ec23a27e 100644 --- a/src/vs/workbench/api/node/extHostStoragePaths.ts +++ b/src/vs/workbench/api/node/extHostStoragePaths.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; -import * as path from 'vs/base/common/path'; -import { URI } from 'vs/base/common/uri'; -import { ExtensionStoragePaths as CommonExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { IntervalTimer, timeout } from 'vs/base/common/async'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Promises } from 'vs/base/node/pfs'; +import * as path from '../../../base/common/path.js'; +import { URI } from '../../../base/common/uri.js'; +import { ExtensionStoragePaths as CommonExtensionStoragePaths } from '../common/extHostStoragePaths.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IntervalTimer, timeout } from '../../../base/common/async.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { Promises } from '../../../base/node/pfs.js'; export class ExtensionStoragePaths extends CommonExtensionStoragePaths { diff --git a/src/vs/workbench/api/node/extHostTask.ts b/src/vs/workbench/api/node/extHostTask.ts index b5fac17cd..1e1f0637a 100644 --- a/src/vs/workbench/api/node/extHostTask.ts +++ b/src/vs/workbench/api/node/extHostTask.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as path from 'vs/base/common/path'; +import * as path from '../../../base/common/path.js'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { win32 } from 'vs/base/node/processes'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { win32 } from '../../../base/node/processes.js'; +import * as types from '../common/extHostTypes.js'; +import { IExtHostWorkspace } from '../common/extHostWorkspace.js'; import type * as vscode from 'vscode'; -import * as tasks from '../common/shared/tasks'; -import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { IWorkspaceFolder, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ExtHostTaskBase, TaskHandleDTO, TaskDTO, CustomExecutionDTO, HandlerData } from 'vs/workbench/api/common/extHostTask'; -import { Schemas } from 'vs/base/common/network'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import * as resources from 'vs/base/common/resources'; +import * as tasks from '../common/shared/tasks.js'; +import { IExtHostDocumentsAndEditors } from '../common/extHostDocumentsAndEditors.js'; +import { IExtHostConfiguration } from '../common/extHostConfiguration.js'; +import { IWorkspaceFolder, WorkspaceFolder } from '../../../platform/workspace/common/workspace.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { IExtHostTerminalService } from '../common/extHostTerminalService.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; +import { IExtHostInitDataService } from '../common/extHostInitDataService.js'; +import { ExtHostTaskBase, TaskHandleDTO, TaskDTO, CustomExecutionDTO, HandlerData } from '../common/extHostTask.js'; +import { Schemas } from '../../../base/common/network.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostApiDeprecationService } from '../common/extHostApiDeprecationService.js'; +import * as resources from '../../../base/common/resources.js'; import { homedir } from 'os'; -import { IExtHostVariableResolverProvider } from 'vs/workbench/api/common/extHostVariableResolverService'; +import { IExtHostVariableResolverProvider } from '../common/extHostVariableResolverService.js'; export class ExtHostTask extends ExtHostTaskBase { constructor( diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index fd5ec8136..299f6d6d4 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { generateUuid } from 'vs/base/common/uuid'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { BaseExtHostTerminalService, ExtHostTerminal, ITerminalInternalOptions } from 'vs/workbench/api/common/extHostTerminalService'; +import { generateUuid } from '../../../base/common/uuid.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; +import { BaseExtHostTerminalService, ExtHostTerminal, ITerminalInternalOptions } from '../common/extHostTerminalService.js'; import type * as vscode from 'vscode'; -import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; +import { IExtHostCommands } from '../common/extHostCommands.js'; export class ExtHostTerminalService extends BaseExtHostTerminalService { diff --git a/src/vs/workbench/api/node/extHostTunnelService.ts b/src/vs/workbench/api/node/extHostTunnelService.ts index 54b831094..5e0e5cafa 100644 --- a/src/vs/workbench/api/node/extHostTunnelService.ts +++ b/src/vs/workbench/api/node/extHostTunnelService.ts @@ -5,25 +5,25 @@ import * as fs from 'fs'; import { exec } from 'child_process'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { MovingAverage } from 'vs/base/common/numbers'; -import { isLinux } from 'vs/base/common/platform'; -import * as resources from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import * as pfs from 'vs/base/node/pfs'; -import { ISocket, SocketCloseEventType } from 'vs/base/parts/ipc/common/ipc.net'; -import { ILogService } from 'vs/platform/log/common/log'; -import { ManagedSocket, RemoteSocketHalf, connectManagedSocket } from 'vs/platform/remote/common/managedSocket'; -import { ManagedRemoteConnection } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { ISignService } from 'vs/platform/sign/common/sign'; -import { isAllInterfaces, isLocalhost } from 'vs/platform/tunnel/common/tunnel'; -import { NodeRemoteTunnel } from 'vs/platform/tunnel/node/tunnelService'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService'; -import { CandidatePort, parseAddress } from 'vs/workbench/services/remote/common/tunnelModel'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter } from '../../../base/common/event.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { MovingAverage } from '../../../base/common/numbers.js'; +import { isLinux } from '../../../base/common/platform.js'; +import * as resources from '../../../base/common/resources.js'; +import { URI } from '../../../base/common/uri.js'; +import * as pfs from '../../../base/node/pfs.js'; +import { ISocket, SocketCloseEventType } from '../../../base/parts/ipc/common/ipc.net.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { ManagedSocket, RemoteSocketHalf, connectManagedSocket } from '../../../platform/remote/common/managedSocket.js'; +import { ManagedRemoteConnection } from '../../../platform/remote/common/remoteAuthorityResolver.js'; +import { ISignService } from '../../../platform/sign/common/sign.js'; +import { isAllInterfaces, isLocalhost } from '../../../platform/tunnel/common/tunnel.js'; +import { NodeRemoteTunnel } from '../../../platform/tunnel/node/tunnelService.js'; +import { IExtHostInitDataService } from '../common/extHostInitDataService.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; +import { ExtHostTunnelService } from '../common/extHostTunnelService.js'; +import { CandidatePort, parseAddress } from '../../services/remote/common/tunnelModel.js'; import * as vscode from 'vscode'; export function getSockets(stdout: string): Record { diff --git a/src/vs/workbench/api/node/extHostVariableResolverService.ts b/src/vs/workbench/api/node/extHostVariableResolverService.ts index c6439fd4e..e506a58ef 100644 --- a/src/vs/workbench/api/node/extHostVariableResolverService.ts +++ b/src/vs/workbench/api/node/extHostVariableResolverService.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { homedir } from 'os'; -import { ExtHostVariableResolverProviderService } from 'vs/workbench/api/common/extHostVariableResolverService'; +import { ExtHostVariableResolverProviderService } from '../common/extHostVariableResolverService.js'; export class NodeExtHostVariableResolverProviderService extends ExtHostVariableResolverProviderService { protected override homeDir(): string | undefined { diff --git a/src/vs/workbench/api/node/extensionHostProcess.ts b/src/vs/workbench/api/node/extensionHostProcess.ts index 80a60c1d4..694559385 100644 --- a/src/vs/workbench/api/node/extensionHostProcess.ts +++ b/src/vs/workbench/api/node/extensionHostProcess.ts @@ -6,29 +6,32 @@ import minimist from 'minimist'; import * as nativeWatchdog from 'native-watchdog'; import * as net from 'net'; -import { ProcessTimeRunOnceScheduler } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { isCancellationError, isSigPipeError, onUnexpectedError } from 'vs/base/common/errors'; -import { Event } from 'vs/base/common/event'; -import * as performance from 'vs/base/common/performance'; -import { IURITransformer } from 'vs/base/common/uriIpc'; -import { realpath } from 'vs/base/node/extpath'; -import { Promises } from 'vs/base/node/pfs'; -import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc'; -import { BufferedEmitter, PersistentProtocol, ProtocolConstants } from 'vs/base/parts/ipc/common/ipc.net'; -import { NodeSocket, WebSocketNodeSocket } from 'vs/base/parts/ipc/node/ipc.net'; -import type { MessagePortMain } from 'vs/base/parts/sandbox/node/electronTypes'; -import { boolean } from 'vs/editor/common/config/editorOptions'; -import product from 'vs/platform/product/common/product'; -import { ExtensionHostMain, IExitFn } from 'vs/workbench/api/common/extensionHostMain'; -import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService'; -import { createURITransformer } from 'vs/workbench/api/node/uriTransformer'; -import { ExtHostConnectionType, readExtHostConnection } from 'vs/workbench/services/extensions/common/extensionHostEnv'; -import { ExtensionHostExitCode, IExtHostReadyMessage, IExtHostReduceGraceTimeMessage, IExtHostSocketMessage, IExtensionHostInitData, MessageType, createMessageOfType, isMessageOfType } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; - -import { IDisposable } from 'vs/base/common/lifecycle'; -import 'vs/workbench/api/common/extHost.common.services'; -import 'vs/workbench/api/node/extHost.node.services'; +import { ProcessTimeRunOnceScheduler } from '../../../base/common/async.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { isCancellationError, isSigPipeError, onUnexpectedError } from '../../../base/common/errors.js'; +import { Event } from '../../../base/common/event.js'; +import * as performance from '../../../base/common/performance.js'; +import { IURITransformer } from '../../../base/common/uriIpc.js'; +import { realpath } from '../../../base/node/extpath.js'; +import { Promises } from '../../../base/node/pfs.js'; +import { IMessagePassingProtocol } from '../../../base/parts/ipc/common/ipc.js'; +import { BufferedEmitter, PersistentProtocol, ProtocolConstants } from '../../../base/parts/ipc/common/ipc.net.js'; +import { NodeSocket, WebSocketNodeSocket } from '../../../base/parts/ipc/node/ipc.net.js'; +import type { MessagePortMain } from '../../../base/parts/sandbox/node/electronTypes.js'; +import { boolean } from '../../../editor/common/config/editorOptions.js'; +import product from '../../../platform/product/common/product.js'; +import { ExtensionHostMain, IExitFn } from '../common/extensionHostMain.js'; +import { IHostUtils } from '../common/extHostExtensionService.js'; +import { createURITransformer } from './uriTransformer.js'; +import { ExtHostConnectionType, readExtHostConnection } from '../../services/extensions/common/extensionHostEnv.js'; +import { ExtensionHostExitCode, IExtHostReadyMessage, IExtHostReduceGraceTimeMessage, IExtHostSocketMessage, IExtensionHostInitData, MessageType, createMessageOfType, isMessageOfType } from '../../services/extensions/common/extensionHostProtocol.js'; +import { IDisposable } from '../../../base/common/lifecycle.js'; +import '../common/extHost.common.services.js'; +import './extHost.node.services.js'; +// ESM-uncomment-begin +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); +// ESM-uncomment-end interface ParsedExtHostArgs { transformURIs?: boolean; @@ -63,7 +66,7 @@ const args = minimist(process.argv.slice(2), { // happening we essentially blocklist this module from getting loaded in any // extension by patching the node require() function. (function () { - const Module = globalThis._VSCODE_NODE_MODULES.module as any; + const Module = require('module'); const originalLoad = Module._load; Module._load = function (request: string) { @@ -327,7 +330,7 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise('electronFetch', useElectronFetchDefault); + disposables.add(configProvider.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('http.electronFetch')) { + useElectronFetch = configProvider.getConfiguration('http').get('electronFetch', useElectronFetchDefault); + } + })); + const electron = require('electron'); + // https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API + globalThis.fetch = async function fetch(input: any /* RequestInfo */ | URL, init?: RequestInit) { + function getRequestProperty(name: keyof any /* Request */ & keyof RequestInit) { + return init && name in init ? init[name] : typeof input === 'object' && 'cache' in input ? input[name] : undefined; + } + // Limitations: https://github.com/electron/electron/pull/36733#issuecomment-1405615494 + // net.fetch fails on manual redirect: https://github.com/electron/electron/issues/43715 + const urlString = typeof input === 'string' ? input : 'cache' in input ? input.url : input.toString(); + const isDataUrl = urlString.startsWith('data:'); + if (isDataUrl) { + recordFetchFeatureUse(mainThreadTelemetry, 'data'); + } + const isBlobUrl = urlString.startsWith('blob:'); + if (isBlobUrl) { + recordFetchFeatureUse(mainThreadTelemetry, 'blob'); + } + const isManualRedirect = getRequestProperty('redirect') === 'manual'; + if (isManualRedirect) { + recordFetchFeatureUse(mainThreadTelemetry, 'manualRedirect'); + } + const integrity = getRequestProperty('integrity'); + if (integrity) { + recordFetchFeatureUse(mainThreadTelemetry, 'integrity'); + } + if (!useElectronFetch || isDataUrl || isBlobUrl || isManualRedirect || integrity) { + const response = await originalFetch(input, init); + monitorResponseProperties(mainThreadTelemetry, response, urlString); + return response; + } + // Unsupported headers: https://source.chromium.org/chromium/chromium/src/+/main:services/network/public/cpp/header_util.cc;l=32;drc=ee7299f8961a1b05a3554efcc496b6daa0d7f6e1 + if (init?.headers) { + const headers = new Headers(init.headers); + for (const header of unsafeHeaders) { + headers.delete(header); + } + init = { ...init, headers }; + } + // Support for URL: https://github.com/electron/electron/issues/43712 + const electronInput = input instanceof URL ? input.toString() : input; + const response = await electron.net.fetch(electronInput, init); + monitorResponseProperties(mainThreadTelemetry, response, urlString); + return response; + }; + } +} + +function monitorResponseProperties(mainThreadTelemetry: MainThreadTelemetryShape, response: Response, urlString: string) { + const originalUrl = response.url; + Object.defineProperty(response, 'url', { + get() { + recordFetchFeatureUse(mainThreadTelemetry, 'url'); + return originalUrl || urlString; + } + }); + const originalType = response.type; + Object.defineProperty(response, 'type', { + get() { + recordFetchFeatureUse(mainThreadTelemetry, 'typeProperty'); + return originalType !== 'default' ? originalType : 'basic'; + } + }); +} + +type FetchFeatureUseClassification = { + owner: 'chrmarti'; + comment: 'Data about fetch API use'; + url: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the url property was used.' }; + typeProperty: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the type property was used.' }; + data: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether a data URL was used.' }; + blob: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether a blob URL was used.' }; + integrity: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the integrity property was used.' }; + manualRedirect: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether a manual redirect was used.' }; +}; + +type FetchFeatureUseEvent = { + url: number; + typeProperty: number; + data: number; + blob: number; + integrity: number; + manualRedirect: number; +}; + +const fetchFeatureUse: FetchFeatureUseEvent = { + url: 0, + typeProperty: 0, + data: 0, + blob: 0, + integrity: 0, + manualRedirect: 0, +}; + +let timer: NodeJS.Timeout | undefined; + +function recordFetchFeatureUse(mainThreadTelemetry: MainThreadTelemetryShape, feature: keyof typeof fetchFeatureUse) { + if (!fetchFeatureUse[feature]++) { + if (timer) { + clearTimeout(timer); + } + timer = setTimeout(() => { + mainThreadTelemetry.$publicLog2('fetchFeatureUse', fetchFeatureUse); + }, 10000); // collect additional features for 10 seconds + timer.unref(); + } +} + function createPatchedModules(params: ProxyAgentParams, resolveProxy: ReturnType) { function mergeModules(module: any, patch: any) { @@ -122,7 +257,7 @@ const modulesCache = new Map): Promise { return extensionService.getExtensionPathIndex() .then(extensionPaths => { - const node_module = globalThis._VSCODE_NODE_MODULES.module; + const node_module = require('module'); const original = node_module._load; node_module._load = function load(request: string, parent: { filename: string }, isMain: boolean) { if (request === 'net') { diff --git a/src/vs/workbench/api/node/uriTransformer.ts b/src/vs/workbench/api/node/uriTransformer.ts index c02ea46d0..00bf30130 100644 --- a/src/vs/workbench/api/node/uriTransformer.ts +++ b/src/vs/workbench/api/node/uriTransformer.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { UriParts, IRawURITransformer, URITransformer, IURITransformer } from 'vs/base/common/uriIpc'; +import { UriParts, IRawURITransformer, URITransformer, IURITransformer } from '../../../base/common/uriIpc.js'; /** * ``` diff --git a/src/vs/workbench/api/test/browser/extHost.api.impl.test.ts b/src/vs/workbench/api/test/browser/extHost.api.impl.test.ts index d5db3ca46..28e325233 100644 --- a/src/vs/workbench/api/test/browser/extHost.api.impl.test.ts +++ b/src/vs/workbench/api/test/browser/extHost.api.impl.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { originalFSPath } from 'vs/base/common/resources'; -import { isWindows } from 'vs/base/common/platform'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI } from '../../../../base/common/uri.js'; +import { originalFSPath } from '../../../../base/common/resources.js'; +import { isWindows } from '../../../../base/common/platform.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHost API', function () { test('issue #51387: originalFSPath', function () { diff --git a/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts b/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts index da5e8bb9e..2597ac759 100644 --- a/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts +++ b/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts @@ -3,68 +3,68 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/editor/contrib/codeAction/browser/codeAction'; -import 'vs/editor/contrib/codelens/browser/codelens'; -import 'vs/editor/contrib/colorPicker/browser/color'; -import 'vs/editor/contrib/format/browser/format'; -import 'vs/editor/contrib/gotoSymbol/browser/goToCommands'; -import 'vs/editor/contrib/documentSymbols/browser/documentSymbols'; -import 'vs/editor/contrib/hover/browser/getHover'; -import 'vs/editor/contrib/links/browser/getLinks'; -import 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp'; -import 'vs/editor/contrib/smartSelect/browser/smartSelect'; -import 'vs/editor/contrib/suggest/browser/suggest'; -import 'vs/editor/contrib/rename/browser/rename'; -import 'vs/editor/contrib/inlayHints/browser/inlayHintsController'; +import '../../../../editor/contrib/codeAction/browser/codeAction.js'; +import '../../../../editor/contrib/codelens/browser/codelens.js'; +import '../../../../editor/contrib/colorPicker/browser/colorPickerContribution.js'; +import '../../../../editor/contrib/format/browser/format.js'; +import '../../../../editor/contrib/gotoSymbol/browser/goToCommands.js'; +import '../../../../editor/contrib/documentSymbols/browser/documentSymbols.js'; +import '../../../../editor/contrib/hover/browser/getHover.js'; +import '../../../../editor/contrib/links/browser/getLinks.js'; +import '../../../../editor/contrib/parameterHints/browser/provideSignatureHelp.js'; +import '../../../../editor/contrib/smartSelect/browser/smartSelect.js'; +import '../../../../editor/contrib/suggest/browser/suggest.js'; +import '../../../../editor/contrib/rename/browser/rename.js'; +import '../../../../editor/contrib/inlayHints/browser/inlayHintsController.js'; import assert from 'assert'; -import { setUnexpectedErrorHandler, errorHandler } from 'vs/base/common/errors'; -import { URI } from 'vs/base/common/uri'; -import { Event } from 'vs/base/common/event'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { MarkerService } from 'vs/platform/markers/common/markerService'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { ICommandService, CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ExtHostLanguageFeatures } from 'vs/workbench/api/common/extHostLanguageFeatures'; -import { MainThreadLanguageFeatures } from 'vs/workbench/api/browser/mainThreadLanguageFeatures'; -import { ExtHostApiCommands } from 'vs/workbench/api/common/extHostApiCommands'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { MainThreadCommands } from 'vs/workbench/api/browser/mainThreadCommands'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { MainContext, ExtHostContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics'; +import { setUnexpectedErrorHandler, errorHandler } from '../../../../base/common/errors.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Event } from '../../../../base/common/event.js'; +import * as types from '../../common/extHostTypes.js'; +import { createTextModel } from '../../../../editor/test/common/testTextModel.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { MarkerService } from '../../../../platform/markers/common/markerService.js'; +import { IMarkerService } from '../../../../platform/markers/common/markers.js'; +import { ICommandService, CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { IModelService } from '../../../../editor/common/services/model.js'; +import { ExtHostLanguageFeatures } from '../../common/extHostLanguageFeatures.js'; +import { MainThreadLanguageFeatures } from '../../browser/mainThreadLanguageFeatures.js'; +import { ExtHostApiCommands } from '../../common/extHostApiCommands.js'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { MainThreadCommands } from '../../browser/mainThreadCommands.js'; +import { ExtHostDocuments } from '../../common/extHostDocuments.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { MainContext, ExtHostContext } from '../../common/extHost.protocol.js'; +import { ExtHostDiagnostics } from '../../common/extHostDiagnostics.js'; import type * as vscode from 'vscode'; -import 'vs/workbench/contrib/search/browser/search.contribution'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { ITextModel } from 'vs/editor/common/model'; -import { nullExtensionDescription, IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { dispose, ImmortalReference } from 'vs/base/common/lifecycle'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { mock } from 'vs/base/test/common/mock'; -import { NullApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { IResolvedTextEditorModel, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { IOutlineModelService, OutlineModelService } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { assertType } from 'vs/base/common/types'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { timeout } from 'vs/base/common/async'; +import '../../../contrib/search/browser/search.contribution.js'; +import { ILogService, NullLogService } from '../../../../platform/log/common/log.js'; +import { ITextModel } from '../../../../editor/common/model.js'; +import { nullExtensionDescription, IExtensionService } from '../../../services/extensions/common/extensions.js'; +import { dispose, ImmortalReference } from '../../../../base/common/lifecycle.js'; +import { IEditorWorkerService } from '../../../../editor/common/services/editorWorker.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { NullApiDeprecationService } from '../../common/extHostApiDeprecationService.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +import { IResolvedTextEditorModel, ITextModelService } from '../../../../editor/common/services/resolverService.js'; +import { IExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { URITransformerService } from '../../common/extHostUriTransformerService.js'; +import { IOutlineModelService, OutlineModelService } from '../../../../editor/contrib/documentSymbols/browser/outlineModel.js'; +import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../../../editor/common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../../editor/common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../../../editor/common/services/languageFeaturesService.js'; +import { assertType } from '../../../../base/common/types.js'; +import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { timeout } from '../../../../base/common/async.js'; function assertRejects(fn: () => Promise, message: string = 'Expected rejection') { return fn().then(() => assert.ok(false, message), _err => assert.ok(true)); diff --git a/src/vs/workbench/api/test/browser/extHostAuthentication.integrationTest.ts b/src/vs/workbench/api/test/browser/extHostAuthentication.integrationTest.ts index de02ffff7..ec42932df 100644 --- a/src/vs/workbench/api/test/browser/extHostAuthentication.integrationTest.ts +++ b/src/vs/workbench/api/test/browser/extHostAuthentication.integrationTest.ts @@ -4,33 +4,33 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { IQuickInputHideEvent, IQuickInputService, IQuickPickDidAcceptEvent } from 'vs/platform/quickinput/common/quickInput'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; -import { MainThreadAuthentication } from 'vs/workbench/api/browser/mainThreadAuthentication'; -import { ExtHostContext, MainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostAuthentication } from 'vs/workbench/api/common/extHostAuthentication'; -import { IActivityService } from 'vs/workbench/services/activity/common/activity'; -import { AuthenticationService } from 'vs/workbench/services/authentication/browser/authenticationService'; -import { IAuthenticationExtensionsService, IAuthenticationService } from 'vs/workbench/services/authentication/common/authentication'; -import { IExtensionService, nullExtensionDescription as extensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { TestEnvironmentService, TestQuickInputService, TestRemoteAgentService } from 'vs/workbench/test/browser/workbenchTestServices'; -import { TestActivityService, TestExtensionService, TestProductService, TestStorageService } from 'vs/workbench/test/common/workbenchTestServices'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { TestDialogService } from '../../../../platform/dialogs/test/common/testDialogService.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { TestNotificationService } from '../../../../platform/notification/test/common/testNotificationService.js'; +import { IQuickInputHideEvent, IQuickInputService, IQuickPickDidAcceptEvent } from '../../../../platform/quickinput/common/quickInput.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../../platform/telemetry/common/telemetryUtils.js'; +import { MainThreadAuthentication } from '../../browser/mainThreadAuthentication.js'; +import { ExtHostContext, MainContext } from '../../common/extHost.protocol.js'; +import { ExtHostAuthentication } from '../../common/extHostAuthentication.js'; +import { IActivityService } from '../../../services/activity/common/activity.js'; +import { AuthenticationService } from '../../../services/authentication/browser/authenticationService.js'; +import { IAuthenticationExtensionsService, IAuthenticationService } from '../../../services/authentication/common/authentication.js'; +import { IExtensionService, nullExtensionDescription as extensionDescription } from '../../../services/extensions/common/extensions.js'; +import { IRemoteAgentService } from '../../../services/remote/common/remoteAgentService.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { TestEnvironmentService, TestQuickInputService, TestRemoteAgentService } from '../../../test/browser/workbenchTestServices.js'; +import { TestActivityService, TestExtensionService, TestProductService, TestStorageService } from '../../../test/common/workbenchTestServices.js'; import type { AuthenticationProvider, AuthenticationSession } from 'vscode'; -import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { AuthenticationAccessService, IAuthenticationAccessService } from 'vs/workbench/services/authentication/browser/authenticationAccessService'; -import { AuthenticationUsageService, IAuthenticationUsageService } from 'vs/workbench/services/authentication/browser/authenticationUsageService'; -import { AuthenticationExtensionsService } from 'vs/workbench/services/authentication/browser/authenticationExtensionsService'; +import { IBrowserWorkbenchEnvironmentService } from '../../../services/environment/browser/environmentService.js'; +import { IProductService } from '../../../../platform/product/common/productService.js'; +import { AuthenticationAccessService, IAuthenticationAccessService } from '../../../services/authentication/browser/authenticationAccessService.js'; +import { AuthenticationUsageService, IAuthenticationUsageService } from '../../../services/authentication/browser/authenticationUsageService.js'; +import { AuthenticationExtensionsService } from '../../../services/authentication/browser/authenticationExtensionsService.js'; class AuthQuickPick { private listener: ((e: IQuickPickDidAcceptEvent) => any) | undefined; @@ -117,10 +117,10 @@ suite('ExtHostAuthentication', () => { instantiationService.stub(IBrowserWorkbenchEnvironmentService, TestEnvironmentService); instantiationService.stub(IProductService, TestProductService); instantiationService.stub(IAuthenticationAccessService, instantiationService.createInstance(AuthenticationAccessService)); + instantiationService.stub(IAuthenticationService, instantiationService.createInstance(AuthenticationService)); instantiationService.stub(IAuthenticationUsageService, instantiationService.createInstance(AuthenticationUsageService)); const rpcProtocol = new TestRPCProtocol(); - instantiationService.stub(IAuthenticationService, instantiationService.createInstance(AuthenticationService)); instantiationService.stub(IAuthenticationExtensionsService, instantiationService.createInstance(AuthenticationExtensionsService)); rpcProtocol.set(MainContext.MainThreadAuthentication, instantiationService.createInstance(MainThreadAuthentication, rpcProtocol)); extHostAuthentication = new ExtHostAuthentication(rpcProtocol); diff --git a/src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts b/src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts index be11d3a73..582a5e7c9 100644 --- a/src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts +++ b/src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { MainContext, IWorkspaceEditDto, MainThreadBulkEditsShape, IWorkspaceTextEditDto } from 'vs/workbench/api/common/extHost.protocol'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { SingleProxyRPCProtocol, TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ExtHostBulkEdits } from 'vs/workbench/api/common/extHostBulkEdits'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import * as extHostTypes from '../../common/extHostTypes.js'; +import { MainContext, IWorkspaceEditDto, MainThreadBulkEditsShape, IWorkspaceTextEditDto } from '../../common/extHost.protocol.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { SingleProxyRPCProtocol, TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ExtHostBulkEdits } from '../../common/extHostBulkEdits.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js'; suite('ExtHostBulkEdits.applyWorkspaceEdit', () => { diff --git a/src/vs/workbench/api/test/browser/extHostCommands.test.ts b/src/vs/workbench/api/test/browser/extHostCommands.test.ts index 5353ca9c0..66e78d372 100644 --- a/src/vs/workbench/api/test/browser/extHostCommands.test.ts +++ b/src/vs/workbench/api/test/browser/extHostCommands.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { MainThreadCommandsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { mock } from 'vs/base/test/common/mock'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { MainThreadCommandsShape } from '../../common/extHost.protocol.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostCommands', function () { ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/workbench/api/test/browser/extHostConfiguration.test.ts b/src/vs/workbench/api/test/browser/extHostConfiguration.test.ts index 298299b3e..00c9af619 100644 --- a/src/vs/workbench/api/test/browser/extHostConfiguration.test.ts +++ b/src/vs/workbench/api/test/browser/extHostConfiguration.test.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { ExtHostConfigProvider } from 'vs/workbench/api/common/extHostConfiguration'; -import { MainThreadConfigurationShape, IConfigurationInitData } from 'vs/workbench/api/common/extHost.protocol'; -import { ConfigurationModel, ConfigurationModelParser } from 'vs/platform/configuration/common/configurationModels'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { mock } from 'vs/base/test/common/mock'; -import { IWorkspaceFolder, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { ConfigurationTarget, IConfigurationModel, IConfigurationChange } from 'vs/platform/configuration/common/configuration'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; -import { isLinux } from 'vs/base/common/platform'; -import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { ExtHostWorkspace } from '../../common/extHostWorkspace.js'; +import { ExtHostConfigProvider } from '../../common/extHostConfiguration.js'; +import { MainThreadConfigurationShape, IConfigurationInitData } from '../../common/extHost.protocol.js'; +import { ConfigurationModel, ConfigurationModelParser } from '../../../../platform/configuration/common/configurationModels.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IWorkspaceFolder, WorkspaceFolder } from '../../../../platform/workspace/common/workspace.js'; +import { ConfigurationTarget, IConfigurationModel, IConfigurationChange } from '../../../../platform/configuration/common/configuration.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { IExtHostInitDataService } from '../../common/extHostInitDataService.js'; +import { IExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { FileSystemProviderCapabilities } from '../../../../platform/files/common/files.js'; +import { isLinux } from '../../../../base/common/platform.js'; +import { IURITransformerService } from '../../common/extHostUriTransformerService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostConfiguration', function () { diff --git a/src/vs/workbench/api/test/browser/extHostDecorations.test.ts b/src/vs/workbench/api/test/browser/extHostDecorations.test.ts index 8dca84bc5..78832d2d9 100644 --- a/src/vs/workbench/api/test/browser/extHostDecorations.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDecorations.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { timeout } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { MainThreadDecorationsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDecorations } from 'vs/workbench/api/common/extHostDecorations'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; +import { timeout } from '../../../../base/common/async.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { MainThreadDecorationsShape } from '../../common/extHost.protocol.js'; +import { ExtHostDecorations } from '../../common/extHostDecorations.js'; +import { IExtHostRpcService } from '../../common/extHostRpcService.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; suite('ExtHostDecorations', function () { diff --git a/src/vs/workbench/api/test/browser/extHostDiagnostics.test.ts b/src/vs/workbench/api/test/browser/extHostDiagnostics.test.ts index 2c866daee..8f63ccc30 100644 --- a/src/vs/workbench/api/test/browser/extHostDiagnostics.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDiagnostics.test.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { DiagnosticCollection, ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics'; -import { Diagnostic, DiagnosticSeverity, Range, DiagnosticRelatedInformation, Location } from 'vs/workbench/api/common/extHostTypes'; -import { MainThreadDiagnosticsShape, IMainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { IMarkerData, MarkerSeverity } from 'vs/platform/markers/common/markers'; -import { mock } from 'vs/base/test/common/mock'; -import { Emitter, Event } from 'vs/base/common/event'; -import { NullLogService } from 'vs/platform/log/common/log'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { DiagnosticCollection, ExtHostDiagnostics } from '../../common/extHostDiagnostics.js'; +import { Diagnostic, DiagnosticSeverity, Range, DiagnosticRelatedInformation, Location } from '../../common/extHostTypes.js'; +import { MainThreadDiagnosticsShape, IMainContext } from '../../common/extHost.protocol.js'; +import { IMarkerData, MarkerSeverity } from '../../../../platform/markers/common/markers.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; import type * as vscode from 'vscode'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { ExtUri, extUri } from 'vs/base/common/resources'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; +import { ExtUri, extUri } from '../../../../base/common/resources.js'; +import { IExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { IExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostDiagnostics', () => { diff --git a/src/vs/workbench/api/test/browser/extHostDocumentContentProvider.test.ts b/src/vs/workbench/api/test/browser/extHostDocumentContentProvider.test.ts index f4795adeb..5a128d5f7 100644 --- a/src/vs/workbench/api/test/browser/extHostDocumentContentProvider.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDocumentContentProvider.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ExtHostDocumentContentProvider } from 'vs/workbench/api/common/extHostDocumentContentProviders'; -import { Emitter } from 'vs/base/common/event'; -import { MainThreadDocumentContentProvidersShape } from 'vs/workbench/api/common/extHost.protocol'; -import { timeout } from 'vs/base/common/async'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExtHostDocumentContentProvider } from '../../common/extHostDocumentContentProviders.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { MainThreadDocumentContentProvidersShape } from '../../common/extHost.protocol.js'; +import { timeout } from '../../../../base/common/async.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; suite('ExtHostDocumentContentProvider', () => { diff --git a/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts b/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts index 298a28119..926b8fdc6 100644 --- a/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData'; -import { Position } from 'vs/workbench/api/common/extHostTypes'; -import { Range } from 'vs/editor/common/core/range'; -import { MainThreadDocumentsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; -import { mock } from 'vs/base/test/common/mock'; -import * as perfData from './extHostDocumentData.test.perf-data'; -import { setDefaultGetWordAtTextConfig } from 'vs/editor/common/core/wordHelper'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI } from '../../../../base/common/uri.js'; +import { ExtHostDocumentData } from '../../common/extHostDocumentData.js'; +import { Position } from '../../common/extHostTypes.js'; +import { Range } from '../../../../editor/common/core/range.js'; +import { MainThreadDocumentsShape } from '../../common/extHost.protocol.js'; +import { IModelChangedEvent } from '../../../../editor/common/model/mirrorTextModel.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import * as perfData from './extHostDocumentData.test.perf-data.js'; +import { setDefaultGetWordAtTextConfig } from '../../../../editor/common/core/wordHelper.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostDocumentData', () => { diff --git a/src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts b/src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts index 9f0a28ec0..965bb1622 100644 --- a/src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { TextDocumentSaveReason, TextEdit, Position, EndOfLine } from 'vs/workbench/api/common/extHostTypes'; -import { MainThreadTextEditorsShape, IWorkspaceEditDto, IWorkspaceTextEditDto, MainThreadBulkEditsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocumentSaveParticipant } from 'vs/workbench/api/common/extHostDocumentSaveParticipant'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { SaveReason } from 'vs/workbench/common/editor'; +import { URI } from '../../../../base/common/uri.js'; +import { ExtHostDocuments } from '../../common/extHostDocuments.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { TextDocumentSaveReason, TextEdit, Position, EndOfLine } from '../../common/extHostTypes.js'; +import { MainThreadTextEditorsShape, IWorkspaceEditDto, IWorkspaceTextEditDto, MainThreadBulkEditsShape } from '../../common/extHost.protocol.js'; +import { ExtHostDocumentSaveParticipant } from '../../common/extHostDocumentSaveParticipant.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { SaveReason } from '../../../common/editor.js'; import type * as vscode from 'vscode'; -import { mock } from 'vs/base/test/common/mock'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { mock } from '../../../../base/test/common/mock.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js'; function timeout(n: number) { return new Promise(resolve => setTimeout(resolve, n)); diff --git a/src/vs/workbench/api/test/browser/extHostDocumentsAndEditors.test.ts b/src/vs/workbench/api/test/browser/extHostDocumentsAndEditors.test.ts index eda975387..a0b9f1f7b 100644 --- a/src/vs/workbench/api/test/browser/extHostDocumentsAndEditors.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDocumentsAndEditors.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI } from '../../../../base/common/uri.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostDocumentsAndEditors', () => { diff --git a/src/vs/workbench/api/test/browser/extHostEditorTabs.test.ts b/src/vs/workbench/api/test/browser/extHostEditorTabs.test.ts index 75f2ccce2..63bf82bdb 100644 --- a/src/vs/workbench/api/test/browser/extHostEditorTabs.test.ts +++ b/src/vs/workbench/api/test/browser/extHostEditorTabs.test.ts @@ -5,13 +5,13 @@ import type * as vscode from 'vscode'; import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { IEditorTabDto, IEditorTabGroupDto, MainThreadEditorTabsShape, TabInputKind, TabModelOperationKind, TextInputDto } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { TextMergeTabInput, TextTabInput } from 'vs/workbench/api/common/extHostTypes'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IEditorTabDto, IEditorTabGroupDto, MainThreadEditorTabsShape, TabInputKind, TabModelOperationKind, TextInputDto } from '../../common/extHost.protocol.js'; +import { ExtHostEditorTabs } from '../../common/extHostEditorTabs.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { TextMergeTabInput, TextTabInput } from '../../common/extHostTypes.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostEditorTabs', function () { diff --git a/src/vs/workbench/api/test/browser/extHostFileSystemEventService.test.ts b/src/vs/workbench/api/test/browser/extHostFileSystemEventService.test.ts index 953aff7ea..6ffae58bc 100644 --- a/src/vs/workbench/api/test/browser/extHostFileSystemEventService.test.ts +++ b/src/vs/workbench/api/test/browser/extHostFileSystemEventService.test.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { ExtHostFileSystemEventService } from 'vs/workbench/api/common/extHostFileSystemEventService'; -import { IMainContext } from 'vs/workbench/api/common/extHost.protocol'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { ExtHostFileSystemEventService } from '../../common/extHostFileSystemEventService.js'; +import { IMainContext } from '../../common/extHost.protocol.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostFileSystemEventService', () => { @@ -22,13 +22,13 @@ suite('ExtHostFileSystemEventService', () => { drain: undefined! }; - const watcher1 = new ExtHostFileSystemEventService(protocol, new NullLogService(), undefined!).createFileSystemWatcher(undefined!, undefined!, '**/somethingInteresting', { correlate: false }); + const watcher1 = new ExtHostFileSystemEventService(protocol, new NullLogService(), undefined!).createFileSystemWatcher(undefined!, undefined!, undefined!, '**/somethingInteresting', { correlate: false }); assert.strictEqual(watcher1.ignoreChangeEvents, false); assert.strictEqual(watcher1.ignoreCreateEvents, false); assert.strictEqual(watcher1.ignoreDeleteEvents, false); watcher1.dispose(); - const watcher2 = new ExtHostFileSystemEventService(protocol, new NullLogService(), undefined!).createFileSystemWatcher(undefined!, undefined!, '**/somethingBoring', { ignoreCreateEvents: true, ignoreChangeEvents: true, ignoreDeleteEvents: true, correlate: false }); + const watcher2 = new ExtHostFileSystemEventService(protocol, new NullLogService(), undefined!).createFileSystemWatcher(undefined!, undefined!, undefined!, '**/somethingBoring', { ignoreCreateEvents: true, ignoreChangeEvents: true, ignoreDeleteEvents: true, correlate: false }); assert.strictEqual(watcher2.ignoreChangeEvents, true); assert.strictEqual(watcher2.ignoreCreateEvents, true); assert.strictEqual(watcher2.ignoreDeleteEvents, true); diff --git a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts index ec934301c..e26fa6617 100644 --- a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts @@ -4,58 +4,58 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { setUnexpectedErrorHandler, errorHandler } from 'vs/base/common/errors'; -import { URI } from 'vs/base/common/uri'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { Position as EditorPosition, Position } from 'vs/editor/common/core/position'; -import { Range as EditorRange } from 'vs/editor/common/core/range'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { MarkerService } from 'vs/platform/markers/common/markerService'; -import { ExtHostLanguageFeatures } from 'vs/workbench/api/common/extHostLanguageFeatures'; -import { MainThreadLanguageFeatures } from 'vs/workbench/api/browser/mainThreadLanguageFeatures'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { MainThreadCommands } from 'vs/workbench/api/browser/mainThreadCommands'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import * as languages from 'vs/editor/common/languages'; -import { getCodeLensModel } from 'vs/editor/contrib/codelens/browser/codelens'; -import { getDefinitionsAtPosition, getImplementationsAtPosition, getTypeDefinitionsAtPosition, getDeclarationsAtPosition, getReferencesAtPosition } from 'vs/editor/contrib/gotoSymbol/browser/goToSymbol'; -import { getHoversPromise } from 'vs/editor/contrib/hover/browser/getHover'; -import { getOccurrencesAtPosition } from 'vs/editor/contrib/wordHighlighter/browser/wordHighlighter'; -import { getCodeActions } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { getWorkspaceSymbols } from 'vs/workbench/contrib/search/common/search'; -import { rename } from 'vs/editor/contrib/rename/browser/rename'; -import { provideSignatureHelp } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp'; -import { provideSuggestionItems, CompletionOptions } from 'vs/editor/contrib/suggest/browser/suggest'; -import { getDocumentFormattingEditsUntilResult, getDocumentRangeFormattingEditsUntilResult, getOnTypeFormattingEdits } from 'vs/editor/contrib/format/browser/format'; -import { getLinks } from 'vs/editor/contrib/links/browser/getLinks'; -import { MainContext, ExtHostContext } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { setUnexpectedErrorHandler, errorHandler } from '../../../../base/common/errors.js'; +import { URI } from '../../../../base/common/uri.js'; +import * as types from '../../common/extHostTypes.js'; +import { createTextModel } from '../../../../editor/test/common/testTextModel.js'; +import { Position as EditorPosition, Position } from '../../../../editor/common/core/position.js'; +import { Range as EditorRange } from '../../../../editor/common/core/range.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { IMarkerService } from '../../../../platform/markers/common/markers.js'; +import { MarkerService } from '../../../../platform/markers/common/markerService.js'; +import { ExtHostLanguageFeatures } from '../../common/extHostLanguageFeatures.js'; +import { MainThreadLanguageFeatures } from '../../browser/mainThreadLanguageFeatures.js'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { MainThreadCommands } from '../../browser/mainThreadCommands.js'; +import { ExtHostDocuments } from '../../common/extHostDocuments.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import * as languages from '../../../../editor/common/languages.js'; +import { getCodeLensModel } from '../../../../editor/contrib/codelens/browser/codelens.js'; +import { getDefinitionsAtPosition, getImplementationsAtPosition, getTypeDefinitionsAtPosition, getDeclarationsAtPosition, getReferencesAtPosition } from '../../../../editor/contrib/gotoSymbol/browser/goToSymbol.js'; +import { getHoversPromise } from '../../../../editor/contrib/hover/browser/getHover.js'; +import { getOccurrencesAtPosition } from '../../../../editor/contrib/wordHighlighter/browser/wordHighlighter.js'; +import { getCodeActions } from '../../../../editor/contrib/codeAction/browser/codeAction.js'; +import { getWorkspaceSymbols } from '../../../contrib/search/common/search.js'; +import { rename } from '../../../../editor/contrib/rename/browser/rename.js'; +import { provideSignatureHelp } from '../../../../editor/contrib/parameterHints/browser/provideSignatureHelp.js'; +import { provideSuggestionItems, CompletionOptions } from '../../../../editor/contrib/suggest/browser/suggest.js'; +import { getDocumentFormattingEditsUntilResult, getDocumentRangeFormattingEditsUntilResult, getOnTypeFormattingEdits } from '../../../../editor/contrib/format/browser/format.js'; +import { getLinks } from '../../../../editor/contrib/links/browser/getLinks.js'; +import { MainContext, ExtHostContext } from '../../common/extHost.protocol.js'; +import { ExtHostDiagnostics } from '../../common/extHostDiagnostics.js'; import type * as vscode from 'vscode'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ITextModel, EndOfLineSequence } from 'vs/editor/common/model'; -import { getColors } from 'vs/editor/contrib/colorPicker/browser/color'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { nullExtensionDescription as defaultExtension } from 'vs/workbench/services/extensions/common/extensions'; -import { provideSelectionRanges } from 'vs/editor/contrib/smartSelect/browser/smartSelect'; -import { mock } from 'vs/base/test/common/mock'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { NullApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { Progress } from 'vs/platform/progress/common/progress'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { OutlineModel } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; -import { CodeActionTriggerSource } from 'vs/editor/contrib/codeAction/common/types'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ITextModel, EndOfLineSequence } from '../../../../editor/common/model.js'; +import { getColors } from '../../../../editor/contrib/colorPicker/browser/color.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { nullExtensionDescription as defaultExtension } from '../../../services/extensions/common/extensions.js'; +import { provideSelectionRanges } from '../../../../editor/contrib/smartSelect/browser/smartSelect.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IEditorWorkerService } from '../../../../editor/common/services/editorWorker.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { NullApiDeprecationService } from '../../common/extHostApiDeprecationService.js'; +import { Progress } from '../../../../platform/progress/common/progress.js'; +import { IExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { URITransformerService } from '../../common/extHostUriTransformerService.js'; +import { OutlineModel } from '../../../../editor/contrib/documentSymbols/browser/outlineModel.js'; +import { ILanguageFeaturesService } from '../../../../editor/common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../../../editor/common/services/languageFeaturesService.js'; +import { CodeActionTriggerSource } from '../../../../editor/contrib/codeAction/common/types.js'; +import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostLanguageFeatures', function () { diff --git a/src/vs/workbench/api/test/browser/extHostMessagerService.test.ts b/src/vs/workbench/api/test/browser/extHostMessagerService.test.ts index a88e5a79b..d5fc283ae 100644 --- a/src/vs/workbench/api/test/browser/extHostMessagerService.test.ts +++ b/src/vs/workbench/api/test/browser/extHostMessagerService.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { MainThreadMessageService } from 'vs/workbench/api/browser/mainThreadMessageService'; -import { IDialogService, IPrompt, IPromptButton } from 'vs/platform/dialogs/common/dialogs'; -import { INotificationService, INotification, NoOpNotification, INotificationHandle, Severity, IPromptChoice, IPromptOptions, IStatusMessageOptions, INotificationSource, INotificationSourceFilter, NotificationsFilter } from 'vs/platform/notification/common/notification'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { mock } from 'vs/base/test/common/mock'; -import { IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TestExtensionService } from 'vs/workbench/test/common/workbenchTestServices'; +import { MainThreadMessageService } from '../../browser/mainThreadMessageService.js'; +import { IDialogService, IPrompt, IPromptButton } from '../../../../platform/dialogs/common/dialogs.js'; +import { INotificationService, INotification, NoOpNotification, INotificationHandle, Severity, IPromptChoice, IPromptOptions, IStatusMessageOptions, INotificationSource, INotificationSourceFilter, NotificationsFilter } from '../../../../platform/notification/common/notification.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IDisposable, Disposable } from '../../../../base/common/lifecycle.js'; +import { Event } from '../../../../base/common/event.js'; +import { TestDialogService } from '../../../../platform/dialogs/test/common/testDialogService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TestExtensionService } from '../../../test/common/workbenchTestServices.js'; const emptyCommandService: ICommandService = { _serviceBrand: undefined, diff --git a/src/vs/workbench/api/test/browser/extHostNotebook.test.ts b/src/vs/workbench/api/test/browser/extHostNotebook.test.ts index 49a2f0116..54b14a349 100644 --- a/src/vs/workbench/api/test/browser/extHostNotebook.test.ts +++ b/src/vs/workbench/api/test/browser/extHostNotebook.test.ts @@ -5,30 +5,30 @@ import assert from 'assert'; import * as vscode from 'vscode'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { mock } from 'vs/base/test/common/mock'; -import { IModelAddedData, MainContext, MainThreadCommandsShape, MainThreadNotebookShape, NotebookCellsChangedEventDto, NotebookOutputItemDto } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { ExtHostNotebookDocument } from 'vs/workbench/api/common/extHostNotebookDocument'; -import { CellKind, CellUri, NotebookCellsChangeType } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { URI } from 'vs/base/common/uri'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { isEqual } from 'vs/base/common/resources'; -import { Event } from 'vs/base/common/event'; -import { ExtHostNotebookDocuments } from 'vs/workbench/api/common/extHostNotebookDocuments'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { ExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ExtHostSearch } from 'vs/workbench/api/common/extHostSearch'; -import { URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IModelAddedData, MainContext, MainThreadCommandsShape, MainThreadNotebookShape, NotebookCellsChangedEventDto, NotebookOutputItemDto } from '../../common/extHost.protocol.js'; +import { ExtHostNotebookController } from '../../common/extHostNotebook.js'; +import { ExtHostNotebookDocument } from '../../common/extHostNotebookDocument.js'; +import { CellKind, CellUri, NotebookCellsChangeType } from '../../../contrib/notebook/common/notebookCommon.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ExtHostDocuments } from '../../common/extHostDocuments.js'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { Event } from '../../../../base/common/event.js'; +import { ExtHostNotebookDocuments } from '../../common/extHostNotebookDocuments.js'; +import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ExtHostConsumerFileSystem } from '../../common/extHostFileSystemConsumer.js'; +import { ExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExtHostSearch } from '../../common/extHostSearch.js'; +import { URITransformerService } from '../../common/extHostUriTransformerService.js'; suite('NotebookCell#Document', function () { let rpcProtocol: TestRPCProtocol; @@ -97,7 +97,8 @@ suite('NotebookCell#Document', function () { documentUri: notebookUri, id: '_notebook_editor_0', selections: [{ start: 0, end: 1 }], - visibleRanges: [] + visibleRanges: [], + viewType: 'test' }] })); extHostNotebooks.$acceptDocumentAndEditorsDelta(new SerializableObjectWithBuffers({ newActiveEditor: '_notebook_editor_0' })); @@ -369,7 +370,8 @@ suite('NotebookCell#Document', function () { documentUri: notebookUri, id: '_notebook_editor_2', selections: [{ start: 0, end: 1 }], - visibleRanges: [] + visibleRanges: [], + viewType: 'test' }] })); diff --git a/src/vs/workbench/api/test/browser/extHostNotebookKernel.test.ts b/src/vs/workbench/api/test/browser/extHostNotebookKernel.test.ts index a1341bad5..e025bb78b 100644 --- a/src/vs/workbench/api/test/browser/extHostNotebookKernel.test.ts +++ b/src/vs/workbench/api/test/browser/extHostNotebookKernel.test.ts @@ -4,33 +4,33 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Barrier } from 'vs/base/common/async'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ICellExecuteUpdateDto, ICellExecutionCompleteDto, INotebookKernelDto2, MainContext, MainThreadCommandsShape, MainThreadNotebookDocumentsShape, MainThreadNotebookKernelsShape, MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook'; -import { ExtHostNotebookDocument } from 'vs/workbench/api/common/extHostNotebookDocument'; -import { ExtHostNotebookDocuments } from 'vs/workbench/api/common/extHostNotebookDocuments'; -import { ExtHostNotebookKernels } from 'vs/workbench/api/common/extHostNotebookKernels'; -import { NotebookCellOutput, NotebookCellOutputItem } from 'vs/workbench/api/common/extHostTypes'; -import { CellKind, CellUri, NotebookCellsChangeType } from 'vs/workbench/contrib/notebook/common/notebookCommon'; -import { CellExecutionUpdateType } from 'vs/workbench/contrib/notebook/common/notebookExecutionService'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { mock } from 'vs/workbench/test/common/workbenchTestServices'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer'; -import { ExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ExtHostSearch } from 'vs/workbench/api/common/extHostSearch'; -import { URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; +import { Barrier } from '../../../../base/common/async.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ICellExecuteUpdateDto, ICellExecutionCompleteDto, INotebookKernelDto2, MainContext, MainThreadCommandsShape, MainThreadNotebookDocumentsShape, MainThreadNotebookKernelsShape, MainThreadNotebookShape } from '../../common/extHost.protocol.js'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { ExtHostDocuments } from '../../common/extHostDocuments.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { IExtHostInitDataService } from '../../common/extHostInitDataService.js'; +import { ExtHostNotebookController } from '../../common/extHostNotebook.js'; +import { ExtHostNotebookDocument } from '../../common/extHostNotebookDocument.js'; +import { ExtHostNotebookDocuments } from '../../common/extHostNotebookDocuments.js'; +import { ExtHostNotebookKernels } from '../../common/extHostNotebookKernels.js'; +import { NotebookCellOutput, NotebookCellOutputItem } from '../../common/extHostTypes.js'; +import { CellKind, CellUri, NotebookCellsChangeType } from '../../../contrib/notebook/common/notebookCommon.js'; +import { CellExecutionUpdateType } from '../../../contrib/notebook/common/notebookExecutionService.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; +import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { mock } from '../../../test/common/workbenchTestServices.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ExtHostConsumerFileSystem } from '../../common/extHostFileSystemConsumer.js'; +import { ExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExtHostSearch } from '../../common/extHostSearch.js'; +import { URITransformerService } from '../../common/extHostUriTransformerService.js'; suite('NotebookKernel', function () { let rpcProtocol: TestRPCProtocol; @@ -136,7 +136,8 @@ suite('NotebookKernel', function () { documentUri: notebookUri, id: '_notebook_editor_0', selections: [{ start: 0, end: 1 }], - visibleRanges: [] + visibleRanges: [], + viewType: 'test', }] })); extHostNotebooks.$acceptDocumentAndEditorsDelta(new SerializableObjectWithBuffers({ newActiveEditor: '_notebook_editor_0' })); diff --git a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts index 54878ddb0..7be5b9554 100644 --- a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ExtensionIdentifier, IExtensionDescription, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { DEFAULT_LOG_LEVEL, LogLevel } from 'vs/platform/log/common/log'; -import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; -import { TestTelemetryLoggerService } from 'vs/platform/telemetry/test/common/telemetryLogAppender.test'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { ExtHostTelemetry, ExtHostTelemetryLogger } from 'vs/workbench/api/common/extHostTelemetry'; -import { IEnvironment } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { mock } from 'vs/workbench/test/common/workbenchTestServices'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExtensionIdentifier, IExtensionDescription, TargetPlatform } from '../../../../platform/extensions/common/extensions.js'; +import { DEFAULT_LOG_LEVEL, LogLevel } from '../../../../platform/log/common/log.js'; +import { TelemetryLevel } from '../../../../platform/telemetry/common/telemetry.js'; +import { TestTelemetryLoggerService } from '../../../../platform/telemetry/test/common/telemetryLogAppender.test.js'; +import { IExtHostInitDataService } from '../../common/extHostInitDataService.js'; +import { ExtHostTelemetry, ExtHostTelemetryLogger } from '../../common/extHostTelemetry.js'; +import { IEnvironment } from '../../../services/extensions/common/extensionHostProtocol.js'; +import { mock } from '../../../test/common/workbenchTestServices.js'; import type { TelemetryLoggerOptions, TelemetrySender } from 'vscode'; interface TelemetryLoggerSpy { diff --git a/src/vs/workbench/api/test/browser/extHostTesting.test.ts b/src/vs/workbench/api/test/browser/extHostTesting.test.ts index 4a49c8031..3b45e1073 100644 --- a/src/vs/workbench/api/test/browser/extHostTesting.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTesting.test.ts @@ -5,29 +5,29 @@ import assert from 'assert'; import * as sinon from 'sinon'; -import { timeout } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { Event } from 'vs/base/common/event'; -import { Iterable } from 'vs/base/common/iterator'; -import { URI } from 'vs/base/common/uri'; -import { mock, mockObject, MockObject } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import * as editorRange from 'vs/editor/common/core/range'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { MainThreadTestingShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ExtHostTesting, TestRunCoordinator, TestRunDto, TestRunProfileImpl } from 'vs/workbench/api/common/extHostTesting'; -import { ExtHostTestItemCollection, TestItemImpl } from 'vs/workbench/api/common/extHostTestItem'; -import * as convert from 'vs/workbench/api/common/extHostTypeConverters'; -import { Location, Position, Range, TestMessage, TestRunProfileKind, TestRunRequest as TestRunRequestImpl, TestTag } from 'vs/workbench/api/common/extHostTypes'; -import { AnyCallRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { TestId } from 'vs/workbench/contrib/testing/common/testId'; -import { TestDiffOpType, TestItemExpandState, TestMessageType, TestsDiff } from 'vs/workbench/contrib/testing/common/testTypes'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; +import { timeout } from '../../../../base/common/async.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { Event } from '../../../../base/common/event.js'; +import { Iterable } from '../../../../base/common/iterator.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock, mockObject, MockObject } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import * as editorRange from '../../../../editor/common/core/range.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../../platform/extensions/common/extensions.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { MainThreadTestingShape } from '../../common/extHost.protocol.js'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { ExtHostDocumentsAndEditors } from '../../common/extHostDocumentsAndEditors.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ExtHostTesting, TestRunCoordinator, TestRunDto, TestRunProfileImpl } from '../../common/extHostTesting.js'; +import { ExtHostTestItemCollection, TestItemImpl } from '../../common/extHostTestItem.js'; +import * as convert from '../../common/extHostTypeConverters.js'; +import { Location, Position, Range, TestMessage, TestRunProfileKind, TestRunRequest as TestRunRequestImpl, TestTag } from '../../common/extHostTypes.js'; +import { AnyCallRPCProtocol } from '../common/testRPCProtocol.js'; +import { TestId } from '../../../contrib/testing/common/testId.js'; +import { TestDiffOpType, TestItemExpandState, TestMessageType, TestsDiff } from '../../../contrib/testing/common/testTypes.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; import type { TestController, TestItem, TestRunProfile, TestRunRequest } from 'vscode'; const simplify = (item: TestItem) => ({ diff --git a/src/vs/workbench/api/test/browser/extHostTextEditor.test.ts b/src/vs/workbench/api/test/browser/extHostTextEditor.test.ts index 98bc77661..b76b9048a 100644 --- a/src/vs/workbench/api/test/browser/extHostTextEditor.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTextEditor.test.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Lazy } from 'vs/base/common/lazy'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { RenderLineNumbersType, TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, MainThreadTextEditorsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData'; -import { ExtHostTextEditor, ExtHostTextEditorOptions } from 'vs/workbench/api/common/extHostTextEditor'; -import { Range, TextEditorLineNumbersStyle } from 'vs/workbench/api/common/extHostTypes'; +import { Lazy } from '../../../../base/common/lazy.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { RenderLineNumbersType, TextEditorCursorStyle } from '../../../../editor/common/config/editorOptions.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, MainThreadTextEditorsShape } from '../../common/extHost.protocol.js'; +import { ExtHostDocumentData } from '../../common/extHostDocumentData.js'; +import { ExtHostTextEditor, ExtHostTextEditorOptions } from '../../common/extHostTextEditor.js'; +import { Range, TextEditorLineNumbersStyle } from '../../common/extHostTypes.js'; suite('ExtHostTextEditor', () => { diff --git a/src/vs/workbench/api/test/browser/extHostTreeViews.test.ts b/src/vs/workbench/api/test/browser/extHostTreeViews.test.ts index 1e442c1ed..d00b0f7c9 100644 --- a/src/vs/workbench/api/test/browser/extHostTreeViews.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTreeViews.test.ts @@ -5,20 +5,20 @@ import assert from 'assert'; import * as sinon from 'sinon'; -import { Emitter } from 'vs/base/common/event'; -import { ExtHostTreeViews } from 'vs/workbench/api/common/extHostTreeViews'; -import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { MainThreadTreeViewsShape, MainContext, MainThreadCommandsShape } from 'vs/workbench/api/common/extHost.protocol'; +import { Emitter } from '../../../../base/common/event.js'; +import { ExtHostTreeViews } from '../../common/extHostTreeViews.js'; +import { ExtHostCommands } from '../../common/extHostCommands.js'; +import { MainThreadTreeViewsShape, MainContext, MainThreadCommandsShape } from '../../common/extHost.protocol.js'; import { TreeDataProvider, TreeItem } from 'vscode'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { mock } from 'vs/base/test/common/mock'; -import { TreeItemCollapsibleState, ITreeItem, IRevealOptions } from 'vs/workbench/common/views'; -import { NullLogService } from 'vs/platform/log/common/log'; -import type { IDisposable } from 'vs/base/common/lifecycle'; -import { nullExtensionDescription as extensionsDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { TreeItemCollapsibleState, ITreeItem, IRevealOptions } from '../../../common/views.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import type { IDisposable } from '../../../../base/common/lifecycle.js'; +import { nullExtensionDescription as extensionsDescription } from '../../../services/extensions/common/extensions.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostTreeView', function () { const store = ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/workbench/api/test/browser/extHostTypeConverter.test.ts b/src/vs/workbench/api/test/browser/extHostTypeConverter.test.ts index 40a148042..c4296afa8 100644 --- a/src/vs/workbench/api/test/browser/extHostTypeConverter.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTypeConverter.test.ts @@ -5,12 +5,12 @@ import assert from 'assert'; -import * as extHostTypes from 'vs/workbench/api/common/extHostTypes'; -import { MarkdownString, NotebookCellOutputItem, NotebookData, LanguageSelector, WorkspaceEdit } from 'vs/workbench/api/common/extHostTypeConverters'; -import { isEmptyObject } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { IWorkspaceTextEditDto } from 'vs/workbench/api/common/extHost.protocol'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import * as extHostTypes from '../../common/extHostTypes.js'; +import { MarkdownString, NotebookCellOutputItem, NotebookData, LanguageSelector, WorkspaceEdit } from '../../common/extHostTypeConverters.js'; +import { isEmptyObject } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IWorkspaceTextEditDto } from '../../common/extHost.protocol.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('ExtHostTypeConverter', function () { diff --git a/src/vs/workbench/api/test/browser/extHostTypes.test.ts b/src/vs/workbench/api/test/browser/extHostTypes.test.ts index 3d1ff69b2..0ed70be82 100644 --- a/src/vs/workbench/api/test/browser/extHostTypes.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTypes.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import * as types from 'vs/workbench/api/common/extHostTypes'; -import { isWindows } from 'vs/base/common/platform'; -import { assertType } from 'vs/base/common/types'; -import { Mimes } from 'vs/base/common/mime'; -import { MarshalledId } from 'vs/base/common/marshallingIds'; -import { CancellationError } from 'vs/base/common/errors'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI } from '../../../../base/common/uri.js'; +import * as types from '../../common/extHostTypes.js'; +import { isWindows } from '../../../../base/common/platform.js'; +import { assertType } from '../../../../base/common/types.js'; +import { Mimes } from '../../../../base/common/mime.js'; +import { MarshalledId } from '../../../../base/common/marshallingIds.js'; +import { CancellationError } from '../../../../base/common/errors.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; function assertToJSON(a: any, expected: any) { const raw = JSON.stringify(a); diff --git a/src/vs/workbench/api/test/browser/extHostWebview.test.ts b/src/vs/workbench/api/test/browser/extHostWebview.test.ts index e87300aeb..9bbf074c7 100644 --- a/src/vs/workbench/api/test/browser/extHostWebview.test.ts +++ b/src/vs/workbench/api/test/browser/extHostWebview.test.ts @@ -4,22 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { MainThreadWebviewManager } from 'vs/workbench/api/browser/mainThreadWebviewManager'; -import { NullApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { ExtHostWebviews } from 'vs/workbench/api/common/extHostWebview'; -import { ExtHostWebviewPanels } from 'vs/workbench/api/common/extHostWebviewPanels'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { decodeAuthority, webviewResourceBaseHost } from 'vs/workbench/contrib/webview/common/webview'; -import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IExtensionDescription } from '../../../../platform/extensions/common/extensions.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { MainThreadWebviewManager } from '../../browser/mainThreadWebviewManager.js'; +import { NullApiDeprecationService } from '../../common/extHostApiDeprecationService.js'; +import { IExtHostRpcService } from '../../common/extHostRpcService.js'; +import { ExtHostWebviews } from '../../common/extHostWebview.js'; +import { ExtHostWebviewPanels } from '../../common/extHostWebviewPanels.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { decodeAuthority, webviewResourceBaseHost } from '../../../contrib/webview/common/webview.js'; +import { EditorGroupColumn } from '../../../services/editor/common/editorGroupColumn.js'; +import { IExtHostContext } from '../../../services/extensions/common/extHostCustomers.js'; import type * as vscode from 'vscode'; suite('ExtHostWebview', () => { diff --git a/src/vs/workbench/api/test/browser/extHostWorkspace.test.ts b/src/vs/workbench/api/test/browser/extHostWorkspace.test.ts index d1224f44b..0c019f59b 100644 --- a/src/vs/workbench/api/test/browser/extHostWorkspace.test.ts +++ b/src/vs/workbench/api/test/browser/extHostWorkspace.test.ts @@ -4,28 +4,29 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { basename } from 'vs/base/common/path'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace'; -import { MainThreadWorkspace } from 'vs/workbench/api/browser/mainThreadWorkspace'; -import { IMainContext, IWorkspaceData, MainContext, ITextSearchComplete } from 'vs/workbench/api/common/extHost.protocol'; -import { RelativePattern } from 'vs/workbench/api/common/extHostTypes'; -import { ExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; -import { mock } from 'vs/base/test/common/mock'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { ExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IFileQueryBuilderOptions, ITextQueryBuilderOptions } from 'vs/workbench/services/search/common/queryBuilder'; -import { IPatternInfo } from 'vs/workbench/services/search/common/search'; -import { isLinux, isWindows } from 'vs/base/common/platform'; -import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; -import { FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; -import { nullExtensionDescription as extensionDescriptor } from 'vs/workbench/services/extensions/common/extensions'; -import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { basename } from '../../../../base/common/path.js'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js'; +import { ILogService, NullLogService } from '../../../../platform/log/common/log.js'; +import { IWorkspaceFolderData } from '../../../../platform/workspace/common/workspace.js'; +import { MainThreadWorkspace } from '../../browser/mainThreadWorkspace.js'; +import { IMainContext, IWorkspaceData, MainContext, ITextSearchComplete } from '../../common/extHost.protocol.js'; +import { RelativePattern } from '../../common/extHostTypes.js'; +import { ExtHostWorkspace } from '../../common/extHostWorkspace.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { ExtHostRpcService } from '../../common/extHostRpcService.js'; +import { IExtHostInitDataService } from '../../common/extHostInitDataService.js'; +import { IFileQueryBuilderOptions, ITextQueryBuilderOptions } from '../../../services/search/common/queryBuilder.js'; +import { IPatternInfo } from '../../../services/search/common/search.js'; +import { isLinux, isWindows } from '../../../../base/common/platform.js'; +import { IExtHostFileSystemInfo } from '../../common/extHostFileSystemInfo.js'; +import { FileSystemProviderCapabilities } from '../../../../platform/files/common/files.js'; +import { nullExtensionDescription as extensionDescriptor } from '../../../services/extensions/common/extensions.js'; +import { IURITransformerService } from '../../common/extHostUriTransformerService.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExcludeSettingOptions } from '../../../services/search/common/searchExtTypes.js'; function createExtHostWorkspace(mainContext: IMainContext, data: IWorkspaceData, logService: ILogService): ExtHostWorkspace { const result = new ExtHostWorkspace( @@ -577,380 +578,658 @@ suite('ExtHostWorkspace', function () { return { uri, name }; } - test('findFiles - string include', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.includePattern, 'foo'); - assert.strictEqual(_includeFolder, null); - assert.strictEqual(options.excludePattern, undefined); - assert.strictEqual(options.disregardExcludeSettings, false); - assert.strictEqual(options.maxResults, 10); - return Promise.resolve(null); - } + suite('findFiles -', function () { + test('string include', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.includePattern, 'foo'); + assert.strictEqual(_includeFolder, null); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.maxResults, 10); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles('foo', undefined, 10, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles('foo', undefined, 10, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + function testFindFilesInclude(pattern: RelativePattern) { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.includePattern, 'glob/**'); + assert.deepStrictEqual(_includeFolder ? URI.from(_includeFolder).toJSON() : null, URI.file('/other/folder').toJSON()); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles(pattern, undefined, 10, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); + } + + test('RelativePattern include (string)', () => { + return testFindFilesInclude(new RelativePattern('/other/folder', 'glob/**')); }); - }); - function testFindFilesInclude(pattern: RelativePattern) { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.includePattern, 'glob/**'); - assert.deepStrictEqual(_includeFolder ? URI.from(_includeFolder).toJSON() : null, URI.file('/other/folder').toJSON()); - assert.strictEqual(options.excludePattern, undefined); - assert.strictEqual(options.disregardExcludeSettings, false); - return Promise.resolve(null); - } + test('RelativePattern include (URI)', () => { + return testFindFilesInclude(new RelativePattern(URI.file('/other/folder'), 'glob/**')); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles(pattern, undefined, 10, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + test('no excludes', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.includePattern, 'glob/**'); + assert.deepStrictEqual(URI.revive(_includeFolder!).toString(), URI.file('/other/folder').toString()); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, true); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles(new RelativePattern('/other/folder', 'glob/**'), null, 10, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - } - test('findFiles - RelativePattern include (string)', () => { - return testFindFilesInclude(new RelativePattern('/other/folder', 'glob/**')); - }); + test('with cancelled token', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); - test('findFiles - RelativePattern include (URI)', () => { - return testFindFilesInclude(new RelativePattern(URI.file('/other/folder'), 'glob/**')); - }); + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + return Promise.resolve(null); + } + }); - test('findFiles - no excludes', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.includePattern, 'glob/**'); - assert.deepStrictEqual(URI.revive(_includeFolder!).toString(), URI.file('/other/folder').toString()); - assert.strictEqual(options.excludePattern, undefined); - assert.strictEqual(options.disregardExcludeSettings, true); - return Promise.resolve(null); - } + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + + const token = CancellationToken.Cancelled; + return ws.findFiles(new RelativePattern('/other/folder', 'glob/**'), null, 10, new ExtensionIdentifier('test'), token).then(() => { + assert(!mainThreadCalled, '!mainThreadCalled'); + }); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles(new RelativePattern('/other/folder', 'glob/**'), null, 10, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + test('RelativePattern exclude', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.excludePattern?.length, 1); + assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // Note that the base portion is ignored, see #52651 + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles('', new RelativePattern(root, 'glob/**'), 10, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); }); - test('findFiles - with cancelled token', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - return Promise.resolve(null); - } + suite('findFiles2 -', function () { + test('string include', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.filePattern, 'foo'); + assert.strictEqual(options.includePattern, undefined); + assert.strictEqual(_includeFolder, null); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.maxResults, 10); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2('foo', { maxResults: 10, useDefaultExcludes: true }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + function testFindFiles2Include(pattern: RelativePattern) { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.filePattern, 'glob/**'); + assert.strictEqual(options.includePattern, undefined); + assert.deepStrictEqual(_includeFolder ? URI.from(_includeFolder).toJSON() : null, URI.file('/other/folder').toJSON()); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2(pattern, { maxResults: 10 }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); + } - const token = CancellationToken.Cancelled; - return ws.findFiles(new RelativePattern('/other/folder', 'glob/**'), null, 10, new ExtensionIdentifier('test'), token).then(() => { - assert(!mainThreadCalled, '!mainThreadCalled'); + test('RelativePattern include (string)', () => { + return testFindFiles2Include(new RelativePattern('/other/folder', 'glob/**')); }); - }); - test('findFiles - RelativePattern exclude', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.disregardExcludeSettings, false); - assert.strictEqual(options.excludePattern?.length, 1); - assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // Note that the base portion is ignored, see #52651 - return Promise.resolve(null); - } + test('RelativePattern include (URI)', () => { + return testFindFiles2Include(new RelativePattern(URI.file('/other/folder'), 'glob/**')); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles('', new RelativePattern(root, 'glob/**'), 10, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + test('no excludes', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.filePattern, 'glob/**'); + assert.strictEqual(options.includePattern, undefined); + assert.deepStrictEqual(URI.revive(_includeFolder!).toString(), URI.file('/other/folder').toString()); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2(new RelativePattern('/other/folder', 'glob/**'), {}, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - }); - test('findFiles2 - string include', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.filePattern, 'foo'); - assert.strictEqual(options.includePattern, undefined); - assert.strictEqual(_includeFolder, null); - assert.strictEqual(options.excludePattern, undefined); - assert.strictEqual(options.disregardExcludeSettings, false); - assert.strictEqual(options.maxResults, 10); - return Promise.resolve(null); - } + + test('with cancelled token', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + + const token = CancellationToken.Cancelled; + return ws.findFiles2(new RelativePattern('/other/folder', 'glob/**'), {}, new ExtensionIdentifier('test'), token).then(() => { + assert(!mainThreadCalled, '!mainThreadCalled'); + }); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles2('foo', { maxResults: 10, useDefaultExcludes: true }, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + test('RelativePattern exclude', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.excludePattern?.length, 1); + assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // Note that the base portion is ignored, see #52651 + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2('', { exclude: new RelativePattern(root, 'glob/**') }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); + }); + test('useIgnoreFiles', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.disregardIgnoreFiles, false); + assert.strictEqual(options.disregardGlobalIgnoreFiles, false); + assert.strictEqual(options.disregardParentIgnoreFiles, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2('', { useIgnoreFiles: true, useParentIgnoreFiles: true, useGlobalIgnoreFiles: true }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - }); - function testFindFiles2Include(pattern: RelativePattern) { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.filePattern, 'glob/**'); - assert.strictEqual(options.includePattern, undefined); - assert.deepStrictEqual(_includeFolder ? URI.from(_includeFolder).toJSON() : null, URI.file('/other/folder').toJSON()); - assert.strictEqual(options.excludePattern, undefined); - assert.strictEqual(options.disregardExcludeSettings, false); - return Promise.resolve(null); - } + test('use symlinks', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.ignoreSymlinks, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2('', { followSymlinks: true }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); + }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles2(pattern, { maxResults: 10 }, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + suite('findFiles2New -', function () { + test('string include', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.filePattern, 'foo'); + assert.strictEqual(options.includePattern, undefined); + assert.strictEqual(_includeFolder, null); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.maxResults, 10); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2New(['foo'], { maxResults: 10, useExcludeSettings: ExcludeSettingOptions.FilesExclude }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - } - test('findFiles2 - RelativePattern include (string)', () => { - return testFindFiles2Include(new RelativePattern('/other/folder', 'glob/**')); - }); + function testFindFiles2NewInclude(pattern: RelativePattern[]) { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.filePattern, 'glob/**'); + assert.strictEqual(options.includePattern, undefined); + assert.deepStrictEqual(_includeFolder ? URI.from(_includeFolder).toJSON() : null, URI.file('/other/folder').toJSON()); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2New(pattern, { maxResults: 10 }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); + } - test('findFiles2 - RelativePattern include (URI)', () => { - return testFindFiles2Include(new RelativePattern(URI.file('/other/folder'), 'glob/**')); - }); + test('RelativePattern include (string)', () => { + return testFindFiles2NewInclude([new RelativePattern('/other/folder', 'glob/**')]); + }); - test('findFiles2 - no excludes', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.filePattern, 'glob/**'); - assert.strictEqual(options.includePattern, undefined); - assert.deepStrictEqual(URI.revive(_includeFolder!).toString(), URI.file('/other/folder').toString()); - assert.strictEqual(options.excludePattern, undefined); - assert.strictEqual(options.disregardExcludeSettings, false); - return Promise.resolve(null); - } + test('RelativePattern include (URI)', () => { + return testFindFiles2NewInclude([new RelativePattern(URI.file('/other/folder'), 'glob/**')]); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles2(new RelativePattern('/other/folder', 'glob/**'), {}, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + test('no excludes', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.filePattern, 'glob/**'); + assert.strictEqual(options.includePattern, undefined); + assert.deepStrictEqual(URI.revive(_includeFolder!).toString(), URI.file('/other/folder').toString()); + assert.strictEqual(options.excludePattern, undefined); + assert.strictEqual(options.disregardExcludeSettings, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2New([new RelativePattern('/other/folder', 'glob/**')], {}, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - }); - test('findFiles2 - with cancelled token', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); + test('with cancelled token', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - return Promise.resolve(null); - } - }); + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + return Promise.resolve(null); + } + }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - const token = CancellationToken.Cancelled; - return ws.findFiles2(new RelativePattern('/other/folder', 'glob/**'), {}, new ExtensionIdentifier('test'), token).then(() => { - assert(!mainThreadCalled, '!mainThreadCalled'); + const token = CancellationToken.Cancelled; + return ws.findFiles2New([new RelativePattern('/other/folder', 'glob/**')], {}, new ExtensionIdentifier('test'), token).then(() => { + assert(!mainThreadCalled, '!mainThreadCalled'); + }); }); - }); - test('findFiles2 - RelativePattern exclude', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.disregardExcludeSettings, false); - assert.strictEqual(options.excludePattern?.length, 1); - assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // Note that the base portion is ignored, see #52651 - return Promise.resolve(null); - } + test('RelativePattern exclude', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.excludePattern?.length, 1); + assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // Note that the base portion is ignored, see #52651 + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2New([''], { exclude: [new RelativePattern(root, 'glob/**')] }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); + }); + test('useIgnoreFiles', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.disregardExcludeSettings, false); + assert.strictEqual(options.disregardIgnoreFiles, false); + assert.strictEqual(options.disregardGlobalIgnoreFiles, false); + assert.strictEqual(options.disregardParentIgnoreFiles, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2New([''], { useIgnoreFiles: { local: true, parent: true, global: true } }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles2('', { exclude: new RelativePattern(root, 'glob/**') }, new ExtensionIdentifier('test')).then(() => { - assert(mainThreadCalled, 'mainThreadCalled'); + test('use symlinks', () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(options.ignoreSymlinks, false); + return Promise.resolve(null); + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + return ws.findFiles2New([''], { followSymlinks: true }, new ExtensionIdentifier('test')).then(() => { + assert(mainThreadCalled, 'mainThreadCalled'); + }); }); + + // todo: add tests with multiple filePatterns and excludes + }); - test('findFiles2 - useIgnoreFiles', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.disregardExcludeSettings, false); - assert.strictEqual(options.disregardIgnoreFiles, false); - assert.strictEqual(options.disregardGlobalIgnoreFiles, false); - assert.strictEqual(options.disregardParentIgnoreFiles, false); - return Promise.resolve(null); - } - }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles2('', { useIgnoreFiles: true, useParentIgnoreFiles: true, useGlobalIgnoreFiles: true }, new ExtensionIdentifier('test')).then(() => { + suite('findTextInFiles -', function () { + test('no include', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.strictEqual(folder, null); + assert.strictEqual(options.includePattern, undefined); + assert.strictEqual(options.excludePattern, undefined); + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await ws.findTextInFiles({ pattern: 'foo' }, {}, () => { }, new ExtensionIdentifier('test')); assert(mainThreadCalled, 'mainThreadCalled'); }); - }); - - test('findFiles2 - use symlinks', () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override $startFileSearch(_includeFolder: UriComponents | null, options: IFileQueryBuilderOptions, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(options.ignoreSymlinks, false); - return Promise.resolve(null); - } + test('string include', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.strictEqual(folder, null); + assert.strictEqual(options.includePattern, '**/files'); + assert.strictEqual(options.excludePattern, undefined); + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await ws.findTextInFiles({ pattern: 'foo' }, { include: '**/files' }, () => { }, new ExtensionIdentifier('test')); + assert(mainThreadCalled, 'mainThreadCalled'); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - return ws.findFiles2('', { followSymlinks: true }, new ExtensionIdentifier('test')).then(() => { + test('RelativePattern include', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.deepStrictEqual(URI.revive(folder!).toString(), URI.file('/other/folder').toString()); + assert.strictEqual(options.includePattern, 'glob/**'); + assert.strictEqual(options.excludePattern, undefined); + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await ws.findTextInFiles({ pattern: 'foo' }, { include: new RelativePattern('/other/folder', 'glob/**') }, () => { }, new ExtensionIdentifier('test')); assert(mainThreadCalled, 'mainThreadCalled'); }); - }); - test('findTextInFiles - no include', async () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(query.pattern, 'foo'); - assert.strictEqual(folder, null); - assert.strictEqual(options.includePattern, undefined); - assert.strictEqual(options.excludePattern, undefined); - return null; - } + test('with cancelled token', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + const token = CancellationToken.Cancelled; + await ws.findTextInFiles({ pattern: 'foo' }, {}, () => { }, new ExtensionIdentifier('test'), token); + assert(!mainThreadCalled, '!mainThreadCalled'); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - await ws.findTextInFiles({ pattern: 'foo' }, {}, () => { }, new ExtensionIdentifier('test')); - assert(mainThreadCalled, 'mainThreadCalled'); - }); - - test('findTextInFiles - string include', async () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(query.pattern, 'foo'); - assert.strictEqual(folder, null); - assert.strictEqual(options.includePattern, '**/files'); - assert.strictEqual(options.excludePattern, undefined); - return null; - } + test('RelativePattern exclude', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.deepStrictEqual(folder, null); + assert.strictEqual(options.includePattern, undefined); + assert.strictEqual(options.excludePattern?.length, 1); + assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // exclude folder is ignored... + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await ws.findTextInFiles({ pattern: 'foo' }, { exclude: new RelativePattern('/other/folder', 'glob/**') }, () => { }, new ExtensionIdentifier('test')); + assert(mainThreadCalled, 'mainThreadCalled'); }); - - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - await ws.findTextInFiles({ pattern: 'foo' }, { include: '**/files' }, () => { }, new ExtensionIdentifier('test')); - assert(mainThreadCalled, 'mainThreadCalled'); }); - test('findTextInFiles - RelativePattern include', async () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(query.pattern, 'foo'); - assert.deepStrictEqual(URI.revive(folder!).toString(), URI.file('/other/folder').toString()); - assert.strictEqual(options.includePattern, 'glob/**'); - assert.strictEqual(options.excludePattern, undefined); - return null; - } + suite('findTextInFilesNew -', function () { + test('no include', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.strictEqual(folder, null); + assert.strictEqual(options.includePattern, undefined); + assert.strictEqual(options.excludePattern, undefined); + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await (ws.findTextInFilesNew({ pattern: 'foo' }, {}, new ExtensionIdentifier('test'))).complete; + assert(mainThreadCalled, 'mainThreadCalled'); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - await ws.findTextInFiles({ pattern: 'foo' }, { include: new RelativePattern('/other/folder', 'glob/**') }, () => { }, new ExtensionIdentifier('test')); - assert(mainThreadCalled, 'mainThreadCalled'); - }); - - test('findTextInFiles - with cancelled token', async () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); + test('string include', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.strictEqual(folder, null); + assert.strictEqual(options.includePattern, '**/files'); + assert.strictEqual(options.excludePattern, undefined); + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await (ws.findTextInFilesNew({ pattern: 'foo' }, { include: ['**/files'] }, new ExtensionIdentifier('test'))).complete; + assert(mainThreadCalled, 'mainThreadCalled'); + }); - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { - mainThreadCalled = true; - return null; - } + test('RelativePattern include', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.deepStrictEqual(URI.revive(folder!).toString(), URI.file('/other/folder').toString()); + assert.strictEqual(options.includePattern, 'glob/**'); + assert.strictEqual(options.excludePattern, undefined); + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await (ws.findTextInFilesNew({ pattern: 'foo' }, { include: [new RelativePattern('/other/folder', 'glob/**')] }, new ExtensionIdentifier('test'))).complete; + assert(mainThreadCalled, 'mainThreadCalled'); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - const token = CancellationToken.Cancelled; - await ws.findTextInFiles({ pattern: 'foo' }, {}, () => { }, new ExtensionIdentifier('test'), token); - assert(!mainThreadCalled, '!mainThreadCalled'); - }); + test('with cancelled token', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + const token = CancellationToken.Cancelled; + await (ws.findTextInFilesNew({ pattern: 'foo' }, undefined, new ExtensionIdentifier('test'), token)).complete; + assert(!mainThreadCalled, '!mainThreadCalled'); + }); - test('findTextInFiles - RelativePattern exclude', async () => { - const root = '/project/foo'; - const rpcProtocol = new TestRPCProtocol(); - - let mainThreadCalled = false; - rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { - mainThreadCalled = true; - assert.strictEqual(query.pattern, 'foo'); - assert.deepStrictEqual(folder, null); - assert.strictEqual(options.includePattern, undefined); - assert.strictEqual(options.excludePattern?.length, 1); - assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // exclude folder is ignored... - return null; - } + test('RelativePattern exclude', async () => { + const root = '/project/foo'; + const rpcProtocol = new TestRPCProtocol(); + + let mainThreadCalled = false; + rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { + override async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + mainThreadCalled = true; + assert.strictEqual(query.pattern, 'foo'); + assert.deepStrictEqual(folder, null); + assert.strictEqual(options.includePattern, undefined); + assert.strictEqual(options.excludePattern?.length, 1); + assert.strictEqual(options.excludePattern[0].pattern, 'glob/**'); // exclude folder is ignored... + return null; + } + }); + + const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); + await (ws.findTextInFilesNew({ pattern: 'foo' }, { exclude: [new RelativePattern('/other/folder', 'glob/**')] }, new ExtensionIdentifier('test'))).complete; + assert(mainThreadCalled, 'mainThreadCalled'); }); - const ws = createExtHostWorkspace(rpcProtocol, { id: 'foo', folders: [aWorkspaceFolderData(URI.file(root), 0)], name: 'Test' }, new NullLogService()); - await ws.findTextInFiles({ pattern: 'foo' }, { exclude: new RelativePattern('/other/folder', 'glob/**') }, () => { }, new ExtensionIdentifier('test')); - assert(mainThreadCalled, 'mainThreadCalled'); + // TODO: test multiple includes/excludess }); }); diff --git a/src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts b/src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts index c6ef6939b..9ee4d3316 100644 --- a/src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { IWorkspaceTextEditDto } from 'vs/workbench/api/common/extHost.protocol'; -import { mock } from 'vs/base/test/common/mock'; -import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; -import { FileSystemProviderCapabilities, IFileService } from 'vs/platform/files/common/files'; -import { reviveWorkspaceEditDto } from 'vs/workbench/api/browser/mainThreadBulkEdits'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IWorkspaceTextEdit } from 'vs/editor/common/languages'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { IWorkspaceTextEditDto } from '../../common/extHost.protocol.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { Event } from '../../../../base/common/event.js'; +import { URI } from '../../../../base/common/uri.js'; +import { FileSystemProviderCapabilities, IFileService } from '../../../../platform/files/common/files.js'; +import { reviveWorkspaceEditDto } from '../../browser/mainThreadBulkEdits.js'; +import { UriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentityService.js'; +import { IWorkspaceTextEdit } from '../../../../editor/common/languages.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('MainThreadBulkEdits', function () { diff --git a/src/vs/workbench/api/test/browser/mainThreadCommands.test.ts b/src/vs/workbench/api/test/browser/mainThreadCommands.test.ts index d7503ca0d..78cabfcf8 100644 --- a/src/vs/workbench/api/test/browser/mainThreadCommands.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadCommands.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { MainThreadCommands } from 'vs/workbench/api/browser/mainThreadCommands'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { MainThreadCommands } from '../../browser/mainThreadCommands.js'; +import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { IExtensionService } from '../../../services/extensions/common/extensions.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('MainThreadCommands', function () { diff --git a/src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts b/src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts index 0c5a02f66..a616447bb 100644 --- a/src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts @@ -5,16 +5,16 @@ import assert from 'assert'; import * as sinon from 'sinon'; -import { URI } from 'vs/base/common/uri'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { Extensions, IConfigurationRegistry, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { MainThreadConfiguration } from 'vs/workbench/api/browser/mainThreadConfiguration'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; -import { WorkspaceService } from 'vs/workbench/services/configuration/browser/configurationService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { URI } from '../../../../base/common/uri.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { Extensions, IConfigurationRegistry, ConfigurationScope } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { IWorkspaceContextService, WorkbenchState } from '../../../../platform/workspace/common/workspace.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { MainThreadConfiguration } from '../../browser/mainThreadConfiguration.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { IConfigurationService, ConfigurationTarget } from '../../../../platform/configuration/common/configuration.js'; +import { WorkspaceService } from '../../../services/configuration/browser/configurationService.js'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; suite('MainThreadConfiguration', function () { diff --git a/src/vs/workbench/api/test/browser/mainThreadDiagnostics.test.ts b/src/vs/workbench/api/test/browser/mainThreadDiagnostics.test.ts index 2f89e98e3..9a7e458b4 100644 --- a/src/vs/workbench/api/test/browser/mainThreadDiagnostics.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadDiagnostics.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { timeout } from 'vs/base/common/async'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { MarkerService } from 'vs/platform/markers/common/markerService'; -import { IMarkerData } from 'vs/platform/markers/common/markers'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { MainThreadDiagnostics } from 'vs/workbench/api/browser/mainThreadDiagnostics'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtensionHostKind } from 'vs/workbench/services/extensions/common/extensionHostKind'; -import { mock } from 'vs/workbench/test/common/workbenchTestServices'; +import { timeout } from '../../../../base/common/async.js'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { MarkerService } from '../../../../platform/markers/common/markerService.js'; +import { IMarkerData } from '../../../../platform/markers/common/markers.js'; +import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; +import { MainThreadDiagnostics } from '../../browser/mainThreadDiagnostics.js'; +import { IExtHostContext } from '../../../services/extensions/common/extHostCustomers.js'; +import { ExtensionHostKind } from '../../../services/extensions/common/extensionHostKind.js'; +import { mock } from '../../../test/common/workbenchTestServices.js'; suite('MainThreadDiagnostics', function () { diff --git a/src/vs/workbench/api/test/browser/mainThreadDocumentContentProviders.test.ts b/src/vs/workbench/api/test/browser/mainThreadDocumentContentProviders.test.ts index 949c2a78f..c999d3339 100644 --- a/src/vs/workbench/api/test/browser/mainThreadDocumentContentProviders.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadDocumentContentProviders.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { URI } from 'vs/base/common/uri'; -import { MainThreadDocumentContentProviders } from 'vs/workbench/api/browser/mainThreadDocumentContentProviders'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { mock } from 'vs/base/test/common/mock'; -import { IModelService } from 'vs/editor/common/services/model'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { TextEdit } from 'vs/editor/common/languages'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { URI } from '../../../../base/common/uri.js'; +import { MainThreadDocumentContentProviders } from '../../browser/mainThreadDocumentContentProviders.js'; +import { createTextModel } from '../../../../editor/test/common/testTextModel.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { IModelService } from '../../../../editor/common/services/model.js'; +import { IEditorWorkerService } from '../../../../editor/common/services/editorWorker.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { TextEdit } from '../../../../editor/common/languages.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('MainThreadDocumentContentProviders', function () { diff --git a/src/vs/workbench/api/test/browser/mainThreadDocuments.test.ts b/src/vs/workbench/api/test/browser/mainThreadDocuments.test.ts index fee65f211..d9d8a76fb 100644 --- a/src/vs/workbench/api/test/browser/mainThreadDocuments.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadDocuments.test.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { BoundModelReferenceCollection } from 'vs/workbench/api/browser/mainThreadDocuments'; -import { timeout } from 'vs/base/common/async'; -import { URI } from 'vs/base/common/uri'; -import { extUri } from 'vs/base/common/resources'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { BoundModelReferenceCollection } from '../../browser/mainThreadDocuments.js'; +import { timeout } from '../../../../base/common/async.js'; +import { URI } from '../../../../base/common/uri.js'; +import { extUri } from '../../../../base/common/resources.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; suite('BoundModelReferenceCollection', function () { diff --git a/src/vs/workbench/api/test/browser/mainThreadDocumentsAndEditors.test.ts b/src/vs/workbench/api/test/browser/mainThreadDocumentsAndEditors.test.ts index 17a9049d0..08a5f0682 100644 --- a/src/vs/workbench/api/test/browser/mainThreadDocumentsAndEditors.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadDocumentsAndEditors.test.ts @@ -4,38 +4,38 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { MainThreadDocumentsAndEditors } from 'vs/workbench/api/browser/mainThreadDocumentsAndEditors'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { TestCodeEditorService } from 'vs/editor/test/browser/editorTestServices'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta } from 'vs/workbench/api/common/extHost.protocol'; -import { createTestCodeEditor, ITestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; -import { mock } from 'vs/base/test/common/mock'; -import { TestEditorService, TestEditorGroupsService, TestEnvironmentService, TestPathService } from 'vs/workbench/test/browser/workbenchTestServices'; -import { Event } from 'vs/base/common/event'; -import { ITextModel } from 'vs/editor/common/model'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; -import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { TestTextResourcePropertiesService, TestWorkingCopyFileService } from 'vs/workbench/test/common/workbenchTestServices'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; -import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; +import { MainThreadDocumentsAndEditors } from '../../browser/mainThreadDocumentsAndEditors.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { ModelService } from '../../../../editor/common/services/modelService.js'; +import { TestCodeEditorService } from '../../../../editor/test/browser/editorTestServices.js'; +import { ITextFileService } from '../../../services/textfile/common/textfiles.js'; +import { ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta } from '../../common/extHost.protocol.js'; +import { createTestCodeEditor, ITestCodeEditor } from '../../../../editor/test/browser/testCodeEditor.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { TestEditorService, TestEditorGroupsService, TestEnvironmentService, TestPathService } from '../../../test/browser/workbenchTestServices.js'; +import { Event } from '../../../../base/common/event.js'; +import { ITextModel } from '../../../../editor/common/model.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { ICodeEditorService } from '../../../../editor/browser/services/codeEditorService.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; +import { TestThemeService } from '../../../../platform/theme/test/common/testThemeService.js'; +import { UndoRedoService } from '../../../../platform/undoRedo/common/undoRedoService.js'; +import { TestDialogService } from '../../../../platform/dialogs/test/common/testDialogService.js'; +import { TestNotificationService } from '../../../../platform/notification/test/common/testNotificationService.js'; +import { TestTextResourcePropertiesService, TestWorkingCopyFileService } from '../../../test/common/workbenchTestServices.js'; +import { UriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentityService.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js'; +import { TextModel } from '../../../../editor/common/model/textModel.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { ILanguageService } from '../../../../editor/common/languages/language.js'; +import { LanguageService } from '../../../../editor/common/services/languageService.js'; +import { ILanguageConfigurationService } from '../../../../editor/common/languages/languageConfigurationRegistry.js'; +import { TestLanguageConfigurationService } from '../../../../editor/test/common/modes/testLanguageConfigurationService.js'; +import { IUndoRedoService } from '../../../../platform/undoRedo/common/undoRedo.js'; suite('MainThreadDocumentsAndEditors', () => { diff --git a/src/vs/workbench/api/test/browser/mainThreadEditors.test.ts b/src/vs/workbench/api/test/browser/mainThreadEditors.test.ts index d83a5ebcf..552b0df1f 100644 --- a/src/vs/workbench/api/test/browser/mainThreadEditors.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadEditors.test.ts @@ -4,61 +4,61 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { Event } from 'vs/base/common/event'; -import { DisposableStore, IReference, ImmortalReference } from 'vs/base/common/lifecycle'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextSnapshot } from 'vs/editor/common/model'; -import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { IResolvedTextEditorModel, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { TestCodeEditorService } from 'vs/editor/test/browser/editorTestServices'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IFileService } from 'vs/platform/files/common/files'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; -import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; -import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { MainThreadBulkEdits } from 'vs/workbench/api/browser/mainThreadBulkEdits'; -import { IWorkspaceTextEditDto } from 'vs/workbench/api/common/extHost.protocol'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { BulkEditService } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { LabelService } from 'vs/workbench/services/label/common/labelService'; -import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { ICopyOperation, ICreateFileOperation, ICreateOperation, IDeleteOperation, IMoveOperation, IWorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { TestEditorGroupsService, TestEditorService, TestEnvironmentService, TestFileService, TestLifecycleService, TestWorkingCopyService } from 'vs/workbench/test/browser/workbenchTestServices'; -import { TestContextService, TestTextResourcePropertiesService } from 'vs/workbench/test/common/workbenchTestServices'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { LanguageService } from 'vs/editor/common/services/languageService'; -import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { Event } from '../../../../base/common/event.js'; +import { DisposableStore, IReference, ImmortalReference } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IBulkEditService } from '../../../../editor/browser/services/bulkEditService.js'; +import { ICodeEditorService } from '../../../../editor/browser/services/codeEditorService.js'; +import { EditOperation } from '../../../../editor/common/core/editOperation.js'; +import { Position } from '../../../../editor/common/core/position.js'; +import { Range } from '../../../../editor/common/core/range.js'; +import { ITextSnapshot } from '../../../../editor/common/model.js'; +import { IEditorWorkerService } from '../../../../editor/common/services/editorWorker.js'; +import { IModelService } from '../../../../editor/common/services/model.js'; +import { ModelService } from '../../../../editor/common/services/modelService.js'; +import { IResolvedTextEditorModel, ITextModelService } from '../../../../editor/common/services/resolverService.js'; +import { TestCodeEditorService } from '../../../../editor/test/browser/editorTestServices.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { TestDialogService } from '../../../../platform/dialogs/test/common/testDialogService.js'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; +import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +import { InstantiationService } from '../../../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { ILabelService } from '../../../../platform/label/common/label.js'; +import { ILogService, NullLogService } from '../../../../platform/log/common/log.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { TestNotificationService } from '../../../../platform/notification/test/common/testNotificationService.js'; +import { TestThemeService } from '../../../../platform/theme/test/common/testThemeService.js'; +import { IUndoRedoService } from '../../../../platform/undoRedo/common/undoRedo.js'; +import { UndoRedoService } from '../../../../platform/undoRedo/common/undoRedoService.js'; +import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; +import { UriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentityService.js'; +import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; +import { MainThreadBulkEdits } from '../../browser/mainThreadBulkEdits.js'; +import { IWorkspaceTextEditDto } from '../../common/extHost.protocol.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { BulkEditService } from '../../../contrib/bulkEdit/browser/bulkEditService.js'; +import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; +import { SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js'; +import { LabelService } from '../../../services/label/common/labelService.js'; +import { ILifecycleService } from '../../../services/lifecycle/common/lifecycle.js'; +import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js'; +import { ITextFileService } from '../../../services/textfile/common/textfiles.js'; +import { ICopyOperation, ICreateFileOperation, ICreateOperation, IDeleteOperation, IMoveOperation, IWorkingCopyFileService } from '../../../services/workingCopy/common/workingCopyFileService.js'; +import { IWorkingCopyService } from '../../../services/workingCopy/common/workingCopyService.js'; +import { TestEditorGroupsService, TestEditorService, TestEnvironmentService, TestFileService, TestLifecycleService, TestWorkingCopyService } from '../../../test/browser/workbenchTestServices.js'; +import { TestContextService, TestTextResourcePropertiesService } from '../../../test/common/workbenchTestServices.js'; +import { ILanguageService } from '../../../../editor/common/languages/language.js'; +import { LanguageService } from '../../../../editor/common/services/languageService.js'; +import { ILanguageConfigurationService } from '../../../../editor/common/languages/languageConfigurationRegistry.js'; +import { TestLanguageConfigurationService } from '../../../../editor/test/common/modes/testLanguageConfigurationService.js'; suite('MainThreadEditors', () => { diff --git a/src/vs/workbench/api/test/browser/mainThreadManagedSockets.test.ts b/src/vs/workbench/api/test/browser/mainThreadManagedSockets.test.ts index dd20e3cd7..ddb4b947a 100644 --- a/src/vs/workbench/api/test/browser/mainThreadManagedSockets.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadManagedSockets.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { disposableTimeout, timeout } from 'vs/base/common/async'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { SocketCloseEvent } from 'vs/base/parts/ipc/common/ipc.net'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { RemoteSocketHalf } from 'vs/platform/remote/common/managedSocket'; -import { MainThreadManagedSocket } from 'vs/workbench/api/browser/mainThreadManagedSockets'; -import { ExtHostManagedSocketsShape } from 'vs/workbench/api/common/extHost.protocol'; +import { disposableTimeout, timeout } from '../../../../base/common/async.js'; +import { VSBuffer } from '../../../../base/common/buffer.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { SocketCloseEvent } from '../../../../base/parts/ipc/common/ipc.net.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { RemoteSocketHalf } from '../../../../platform/remote/common/managedSocket.js'; +import { MainThreadManagedSocket } from '../../browser/mainThreadManagedSockets.js'; +import { ExtHostManagedSocketsShape } from '../../common/extHost.protocol.js'; suite('MainThreadManagedSockets', () => { diff --git a/src/vs/workbench/api/test/browser/mainThreadTreeViews.test.ts b/src/vs/workbench/api/test/browser/mainThreadTreeViews.test.ts index f4ead1836..ee16dbe37 100644 --- a/src/vs/workbench/api/test/browser/mainThreadTreeViews.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadTreeViews.test.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as nls from '../../../../nls.js'; import assert from 'assert'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { MainThreadTreeViews } from 'vs/workbench/api/browser/mainThreadTreeViews'; -import { ExtHostTreeViewsShape } from 'vs/workbench/api/common/extHost.protocol'; -import { CustomTreeView } from 'vs/workbench/browser/parts/views/treeView'; -import { Extensions, ITreeItem, ITreeView, ITreeViewDescriptor, IViewContainersRegistry, IViewDescriptorService, IViewsRegistry, TreeItemCollapsibleState, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtensionHostKind } from 'vs/workbench/services/extensions/common/extensionHostKind'; -import { ViewDescriptorService } from 'vs/workbench/services/views/browser/viewDescriptorService'; -import { TestViewsService, workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices'; -import { TestExtensionService } from 'vs/workbench/test/common/workbenchTestServices'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { TestNotificationService } from '../../../../platform/notification/test/common/testNotificationService.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { MainThreadTreeViews } from '../../browser/mainThreadTreeViews.js'; +import { ExtHostTreeViewsShape } from '../../common/extHost.protocol.js'; +import { CustomTreeView } from '../../../browser/parts/views/treeView.js'; +import { Extensions, ITreeItem, ITreeView, ITreeViewDescriptor, IViewContainersRegistry, IViewDescriptorService, IViewsRegistry, TreeItemCollapsibleState, ViewContainer, ViewContainerLocation } from '../../../common/views.js'; +import { IExtHostContext } from '../../../services/extensions/common/extHostCustomers.js'; +import { ExtensionHostKind } from '../../../services/extensions/common/extensionHostKind.js'; +import { ViewDescriptorService } from '../../../services/views/browser/viewDescriptorService.js'; +import { TestViewsService, workbenchInstantiationService } from '../../../test/browser/workbenchTestServices.js'; +import { TestExtensionService } from '../../../test/common/workbenchTestServices.js'; suite('MainThreadHostTreeView', function () { const testTreeViewId = 'testTreeView'; diff --git a/src/vs/workbench/api/test/browser/mainThreadWorkspace.test.ts b/src/vs/workbench/api/test/browser/mainThreadWorkspace.test.ts index aa9a770ad..2199a99d5 100644 --- a/src/vs/workbench/api/test/browser/mainThreadWorkspace.test.ts +++ b/src/vs/workbench/api/test/browser/mainThreadWorkspace.test.ts @@ -4,15 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { MainThreadWorkspace } from 'vs/workbench/api/browser/mainThreadWorkspace'; -import { SingleProxyRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { IFileQuery, ISearchService } from 'vs/workbench/services/search/common/search'; -import { workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { MainThreadWorkspace } from '../../browser/mainThreadWorkspace.js'; +import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js'; +import { IFileQuery, ISearchService } from '../../../services/search/common/search.js'; +import { workbenchInstantiationService } from '../../../test/browser/workbenchTestServices.js'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; suite('MainThreadWorkspace', () => { const disposables = ensureNoDisposablesAreLeakedInTestSuite(); @@ -123,4 +124,23 @@ suite('MainThreadWorkspace', () => { const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } }))); return mtw.$startFileSearch(null, { maxResults: 10, includePattern: '', excludePattern: [{ pattern: 'exclude/**' }], disregardSearchExcludeSettings: true }, CancellationToken.None); }); + test('Valid revived URI after moving to EH', () => { + const uriComponents: UriComponents = { + scheme: 'test', + path: '/Users/username/Downloads', + }; + instantiationService.stub(ISearchService, { + fileSearch(query: IFileQuery) { + assert.strictEqual(query.folderQueries?.length, 1); + assert.ok(URI.isUri(query.folderQueries[0].folder)); + assert.strictEqual(query.folderQueries[0].folder.path, '/Users/username/Downloads'); + assert.strictEqual(query.folderQueries[0].folder.scheme, 'test'); + + return Promise.resolve({ results: [], messages: [] }); + } + }); + + const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } }))); + return mtw.$startFileSearch(uriComponents, { filePattern: '*.md' }, CancellationToken.None); + }); }); diff --git a/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts b/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts index bfd874acf..f5c64b444 100644 --- a/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts +++ b/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { promiseWithResolvers, timeout } from 'vs/base/common/async'; -import { Mutable } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ExtensionIdentifier, IExtensionDescription, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { ActivatedExtension, EmptyExtension, ExtensionActivationTimes, ExtensionsActivator, IExtensionsActivatorHost } from 'vs/workbench/api/common/extHostExtensionActivator'; -import { ExtensionDescriptionRegistry, IActivationEventsReader } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; -import { ExtensionActivationReason, MissingExtensionDependency } from 'vs/workbench/services/extensions/common/extensions'; +import { promiseWithResolvers, timeout } from '../../../../base/common/async.js'; +import { Mutable } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExtensionIdentifier, IExtensionDescription, TargetPlatform } from '../../../../platform/extensions/common/extensions.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { ActivatedExtension, EmptyExtension, ExtensionActivationTimes, ExtensionsActivator, IExtensionsActivatorHost } from '../../common/extHostExtensionActivator.js'; +import { ExtensionDescriptionRegistry, IActivationEventsReader } from '../../../services/extensions/common/extensionDescriptionRegistry.js'; +import { ExtensionActivationReason, MissingExtensionDependency } from '../../../services/extensions/common/extensions.js'; suite('ExtensionsActivator', () => { diff --git a/src/vs/workbench/api/test/common/extensionHostMain.test.ts b/src/vs/workbench/api/test/common/extensionHostMain.test.ts index 1608511b5..cda646f07 100644 --- a/src/vs/workbench/api/test/common/extensionHostMain.test.ts +++ b/src/vs/workbench/api/test/common/extensionHostMain.test.ts @@ -4,23 +4,23 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { SerializedError, errorHandler, onUnexpectedError } from 'vs/base/common/errors'; -import { isFirefox, isSafari } from 'vs/base/common/platform'; -import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; -import { URI } from 'vs/base/common/uri'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { MainThreadExtensionServiceShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtensionPaths, IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; -import { ErrorHandler } from 'vs/workbench/api/common/extensionHostMain'; -import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { ProxyIdentifier, Proxied } from 'vs/workbench/services/extensions/common/proxyIdentifier'; +import { SerializedError, errorHandler, onUnexpectedError } from '../../../../base/common/errors.js'; +import { isFirefox, isSafari } from '../../../../base/common/platform.js'; +import { TernarySearchTree } from '../../../../base/common/ternarySearchTree.js'; +import { URI } from '../../../../base/common/uri.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { ExtensionIdentifier, IExtensionDescription } from '../../../../platform/extensions/common/extensions.js'; +import { InstantiationService } from '../../../../platform/instantiation/common/instantiationService.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { ILogService, NullLogService } from '../../../../platform/log/common/log.js'; +import { MainThreadExtensionServiceShape } from '../../common/extHost.protocol.js'; +import { ExtensionPaths, IExtHostExtensionService } from '../../common/extHostExtensionService.js'; +import { IExtHostRpcService } from '../../common/extHostRpcService.js'; +import { IExtHostTelemetry } from '../../common/extHostTelemetry.js'; +import { ErrorHandler } from '../../common/extensionHostMain.js'; +import { nullExtensionDescription } from '../../../services/extensions/common/extensions.js'; +import { ProxyIdentifier, Proxied } from '../../../services/extensions/common/proxyIdentifier.js'; suite('ExtensionHostMain#ErrorHandler - Wrapping prepareStackTrace can cause slowdown and eventual stack overflow #184926 ', function () { diff --git a/src/vs/workbench/api/test/common/testRPCProtocol.ts b/src/vs/workbench/api/test/common/testRPCProtocol.ts index abf854afa..16a9af44f 100644 --- a/src/vs/workbench/api/test/common/testRPCProtocol.ts +++ b/src/vs/workbench/api/test/common/testRPCProtocol.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isThenable } from 'vs/base/common/async'; -import { CharCode } from 'vs/base/common/charCode'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; -import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; -import { ExtensionHostKind } from 'vs/workbench/services/extensions/common/extensionHostKind'; -import { Proxied, ProxyIdentifier, SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier'; -import { parseJsonAndRestoreBufferRefs, stringifyJsonWithBufferRefs } from 'vs/workbench/services/extensions/common/rpcProtocol'; +import { isThenable } from '../../../../base/common/async.js'; +import { CharCode } from '../../../../base/common/charCode.js'; +import { IExtHostRpcService } from '../../common/extHostRpcService.js'; +import { IExtHostContext } from '../../../services/extensions/common/extHostCustomers.js'; +import { ExtensionHostKind } from '../../../services/extensions/common/extensionHostKind.js'; +import { Proxied, ProxyIdentifier, SerializableObjectWithBuffers } from '../../../services/extensions/common/proxyIdentifier.js'; +import { parseJsonAndRestoreBufferRefs, stringifyJsonWithBufferRefs } from '../../../services/extensions/common/rpcProtocol.js'; export function SingleProxyRPCProtocol(thing: any): IExtHostContext & IExtHostRpcService { return { diff --git a/src/vs/workbench/api/test/node/extHostSearch.test.ts b/src/vs/workbench/api/test/node/extHostSearch.test.ts index 458beed2f..75e6b2f34 100644 --- a/src/vs/workbench/api/test/node/extHostSearch.test.ts +++ b/src/vs/workbench/api/test/node/extHostSearch.test.ts @@ -4,27 +4,27 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { mapArrayOrNot } from 'vs/base/common/arrays'; -import { timeout } from 'vs/base/common/async'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isCancellationError } from 'vs/base/common/errors'; -import { revive } from 'vs/base/common/marshalling'; -import { joinPath } from 'vs/base/common/resources'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import * as pfs from 'vs/base/node/pfs'; -import { mock } from 'vs/base/test/common/mock'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { MainContext, MainThreadSearchShape } from 'vs/workbench/api/common/extHost.protocol'; -import { ExtHostConfigProvider, IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { Range } from 'vs/workbench/api/common/extHostTypes'; -import { URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { NativeExtHostSearch } from 'vs/workbench/api/node/extHostSearch'; -import { TestRPCProtocol } from 'vs/workbench/api/test/common/testRPCProtocol'; -import { IFileMatch, IFileQuery, IPatternInfo, IRawFileMatch2, ISearchCompleteStats, ISearchQuery, ITextQuery, QueryType, resultIsMatch } from 'vs/workbench/services/search/common/search'; -import { TextSearchManager } from 'vs/workbench/services/search/common/textSearchManager'; -import { NativeTextSearchManager } from 'vs/workbench/services/search/node/textSearchManager'; +import { mapArrayOrNot } from '../../../../base/common/arrays.js'; +import { timeout } from '../../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { isCancellationError } from '../../../../base/common/errors.js'; +import { revive } from '../../../../base/common/marshalling.js'; +import { joinPath } from '../../../../base/common/resources.js'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import * as pfs from '../../../../base/node/pfs.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; +import { NullLogService } from '../../../../platform/log/common/log.js'; +import { MainContext, MainThreadSearchShape } from '../../common/extHost.protocol.js'; +import { ExtHostConfigProvider, IExtHostConfiguration } from '../../common/extHostConfiguration.js'; +import { IExtHostInitDataService } from '../../common/extHostInitDataService.js'; +import { Range } from '../../common/extHostTypes.js'; +import { URITransformerService } from '../../common/extHostUriTransformerService.js'; +import { NativeExtHostSearch } from '../../node/extHostSearch.js'; +import { TestRPCProtocol } from '../common/testRPCProtocol.js'; +import { IFileMatch, IFileQuery, IPatternInfo, IRawFileMatch2, ISearchCompleteStats, ISearchQuery, ITextQuery, QueryType, resultIsMatch } from '../../../services/search/common/search.js'; +import { TextSearchManager } from '../../../services/search/common/textSearchManager.js'; +import { NativeTextSearchManager } from '../../../services/search/node/textSearchManager.js'; import type * as vscode from 'vscode'; let rpcProtocol: TestRPCProtocol; @@ -263,6 +263,28 @@ suite('ExtHostSearch', () => { assert(!results.length); }); + test('session cancellation should work', async () => { + let numSessionCancelled = 0; + const disposables: (vscode.Disposable | undefined)[] = []; + await registerTestFileSearchProvider({ + provideFileSearchResults(query: vscode.FileSearchQuery, options: vscode.FileSearchOptions, token: vscode.CancellationToken): Promise { + + disposables.push(options.session?.onCancellationRequested(() => { + numSessionCancelled++; + })); + + return Promise.resolve([]); + } + }); + + + await runFileSearch({ ...getSimpleQuery(), cacheKey: '1' }, true); + await runFileSearch({ ...getSimpleQuery(), cacheKey: '2' }, true); + extHostSearch.$clearCache('1'); + assert.strictEqual(numSessionCancelled, 1); + disposables.forEach(d => d?.dispose()); + }); + test('provider returns null', async () => { await registerTestFileSearchProvider({ provideFileSearchResults(query: vscode.FileSearchQuery, options: vscode.FileSearchOptions, token: vscode.CancellationToken): Promise { @@ -702,6 +724,24 @@ suite('ExtHostSearch', () => { const { results } = await runFileSearch(query); compareURIs(results, reportedResults); }); + test('if onlyFileScheme is set, do not call custom schemes', async () => { + let fancySchemeCalled = false; + await registerTestFileSearchProvider({ + provideFileSearchResults(query: vscode.FileSearchQuery, options: vscode.FileSearchOptions, token: vscode.CancellationToken): Promise { + fancySchemeCalled = true; + return Promise.resolve([]); + } + }, fancyScheme); + + const query: ISearchQuery = { + type: QueryType.File, + filePattern: '', + folderQueries: [] + }; + + await runFileSearch(query); + assert(!fancySchemeCalled); + }); }); suite('Text:', () => { diff --git a/src/vs/workbench/api/test/node/extHostTunnelService.test.ts b/src/vs/workbench/api/test/node/extHostTunnelService.test.ts index 57fe15e52..d260fbe72 100644 --- a/src/vs/workbench/api/test/node/extHostTunnelService.test.ts +++ b/src/vs/workbench/api/test/node/extHostTunnelService.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; -import { findPorts, getRootProcesses, getSockets, loadConnectionTable, loadListeningPorts, parseIpAddress, tryFindRootPorts } from 'vs/workbench/api/node/extHostTunnelService'; +import { findPorts, getRootProcesses, getSockets, loadConnectionTable, loadListeningPorts, parseIpAddress, tryFindRootPorts } from '../../node/extHostTunnelService.js'; const tcp = ` sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode diff --git a/src/vs/workbench/api/worker/extHost.worker.services.ts b/src/vs/workbench/api/worker/extHost.worker.services.ts index 20ec7e138..85c1a96bb 100644 --- a/src/vs/workbench/api/worker/extHost.worker.services.ts +++ b/src/vs/workbench/api/worker/extHost.worker.services.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { ExtHostLogService } from 'vs/workbench/api/common/extHostLogService'; -import { ExtensionStoragePaths, IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths'; -import { ExtHostExtensionService } from 'vs/workbench/api/worker/extHostExtensionService'; +import { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IExtHostExtensionService } from '../common/extHostExtensionService.js'; +import { ExtHostLogService } from '../common/extHostLogService.js'; +import { ExtensionStoragePaths, IExtensionStoragePaths } from '../common/extHostStoragePaths.js'; +import { ExtHostExtensionService } from './extHostExtensionService.js'; // ######################################################################### // ### ### diff --git a/src/vs/workbench/api/worker/extHostConsoleForwarder.ts b/src/vs/workbench/api/worker/extHostConsoleForwarder.ts index ea266a94a..8cfde44fa 100644 --- a/src/vs/workbench/api/worker/extHostConsoleForwarder.ts +++ b/src/vs/workbench/api/worker/extHostConsoleForwarder.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AbstractExtHostConsoleForwarder } from 'vs/workbench/api/common/extHostConsoleForwarder'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; -import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; +import { AbstractExtHostConsoleForwarder } from '../common/extHostConsoleForwarder.js'; +import { IExtHostInitDataService } from '../common/extHostInitDataService.js'; +import { IExtHostRpcService } from '../common/extHostRpcService.js'; export class ExtHostConsoleForwarder extends AbstractExtHostConsoleForwarder { diff --git a/src/vs/workbench/api/worker/extHostExtensionService.ts b/src/vs/workbench/api/worker/extHostExtensionService.ts index b83a46213..6f3384ab8 100644 --- a/src/vs/workbench/api/worker/extHostExtensionService.ts +++ b/src/vs/workbench/api/worker/extHostExtensionService.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createApiFactoryAndRegisterActors } from 'vs/workbench/api/common/extHost.api.impl'; -import { ExtensionActivationTimesBuilder } from 'vs/workbench/api/common/extHostExtensionActivator'; -import { AbstractExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService'; -import { URI } from 'vs/base/common/uri'; -import { RequireInterceptor } from 'vs/workbench/api/common/extHostRequireInterceptor'; -import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes'; -import { timeout } from 'vs/base/common/async'; -import { ExtHostConsoleForwarder } from 'vs/workbench/api/worker/extHostConsoleForwarder'; +import { createApiFactoryAndRegisterActors } from '../common/extHost.api.impl.js'; +import { ExtensionActivationTimesBuilder } from '../common/extHostExtensionActivator.js'; +import { AbstractExtHostExtensionService } from '../common/extHostExtensionService.js'; +import { URI } from '../../../base/common/uri.js'; +import { RequireInterceptor } from '../common/extHostRequireInterceptor.js'; +import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js'; +import { ExtensionRuntime } from '../common/extHostTypes.js'; +import { timeout } from '../../../base/common/async.js'; +import { ExtHostConsoleForwarder } from './extHostConsoleForwarder.js'; class WorkerRequireInterceptor extends RequireInterceptor { diff --git a/src/vs/workbench/api/worker/extensionHostWorker.esm.ts b/src/vs/workbench/api/worker/extensionHostWorker.esm.ts index 10a4278a7..f7eaf7cfe 100644 --- a/src/vs/workbench/api/worker/extensionHostWorker.esm.ts +++ b/src/vs/workbench/api/worker/extensionHostWorker.esm.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { create } from './extensionHostWorker'; +import { create } from './extensionHostWorker.js'; const data = create(); self.onmessage = (e) => data.onmessage(e.data); diff --git a/src/vs/workbench/api/worker/extensionHostWorker.ts b/src/vs/workbench/api/worker/extensionHostWorker.ts index b98117318..d9953269a 100644 --- a/src/vs/workbench/api/worker/extensionHostWorker.ts +++ b/src/vs/workbench/api/worker/extensionHostWorker.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc'; -import { VSBuffer } from 'vs/base/common/buffer'; -import { Emitter } from 'vs/base/common/event'; -import { isMessageOfType, MessageType, createMessageOfType, IExtensionHostInitData } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; -import { ExtensionHostMain } from 'vs/workbench/api/common/extensionHostMain'; -import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService'; -import { NestedWorker } from 'vs/workbench/services/extensions/worker/polyfillNestedWorker'; -import * as path from 'vs/base/common/path'; -import * as performance from 'vs/base/common/performance'; - -import 'vs/workbench/api/common/extHost.common.services'; -import 'vs/workbench/api/worker/extHost.worker.services'; -import { FileAccess } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; +import { IMessagePassingProtocol } from '../../../base/parts/ipc/common/ipc.js'; +import { VSBuffer } from '../../../base/common/buffer.js'; +import { Emitter } from '../../../base/common/event.js'; +import { isMessageOfType, MessageType, createMessageOfType, IExtensionHostInitData } from '../../services/extensions/common/extensionHostProtocol.js'; +import { ExtensionHostMain } from '../common/extensionHostMain.js'; +import { IHostUtils } from '../common/extHostExtensionService.js'; +import { NestedWorker } from '../../services/extensions/worker/polyfillNestedWorker.js'; +import * as path from '../../../base/common/path.js'; +import * as performance from '../../../base/common/performance.js'; + +import '../common/extHost.common.services.js'; +import './extHost.worker.services.js'; +import { FileAccess } from '../../../base/common/network.js'; +import { URI } from '../../../base/common/uri.js'; //#region --- Define, capture, and override some globals diff --git a/src/vs/workbench/browser/actions.ts b/src/vs/workbench/browser/actions.ts index dbe7355c8..83f4cf4a4 100644 --- a/src/vs/workbench/browser/actions.ts +++ b/src/vs/workbench/browser/actions.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction } from 'vs/base/common/actions'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { Emitter, Event } from 'vs/base/common/event'; -import { MenuId, IMenuService, IMenu, SubmenuItemAction, IMenuActionOptions } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; +import { IAction } from '../../base/common/actions.js'; +import { Disposable, DisposableStore, IDisposable } from '../../base/common/lifecycle.js'; +import { Emitter, Event } from '../../base/common/event.js'; +import { MenuId, IMenuService, IMenu, SubmenuItemAction, IMenuActionOptions } from '../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../platform/contextkey/common/contextkey.js'; +import { createAndFillInActionBarActions } from '../../platform/actions/browser/menuEntryActionViewItem.js'; class MenuActions extends Disposable { diff --git a/src/vs/workbench/browser/actions/developerActions.ts b/src/vs/workbench/browser/actions/developerActions.ts index 7823fa988..bf0ca0f7b 100644 --- a/src/vs/workbench/browser/actions/developerActions.ts +++ b/src/vs/workbench/browser/actions/developerActions.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/actions'; - -import { localize, localize2 } from 'vs/nls'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { DomEmitter } from 'vs/base/browser/event'; -import { Color } from 'vs/base/common/color'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IDisposable, toDisposable, dispose, DisposableStore, setDisposableTracker, DisposableTracker, DisposableInfo } from 'vs/base/common/lifecycle'; -import { getDomNodePagePosition, createStyleSheet, createCSSRule, append, $, getActiveDocument, onDidRegisterWindow, getWindows } from 'vs/base/browser/dom'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { Context } from 'vs/platform/contextkey/browser/contextKeyService'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { registerAction2, Action2, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { clamp } from 'vs/base/common/numbers'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; -import { ResolutionResult, ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IOutputService } from 'vs/workbench/services/output/common/output'; -import { windowLogId } from 'vs/workbench/services/log/common/logConstants'; -import { ByteSize } from 'vs/platform/files/common/files'; -import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import product from 'vs/platform/product/common/product'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import './media/actions.css'; + +import { localize, localize2 } from '../../../nls.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { DomEmitter } from '../../../base/browser/event.js'; +import { Color } from '../../../base/common/color.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { IDisposable, toDisposable, dispose, DisposableStore, setDisposableTracker, DisposableTracker, DisposableInfo } from '../../../base/common/lifecycle.js'; +import { getDomNodePagePosition, createStyleSheet, createCSSRule, append, $, getActiveDocument, onDidRegisterWindow, getWindows } from '../../../base/browser/dom.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr, IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js'; +import { Context } from '../../../platform/contextkey/browser/contextKeyService.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { ILayoutService } from '../../../platform/layout/browser/layoutService.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { registerAction2, Action2, MenuRegistry } from '../../../platform/actions/common/actions.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../platform/storage/common/storage.js'; +import { clamp } from '../../../base/common/numbers.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from '../../../platform/configuration/common/configurationRegistry.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IWorkingCopyService } from '../../services/workingCopy/common/workingCopyService.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; +import { IWorkingCopyBackupService } from '../../services/workingCopy/common/workingCopyBackup.js'; +import { ResolutionResult, ResultKind } from '../../../platform/keybinding/common/keybindingResolver.js'; +import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { IOutputService } from '../../services/output/common/output.js'; +import { windowLogId } from '../../services/log/common/logConstants.js'; +import { ByteSize } from '../../../platform/files/common/files.js'; +import { IQuickInputService, IQuickPickItem } from '../../../platform/quickinput/common/quickInput.js'; +import { IUserDataProfileService } from '../../services/userDataProfile/common/userDataProfile.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import product from '../../../platform/product/common/product.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { IEnvironmentService } from '../../../platform/environment/common/environment.js'; class InspectContextKeysAction extends Action2 { diff --git a/src/vs/workbench/browser/actions/helpActions.ts b/src/vs/workbench/browser/actions/helpActions.ts index fd55b27b1..3a366903e 100644 --- a/src/vs/workbench/browser/actions/helpActions.ts +++ b/src/vs/workbench/browser/actions/helpActions.ts @@ -3,18 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize, localize2 } from 'vs/nls'; -import product from 'vs/platform/product/common/product'; -import { isMacintosh, isLinux, language, isWeb } from 'vs/base/common/platform'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { URI } from 'vs/base/common/uri'; -import { MenuId, Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { KeyChord, KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; +import { localize, localize2 } from '../../../nls.js'; +import product from '../../../platform/product/common/product.js'; +import { isMacintosh, isLinux, language, isWeb } from '../../../base/common/platform.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { IOpenerService } from '../../../platform/opener/common/opener.js'; +import { URI } from '../../../base/common/uri.js'; +import { MenuId, Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; +import { KeyChord, KeyMod, KeyCode } from '../../../base/common/keyCodes.js'; +import { IProductService } from '../../../platform/product/common/productService.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; class KeybindingsReferenceAction extends Action2 { @@ -307,6 +308,27 @@ class OpenPrivacyStatementUrlAction extends Action2 { } } +class GetStartedWithAccessibilityFeatures extends Action2 { + static readonly ID = 'workbench.action.getStartedWithAccessibilityFeatures'; + constructor() { + super({ + id: GetStartedWithAccessibilityFeatures.ID, + title: localize2('getStartedWithAccessibilityFeatures', 'Get Started with Accessibility Features'), + category: Categories.Help, + f1: true, + menu: { + id: MenuId.MenubarHelpMenu, + group: '1_welcome', + order: 6 + } + }); + } + run(accessor: ServicesAccessor): void { + const commandService = accessor.get(ICommandService); + commandService.executeCommand('workbench.action.openWalkthrough', 'SetupAccessibility'); + } +} + // --- Actions Registration if (KeybindingsReferenceAction.AVAILABLE) { @@ -344,3 +366,5 @@ if (OpenLicenseUrlAction.AVAILABLE) { if (OpenPrivacyStatementUrlAction.AVAILABE) { registerAction2(OpenPrivacyStatementUrlAction); } + +registerAction2(GetStartedWithAccessibilityFeatures); diff --git a/src/vs/workbench/browser/actions/layoutActions.ts b/src/vs/workbench/browser/actions/layoutActions.ts index b9668db39..5d7b93cfd 100644 --- a/src/vs/workbench/browser/actions/layoutActions.ts +++ b/src/vs/workbench/browser/actions/layoutActions.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ILocalizedString, localize, localize2 } from 'vs/nls'; -import { MenuId, MenuRegistry, registerAction2, Action2 } from 'vs/platform/actions/common/actions'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { EditorActionsLocation, EditorTabsMode, IWorkbenchLayoutService, LayoutSettings, Parts, Position, ZenModeSettings, positionToString } from 'vs/workbench/services/layout/browser/layoutService'; -import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeyMod, KeyCode, KeyChord } from 'vs/base/common/keyCodes'; -import { isWindows, isLinux, isWeb, isMacintosh, isNative } from 'vs/base/common/platform'; -import { IsMacNativeContext } from 'vs/platform/contextkey/common/contextkeys'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IViewDescriptorService, ViewContainerLocation, IViewDescriptor, ViewContainerLocationToString } from 'vs/workbench/common/views'; -import { IViewsService } from 'vs/workbench/services/views/common/viewsService'; -import { QuickPickItem, IQuickInputService, IQuickPickItem, IQuickPickSeparator, IQuickPick } from 'vs/platform/quickinput/common/quickInput'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { ToggleAuxiliaryBarAction } from 'vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions'; -import { TogglePanelAction } from 'vs/workbench/browser/parts/panel/panelActions'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { AuxiliaryBarVisibleContext, PanelAlignmentContext, PanelVisibleContext, SideBarVisibleContext, FocusedViewContext, InEditorZenModeContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, IsMainWindowFullscreenContext, PanelPositionContext, IsAuxiliaryWindowFocusedContext, TitleBarStyleContext } from 'vs/workbench/common/contextkeys'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { ICommandActionTitle } from 'vs/platform/action/common/action'; -import { mainWindow } from 'vs/base/browser/window'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { TitlebarStyle } from 'vs/platform/window/common/window'; -import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; +import { ILocalizedString, localize, localize2 } from '../../../nls.js'; +import { MenuId, MenuRegistry, registerAction2, Action2 } from '../../../platform/actions/common/actions.js'; +import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { EditorActionsLocation, EditorTabsMode, IWorkbenchLayoutService, LayoutSettings, Parts, Position, ZenModeSettings, positionToString } from '../../services/layout/browser/layoutService.js'; +import { ServicesAccessor, IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { KeyMod, KeyCode, KeyChord } from '../../../base/common/keyCodes.js'; +import { isWindows, isLinux, isWeb, isMacintosh, isNative } from '../../../base/common/platform.js'; +import { IsMacNativeContext } from '../../../platform/contextkey/common/contextkeys.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; +import { IViewDescriptorService, ViewContainerLocation, IViewDescriptor, ViewContainerLocationToString } from '../../common/views.js'; +import { IViewsService } from '../../services/views/common/viewsService.js'; +import { QuickPickItem, IQuickInputService, IQuickPickItem, IQuickPickSeparator, IQuickPick } from '../../../platform/quickinput/common/quickInput.js'; +import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { IPaneCompositePartService } from '../../services/panecomposite/browser/panecomposite.js'; +import { ToggleAuxiliaryBarAction } from '../parts/auxiliarybar/auxiliaryBarActions.js'; +import { TogglePanelAction } from '../parts/panel/panelActions.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { AuxiliaryBarVisibleContext, PanelAlignmentContext, PanelVisibleContext, SideBarVisibleContext, FocusedViewContext, InEditorZenModeContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, IsMainWindowFullscreenContext, PanelPositionContext, IsAuxiliaryWindowFocusedContext, TitleBarStyleContext } from '../../common/contextkeys.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { DisposableStore } from '../../../base/common/lifecycle.js'; +import { registerIcon } from '../../../platform/theme/common/iconRegistry.js'; +import { ICommandActionTitle } from '../../../platform/action/common/action.js'; +import { mainWindow } from '../../../base/browser/window.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { TitlebarStyle } from '../../../platform/window/common/window.js'; +import { IPreferencesService } from '../../services/preferences/common/preferences.js'; // Register Icons const menubarIcon = registerIcon('menuBar', Codicon.layoutMenubar, localize('menuBarIcon', "Represents the menu bar")); diff --git a/src/vs/workbench/browser/actions/listCommands.ts b/src/vs/workbench/browser/actions/listCommands.ts index 188a94e1f..e87163b74 100644 --- a/src/vs/workbench/browser/actions/listCommands.ts +++ b/src/vs/workbench/browser/actions/listCommands.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyMod, KeyCode, KeyChord } from 'vs/base/common/keyCodes'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { List } from 'vs/base/browser/ui/list/listWidget'; -import { WorkbenchListFocusContextKey, IListService, WorkbenchListSupportsMultiSelectContextKey, ListWidget, WorkbenchListHasSelectionOrFocus, getSelectionKeyboardEvent, WorkbenchListWidget, WorkbenchListSelectionNavigation, WorkbenchTreeElementCanCollapse, WorkbenchTreeElementHasParent, WorkbenchTreeElementHasChild, WorkbenchTreeElementCanExpand, RawWorkbenchListFocusContextKey, WorkbenchTreeFindOpen, WorkbenchListSupportsFind, WorkbenchListScrollAtBottomContextKey, WorkbenchListScrollAtTopContextKey, WorkbenchTreeStickyScrollFocused } from 'vs/platform/list/browser/listService'; -import { PagedList } from 'vs/base/browser/ui/list/listPaging'; -import { equals, range } from 'vs/base/common/arrays'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ObjectTree } from 'vs/base/browser/ui/tree/objectTree'; -import { AsyncDataTree } from 'vs/base/browser/ui/tree/asyncDataTree'; -import { DataTree } from 'vs/base/browser/ui/tree/dataTree'; -import { ITreeNode } from 'vs/base/browser/ui/tree/tree'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { Table } from 'vs/base/browser/ui/table/tableWidget'; -import { AbstractTree, TreeFindMatchType, TreeFindMode } from 'vs/base/browser/ui/tree/abstractTree'; -import { isActiveElement } from 'vs/base/browser/dom'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { localize, localize2 } from 'vs/nls'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; +import { KeyMod, KeyCode, KeyChord } from '../../../base/common/keyCodes.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { List } from '../../../base/browser/ui/list/listWidget.js'; +import { WorkbenchListFocusContextKey, IListService, WorkbenchListSupportsMultiSelectContextKey, ListWidget, WorkbenchListHasSelectionOrFocus, getSelectionKeyboardEvent, WorkbenchListWidget, WorkbenchListSelectionNavigation, WorkbenchTreeElementCanCollapse, WorkbenchTreeElementHasParent, WorkbenchTreeElementHasChild, WorkbenchTreeElementCanExpand, RawWorkbenchListFocusContextKey, WorkbenchTreeFindOpen, WorkbenchListSupportsFind, WorkbenchListScrollAtBottomContextKey, WorkbenchListScrollAtTopContextKey, WorkbenchTreeStickyScrollFocused } from '../../../platform/list/browser/listService.js'; +import { PagedList } from '../../../base/browser/ui/list/listPaging.js'; +import { equals, range } from '../../../base/common/arrays.js'; +import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { ObjectTree } from '../../../base/browser/ui/tree/objectTree.js'; +import { AsyncDataTree } from '../../../base/browser/ui/tree/asyncDataTree.js'; +import { DataTree } from '../../../base/browser/ui/tree/dataTree.js'; +import { ITreeNode } from '../../../base/browser/ui/tree/tree.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { Table } from '../../../base/browser/ui/table/tableWidget.js'; +import { AbstractTree, TreeFindMatchType, TreeFindMode } from '../../../base/browser/ui/tree/abstractTree.js'; +import { isActiveElement } from '../../../base/browser/dom.js'; +import { Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { localize, localize2 } from '../../../nls.js'; +import { IHoverService } from '../../../platform/hover/browser/hover.js'; function ensureDOMFocus(widget: ListWidget | undefined): void { // it can happen that one of the commands is executed while diff --git a/src/vs/workbench/browser/actions/navigationActions.ts b/src/vs/workbench/browser/actions/navigationActions.ts index 56b88fe52..08713b717 100644 --- a/src/vs/workbench/browser/actions/navigationActions.ts +++ b/src/vs/workbench/browser/actions/navigationActions.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize2 } from 'vs/nls'; -import { IEditorGroupsService, GroupDirection, GroupLocation, IFindGroupScope } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { Action2, IAction2Options, registerAction2 } from 'vs/platform/actions/common/actions'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { Direction } from 'vs/base/browser/ui/grid/grid'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IPaneComposite } from 'vs/workbench/common/panecomposite'; -import { IComposite } from 'vs/workbench/common/composite'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { ViewContainerLocation } from 'vs/workbench/common/views'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { getActiveWindow } from 'vs/base/browser/dom'; -import { isAuxiliaryWindow } from 'vs/base/browser/window'; +import { localize2 } from '../../../nls.js'; +import { IEditorGroupsService, GroupDirection, GroupLocation, IFindGroupScope } from '../../services/editor/common/editorGroupsService.js'; +import { IWorkbenchLayoutService, Parts } from '../../services/layout/browser/layoutService.js'; +import { Action2, IAction2Options, registerAction2 } from '../../../platform/actions/common/actions.js'; +import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; +import { Direction } from '../../../base/browser/ui/grid/grid.js'; +import { KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { IPaneComposite } from '../../common/panecomposite.js'; +import { IComposite } from '../../common/composite.js'; +import { IPaneCompositePartService } from '../../services/panecomposite/browser/panecomposite.js'; +import { ViewContainerLocation } from '../../common/views.js'; +import { KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { getActiveWindow } from '../../../base/browser/dom.js'; +import { isAuxiliaryWindow } from '../../../base/browser/window.js'; abstract class BaseNavigationAction extends Action2 { diff --git a/src/vs/workbench/browser/actions/quickAccessActions.ts b/src/vs/workbench/browser/actions/quickAccessActions.ts index acf6652d8..40bfbae3b 100644 --- a/src/vs/workbench/browser/actions/quickAccessActions.ts +++ b/src/vs/workbench/browser/actions/quickAccessActions.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize, localize2 } from 'vs/nls'; -import { MenuId, Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { KeybindingsRegistry, KeybindingWeight, IKeybindingRule } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IQuickInputService, ItemActivation } from 'vs/platform/quickinput/common/quickInput'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { inQuickPickContext, defaultQuickAccessContext, getQuickNavigateHandler } from 'vs/workbench/browser/quickaccess'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { AnythingQuickAccessProviderRunOptions } from 'vs/platform/quickinput/common/quickAccess'; -import { Codicon } from 'vs/base/common/codicons'; +import { localize, localize2 } from '../../../nls.js'; +import { MenuId, Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; +import { KeyMod, KeyCode } from '../../../base/common/keyCodes.js'; +import { KeybindingsRegistry, KeybindingWeight, IKeybindingRule } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IQuickInputService, ItemActivation } from '../../../platform/quickinput/common/quickInput.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { inQuickPickContext, defaultQuickAccessContext, getQuickNavigateHandler } from '../quickaccess.js'; +import { ILocalizedString } from '../../../platform/action/common/action.js'; +import { AnythingQuickAccessProviderRunOptions } from '../../../platform/quickinput/common/quickAccess.js'; +import { Codicon } from '../../../base/common/codicons.js'; //#region Quick access management commands and keys diff --git a/src/vs/workbench/browser/actions/textInputActions.ts b/src/vs/workbench/browser/actions/textInputActions.ts index c06fb52ca..20b277dee 100644 --- a/src/vs/workbench/browser/actions/textInputActions.ts +++ b/src/vs/workbench/browser/actions/textInputActions.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction, Action, Separator } from 'vs/base/common/actions'; -import { localize } from 'vs/nls'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { EventHelper, addDisposableListener, getActiveDocument, getWindow, isHTMLElement, isHTMLInputElement, isHTMLTextAreaElement } from 'vs/base/browser/dom'; -import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions'; -import { isNative } from 'vs/base/common/platform'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { Event as BaseEvent } from 'vs/base/common/event'; -import { Lazy } from 'vs/base/common/lazy'; +import { IAction, Action, Separator } from '../../../base/common/actions.js'; +import { localize } from '../../../nls.js'; +import { IWorkbenchLayoutService } from '../../services/layout/browser/layoutService.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { Disposable } from '../../../base/common/lifecycle.js'; +import { EventHelper, addDisposableListener, getActiveDocument, getWindow, isHTMLElement, isHTMLInputElement, isHTMLTextAreaElement } from '../../../base/browser/dom.js'; +import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from '../../common/contributions.js'; +import { isNative } from '../../../base/common/platform.js'; +import { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { Event as BaseEvent } from '../../../base/common/event.js'; +import { Lazy } from '../../../base/common/lazy.js'; export class TextInputActionsProvider extends Disposable implements IWorkbenchContribution { diff --git a/src/vs/workbench/browser/actions/widgetNavigationCommands.ts b/src/vs/workbench/browser/actions/widgetNavigationCommands.ts index 1657bf722..3ce130c2c 100644 --- a/src/vs/workbench/browser/actions/widgetNavigationCommands.ts +++ b/src/vs/workbench/browser/actions/widgetNavigationCommands.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { WorkbenchListFocusContextKey, WorkbenchListScrollAtBottomContextKey, WorkbenchListScrollAtTopContextKey } from 'vs/platform/list/browser/listService'; -import { Event } from 'vs/base/common/event'; -import { combinedDisposable, toDisposable, IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { WorkbenchPhase, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { KeyMod, KeyCode } from '../../../base/common/keyCodes.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js'; +import { KeybindingWeight, KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { WorkbenchListFocusContextKey, WorkbenchListScrollAtBottomContextKey, WorkbenchListScrollAtTopContextKey } from '../../../platform/list/browser/listService.js'; +import { Event } from '../../../base/common/event.js'; +import { combinedDisposable, toDisposable, IDisposable, Disposable } from '../../../base/common/lifecycle.js'; +import { WorkbenchPhase, registerWorkbenchContribution2 } from '../../common/contributions.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; /** INavigableContainer represents a logical container composed of widgets that can be navigated back and forth with key shortcuts */ diff --git a/src/vs/workbench/browser/actions/windowActions.ts b/src/vs/workbench/browser/actions/windowActions.ts index 26c0b61d3..e2248c750 100644 --- a/src/vs/workbench/browser/actions/windowActions.ts +++ b/src/vs/workbench/browser/actions/windowActions.ts @@ -3,38 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize, localize2 } from 'vs/nls'; -import { IWindowOpenable } from 'vs/platform/window/common/window'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { MenuRegistry, MenuId, Action2, registerAction2, IAction2Options } from 'vs/platform/actions/common/actions'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { IsMainWindowFullscreenContext } from 'vs/workbench/common/contextkeys'; -import { IsMacNativeContext, IsDevelopmentContext, IsWebContext, IsIOSContext } from 'vs/platform/contextkey/common/contextkeys'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IQuickInputButton, IQuickInputService, IQuickPickSeparator, IKeyMods, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { IWorkspaceContextService, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { ILabelService, Verbosity } from 'vs/platform/label/common/label'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IRecent, isRecentFolder, isRecentWorkspace, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { URI } from 'vs/base/common/uri'; -import { getIconClasses } from 'vs/editor/common/services/getIconClasses'; -import { FileKind } from 'vs/platform/files/common/files'; -import { splitRecentLabel } from 'vs/base/common/labels'; -import { isMacintosh, isWeb, isWindows } from 'vs/base/common/platform'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { inQuickPickContext, getQuickNavigateHandler } from 'vs/workbench/browser/quickaccess'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { ResourceMap } from 'vs/base/common/map'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { isFolderBackupInfo, isWorkspaceBackupInfo } from 'vs/platform/backup/common/backup'; -import { getActiveElement, getActiveWindow, isHTMLElement } from 'vs/base/browser/dom'; +import { localize, localize2 } from '../../../nls.js'; +import { IWindowOpenable } from '../../../platform/window/common/window.js'; +import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { MenuRegistry, MenuId, Action2, registerAction2, IAction2Options } from '../../../platform/actions/common/actions.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; +import { IsMainWindowFullscreenContext } from '../../common/contextkeys.js'; +import { IsMacNativeContext, IsDevelopmentContext, IsWebContext, IsIOSContext } from '../../../platform/contextkey/common/contextkeys.js'; +import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IQuickInputButton, IQuickInputService, IQuickPickSeparator, IKeyMods, IQuickPickItem } from '../../../platform/quickinput/common/quickInput.js'; +import { IWorkspaceContextService, IWorkspaceIdentifier } from '../../../platform/workspace/common/workspace.js'; +import { ILabelService, Verbosity } from '../../../platform/label/common/label.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { IRecent, isRecentFolder, isRecentWorkspace, IWorkspacesService } from '../../../platform/workspaces/common/workspaces.js'; +import { URI } from '../../../base/common/uri.js'; +import { getIconClasses } from '../../../editor/common/services/getIconClasses.js'; +import { FileKind } from '../../../platform/files/common/files.js'; +import { splitRecentLabel } from '../../../base/common/labels.js'; +import { isMacintosh, isWeb, isWindows } from '../../../base/common/platform.js'; +import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { inQuickPickContext, getQuickNavigateHandler } from '../quickaccess.js'; +import { IHostService } from '../../services/host/browser/host.js'; +import { ResourceMap } from '../../../base/common/map.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { CommandsRegistry } from '../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { isFolderBackupInfo, isWorkspaceBackupInfo } from '../../../platform/backup/common/backup.js'; +import { getActiveElement, getActiveWindow, isHTMLElement } from '../../../base/browser/dom.js'; export const inRecentFilesPickerContextKey = 'inRecentFilesPicker'; diff --git a/src/vs/workbench/browser/actions/workspaceActions.ts b/src/vs/workbench/browser/actions/workspaceActions.ts index d3bb85460..96861a697 100644 --- a/src/vs/workbench/browser/actions/workspaceActions.ts +++ b/src/vs/workbench/browser/actions/workspaceActions.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize, localize2 } from 'vs/nls'; -import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; -import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder, hasWorkspaceFileExtension } from 'vs/platform/workspace/common/workspace'; -import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ADD_ROOT_FOLDER_COMMAND_ID, ADD_ROOT_FOLDER_LABEL, PICK_WORKSPACE_FOLDER_COMMAND_ID, SET_ROOT_FOLDER_COMMAND_ID } from 'vs/workbench/browser/actions/workspaceCommands'; -import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { MenuRegistry, MenuId, Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, OpenFolderWorkspaceSupportContext, WorkbenchStateContext, WorkspaceFolderCountContext } from 'vs/workbench/common/contextkeys'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IsMacNativeContext } from 'vs/platform/contextkey/common/contextkeys'; -import { ILocalizedString } from 'vs/platform/action/common/action'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; +import { localize, localize2 } from '../../../nls.js'; +import { ITelemetryData } from '../../../platform/telemetry/common/telemetry.js'; +import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder, hasWorkspaceFileExtension } from '../../../platform/workspace/common/workspace.js'; +import { IWorkspaceEditingService } from '../../services/workspaces/common/workspaceEditing.js'; +import { IEditorService } from '../../services/editor/common/editorService.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { ADD_ROOT_FOLDER_COMMAND_ID, ADD_ROOT_FOLDER_LABEL, PICK_WORKSPACE_FOLDER_COMMAND_ID, SET_ROOT_FOLDER_COMMAND_ID } from './workspaceCommands.js'; +import { IFileDialogService } from '../../../platform/dialogs/common/dialogs.js'; +import { MenuRegistry, MenuId, Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; +import { EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, OpenFolderWorkspaceSupportContext, WorkbenchStateContext, WorkspaceFolderCountContext } from '../../common/contextkeys.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { IHostService } from '../../services/host/browser/host.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; +import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { IWorkspacesService } from '../../../platform/workspaces/common/workspaces.js'; +import { KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IsMacNativeContext } from '../../../platform/contextkey/common/contextkeys.js'; +import { ILocalizedString } from '../../../platform/action/common/action.js'; +import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; const workspacesCategory: ILocalizedString = localize2('workspaces', 'Workspaces'); diff --git a/src/vs/workbench/browser/actions/workspaceCommands.ts b/src/vs/workbench/browser/actions/workspaceCommands.ts index 2ce4f6003..5d45d2f2c 100644 --- a/src/vs/workbench/browser/actions/workspaceCommands.ts +++ b/src/vs/workbench/browser/actions/workspaceCommands.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize, localize2 } from 'vs/nls'; -import { hasWorkspaceFileExtension, IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing'; -import { dirname } from 'vs/base/common/resources'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { mnemonicButtonLabel } from 'vs/base/common/labels'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import { FileKind } from 'vs/platform/files/common/files'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IQuickInputService, IPickOptions, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { getIconClasses } from 'vs/editor/common/services/getIconClasses'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IFileDialogService, IPickAndOpenOptions } from 'vs/platform/dialogs/common/dialogs'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Schemas } from 'vs/base/common/network'; -import { IOpenEmptyWindowOptions, IOpenWindowOptions, IWindowOpenable } from 'vs/platform/window/common/window'; -import { IRecent, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { ILocalizedString } from 'vs/platform/action/common/action'; +import { localize, localize2 } from '../../../nls.js'; +import { hasWorkspaceFileExtension, IWorkspaceContextService } from '../../../platform/workspace/common/workspace.js'; +import { IWorkspaceEditingService } from '../../services/workspaces/common/workspaceEditing.js'; +import { dirname } from '../../../base/common/resources.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import { mnemonicButtonLabel } from '../../../base/common/labels.js'; +import { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js'; +import { FileKind } from '../../../platform/files/common/files.js'; +import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; +import { ILabelService } from '../../../platform/label/common/label.js'; +import { IQuickInputService, IPickOptions, IQuickPickItem } from '../../../platform/quickinput/common/quickInput.js'; +import { getIconClasses } from '../../../editor/common/services/getIconClasses.js'; +import { IModelService } from '../../../editor/common/services/model.js'; +import { ILanguageService } from '../../../editor/common/languages/language.js'; +import { IFileDialogService, IPickAndOpenOptions } from '../../../platform/dialogs/common/dialogs.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { Schemas } from '../../../base/common/network.js'; +import { IOpenEmptyWindowOptions, IOpenWindowOptions, IWindowOpenable } from '../../../platform/window/common/window.js'; +import { IRecent, IWorkspacesService } from '../../../platform/workspaces/common/workspaces.js'; +import { IPathService } from '../../services/path/common/pathService.js'; +import { ILocalizedString } from '../../../platform/action/common/action.js'; export const ADD_ROOT_FOLDER_COMMAND_ID = 'addRootFolder'; export const ADD_ROOT_FOLDER_LABEL: ILocalizedString = localize2('addFolderToWorkspace', 'Add Folder to Workspace...'); @@ -263,7 +263,7 @@ CommandsRegistry.registerCommand('_workbench.removeFromRecentlyOpened', function CommandsRegistry.registerCommand({ id: 'vscode.removeFromRecentlyOpened', - handler: (accessor: ServicesAccessor, path: string | URI): Promise => { + handler: (accessor: ServicesAccessor, path: string | URI): Promise => { const workspacesService = accessor.get(IWorkspacesService); if (typeof path === 'string') { diff --git a/src/vs/workbench/browser/codeeditor.ts b/src/vs/workbench/browser/codeeditor.ts index dcce3224b..437e01b37 100644 --- a/src/vs/workbench/browser/codeeditor.ts +++ b/src/vs/workbench/browser/codeeditor.ts @@ -3,25 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction } from 'vs/base/common/actions'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference, isCodeEditor, isCompositeEditor } from 'vs/editor/browser/editorBrowser'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/codeEditor/embeddedCodeEditorWidget'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IRange } from 'vs/editor/common/core/range'; -import { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { IModelDecorationsChangeAccessor, TrackedRangeStickiness } from 'vs/editor/common/model'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { AbstractFloatingClickMenu, FloatingClickWidget } from 'vs/platform/actions/browser/floatingMenu'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { IAction } from '../../base/common/actions.js'; +import { Emitter } from '../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; +import { isEqual } from '../../base/common/resources.js'; +import { URI } from '../../base/common/uri.js'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference, isCodeEditor, isCompositeEditor } from '../../editor/browser/editorBrowser.js'; +import { EmbeddedCodeEditorWidget } from '../../editor/browser/widget/codeEditor/embeddedCodeEditorWidget.js'; +import { EditorOption } from '../../editor/common/config/editorOptions.js'; +import { IRange } from '../../editor/common/core/range.js'; +import { CursorChangeReason, ICursorPositionChangedEvent } from '../../editor/common/cursorEvents.js'; +import { IEditorContribution } from '../../editor/common/editorCommon.js'; +import { IModelDecorationsChangeAccessor, TrackedRangeStickiness } from '../../editor/common/model.js'; +import { ModelDecorationOptions } from '../../editor/common/model/textModel.js'; +import { AbstractFloatingClickMenu, FloatingClickWidget } from '../../platform/actions/browser/floatingMenu.js'; +import { IMenuService, MenuId } from '../../platform/actions/common/actions.js'; +import { IContextKeyService } from '../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../platform/keybinding/common/keybinding.js'; +import { IEditorService } from '../services/editor/common/editorService.js'; export interface IRangeHighlightDecoration { resource: URI; diff --git a/src/vs/workbench/browser/composite.ts b/src/vs/workbench/browser/composite.ts index d56a31212..8be1325c2 100644 --- a/src/vs/workbench/browser/composite.ts +++ b/src/vs/workbench/browser/composite.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction, IActionRunner, ActionRunner } from 'vs/base/common/actions'; -import { Component } from 'vs/workbench/common/component'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IComposite, ICompositeControl } from 'vs/workbench/common/composite'; -import { Event, Emitter } from 'vs/base/common/event'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IConstructorSignature, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { trackFocus, Dimension, IDomPosition } from 'vs/base/browser/dom'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { assertIsDefined } from 'vs/base/common/types'; -import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; +import { IAction, IActionRunner, ActionRunner } from '../../base/common/actions.js'; +import { Component } from '../common/component.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { IComposite, ICompositeControl } from '../common/composite.js'; +import { Event, Emitter } from '../../base/common/event.js'; +import { IThemeService } from '../../platform/theme/common/themeService.js'; +import { IConstructorSignature, IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { trackFocus, Dimension, IDomPosition } from '../../base/browser/dom.js'; +import { IStorageService } from '../../platform/storage/common/storage.js'; +import { Disposable } from '../../base/common/lifecycle.js'; +import { assertIsDefined } from '../../base/common/types.js'; +import { IActionViewItem } from '../../base/browser/ui/actionbar/actionbar.js'; +import { MenuId } from '../../platform/actions/common/actions.js'; +import { IBoundarySashes } from '../../base/browser/ui/sash/sash.js'; +import { IBaseActionViewItemOptions } from '../../base/browser/ui/actionbar/actionViewItems.js'; /** * Composites are layed out in the sidebar and panel part of the workbench. At a time only one composite diff --git a/src/vs/workbench/browser/contextkeys.ts b/src/vs/workbench/browser/contextkeys.ts index cffce2ce2..e5192e1dd 100644 --- a/src/vs/workbench/browser/contextkeys.ts +++ b/src/vs/workbench/browser/contextkeys.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext } from 'vs/workbench/common/contextkeys'; -import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow } from 'vs/base/browser/dom'; -import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { WorkbenchState, IWorkspaceContextService, isTemporaryWorkspace } from 'vs/platform/workspace/common/workspace'; -import { IWorkbenchLayoutService, Parts, positionToString } from 'vs/workbench/services/layout/browser/layoutService'; -import { getRemoteName } from 'vs/platform/remote/common/remoteHosts'; -import { getVirtualWorkspaceScheme } from 'vs/platform/workspace/common/virtualWorkspace'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { isNative } from 'vs/base/common/platform'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { WebFileSystemAccess } from 'vs/platform/files/browser/webFileSystemAccess'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { getTitleBarStyle } from 'vs/platform/window/common/window'; -import { mainWindow } from 'vs/base/browser/window'; -import { isFullscreen, onDidChangeFullscreen } from 'vs/base/browser/browser'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { Event } from '../../base/common/event.js'; +import { Disposable } from '../../base/common/lifecycle.js'; +import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; +import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; +import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext } from '../common/contextkeys.js'; +import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; +import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { IWorkbenchEnvironmentService } from '../services/environment/common/environmentService.js'; +import { WorkbenchState, IWorkspaceContextService, isTemporaryWorkspace } from '../../platform/workspace/common/workspace.js'; +import { IWorkbenchLayoutService, Parts, positionToString } from '../services/layout/browser/layoutService.js'; +import { getRemoteName } from '../../platform/remote/common/remoteHosts.js'; +import { getVirtualWorkspaceScheme } from '../../platform/workspace/common/virtualWorkspace.js'; +import { IWorkingCopyService } from '../services/workingCopy/common/workingCopyService.js'; +import { isNative } from '../../base/common/platform.js'; +import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; +import { WebFileSystemAccess } from '../../platform/files/browser/webFileSystemAccess.js'; +import { IProductService } from '../../platform/product/common/productService.js'; +import { getTitleBarStyle } from '../../platform/window/common/window.js'; +import { mainWindow } from '../../base/browser/window.js'; +import { isFullscreen, onDidChangeFullscreen } from '../../base/browser/browser.js'; +import { IEditorService } from '../services/editor/common/editorService.js'; export class WorkbenchContextKeysHandler extends Disposable { private inputFocusedContext: IContextKey; @@ -300,7 +300,7 @@ export class WorkbenchContextKeysHandler extends Disposable { private updateInputContextKeys(ownerDocument: Document): void { function activeElementIsInput(): boolean { - return !!ownerDocument.activeElement && (ownerDocument.activeElement.tagName === 'INPUT' || ownerDocument.activeElement.tagName === 'TEXTAREA'); + return !!ownerDocument.activeElement && isEditableElement(ownerDocument.activeElement); } const isInputFocused = activeElementIsInput(); diff --git a/src/vs/workbench/browser/dnd.ts b/src/vs/workbench/browser/dnd.ts index 3fa36301d..21db54280 100644 --- a/src/vs/workbench/browser/dnd.ts +++ b/src/vs/workbench/browser/dnd.ts @@ -3,40 +3,40 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DataTransfers, IDragAndDropData } from 'vs/base/browser/dnd'; -import { DragAndDropObserver, EventType, addDisposableListener, onDidRegisterWindow } from 'vs/base/browser/dom'; -import { DragMouseEvent } from 'vs/base/browser/mouseEvent'; -import { IListDragAndDrop } from 'vs/base/browser/ui/list/list'; -import { ElementsDragAndDropData, ListViewTargetSector } from 'vs/base/browser/ui/list/listView'; -import { ITreeDragOverReaction } from 'vs/base/browser/ui/tree/tree'; -import { coalesce } from 'vs/base/common/arrays'; -import { UriList, VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore, IDisposable, markAsSingleton } from 'vs/base/common/lifecycle'; -import { stringify } from 'vs/base/common/marshalling'; -import { Mimes } from 'vs/base/common/mime'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { isWindows } from 'vs/base/common/platform'; -import { basename, isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { CodeDataTransfers, Extensions, IDragAndDropContributionRegistry, IDraggedResourceEditorInput, IResourceStat, LocalSelectionTransfer, createDraggedEditorInputFromRawResourcesData, extractEditorsAndFilesDropData } from 'vs/platform/dnd/browser/dnd'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { extractSelection } from 'vs/platform/opener/common/opener'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IWindowOpenable } from 'vs/platform/window/common/window'; -import { IWorkspaceContextService, hasWorkspaceFileExtension, isTemporaryWorkspace } from 'vs/platform/workspace/common/workspace'; -import { IWorkspaceFolderCreationData, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { EditorResourceAccessor, GroupIdentifier, IEditorIdentifier, isEditorIdentifier, isResourceDiffEditorInput, isResourceMergeEditorInput, isResourceSideBySideEditorInput } from 'vs/workbench/common/editor'; -import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { mainWindow } from 'vs/base/browser/window'; -import { BroadcastDataChannel } from 'vs/base/browser/broadcast'; +import { DataTransfers, IDragAndDropData } from '../../base/browser/dnd.js'; +import { DragAndDropObserver, EventType, addDisposableListener, onDidRegisterWindow } from '../../base/browser/dom.js'; +import { DragMouseEvent } from '../../base/browser/mouseEvent.js'; +import { IListDragAndDrop } from '../../base/browser/ui/list/list.js'; +import { ElementsDragAndDropData, ListViewTargetSector } from '../../base/browser/ui/list/listView.js'; +import { ITreeDragOverReaction } from '../../base/browser/ui/tree/tree.js'; +import { coalesce } from '../../base/common/arrays.js'; +import { UriList, VSDataTransfer } from '../../base/common/dataTransfer.js'; +import { Emitter, Event } from '../../base/common/event.js'; +import { Disposable, DisposableStore, IDisposable, markAsSingleton } from '../../base/common/lifecycle.js'; +import { stringify } from '../../base/common/marshalling.js'; +import { Mimes } from '../../base/common/mime.js'; +import { FileAccess, Schemas } from '../../base/common/network.js'; +import { isWindows } from '../../base/common/platform.js'; +import { basename, isEqual } from '../../base/common/resources.js'; +import { URI } from '../../base/common/uri.js'; +import { CodeDataTransfers, Extensions, IDragAndDropContributionRegistry, IDraggedResourceEditorInput, IResourceStat, LocalSelectionTransfer, createDraggedEditorInputFromRawResourcesData, extractEditorsAndFilesDropData } from '../../platform/dnd/browser/dnd.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { IInstantiationService, ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +import { ILabelService } from '../../platform/label/common/label.js'; +import { extractSelection } from '../../platform/opener/common/opener.js'; +import { Registry } from '../../platform/registry/common/platform.js'; +import { IWindowOpenable } from '../../platform/window/common/window.js'; +import { IWorkspaceContextService, hasWorkspaceFileExtension, isTemporaryWorkspace } from '../../platform/workspace/common/workspace.js'; +import { IWorkspaceFolderCreationData, IWorkspacesService } from '../../platform/workspaces/common/workspaces.js'; +import { EditorResourceAccessor, GroupIdentifier, IEditorIdentifier, isEditorIdentifier, isResourceDiffEditorInput, isResourceMergeEditorInput, isResourceSideBySideEditorInput } from '../common/editor.js'; +import { IEditorGroup } from '../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../services/editor/common/editorService.js'; +import { IHostService } from '../services/host/browser/host.js'; +import { ITextFileService } from '../services/textfile/common/textfiles.js'; +import { IWorkspaceEditingService } from '../services/workspaces/common/workspaceEditing.js'; +import { IEditorOptions } from '../../platform/editor/common/editor.js'; +import { mainWindow } from '../../base/browser/window.js'; +import { BroadcastDataChannel } from '../../base/browser/broadcast.js'; //#region Editor / Resources DND diff --git a/src/vs/workbench/browser/editor.ts b/src/vs/workbench/browser/editor.ts index d5e1a7f33..0bfa0e328 100644 --- a/src/vs/workbench/browser/editor.ts +++ b/src/vs/workbench/browser/editor.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { EditorResourceAccessor, EditorExtensions, SideBySideEditor, IEditorDescriptor as ICommonEditorDescriptor, EditorCloseContext, IWillInstantiateEditorPaneEvent } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { IConstructorSignature, IInstantiationService, BrandedService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { Promises } from 'vs/base/common/async'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { URI } from 'vs/base/common/uri'; -import { Schemas } from 'vs/base/common/network'; -import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { Iterable } from 'vs/base/common/iterator'; -import { Emitter } from 'vs/base/common/event'; +import { localize } from '../../nls.js'; +import { EditorResourceAccessor, EditorExtensions, SideBySideEditor, IEditorDescriptor as ICommonEditorDescriptor, EditorCloseContext, IWillInstantiateEditorPaneEvent } from '../common/editor.js'; +import { EditorInput } from '../common/editor/editorInput.js'; +import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; +import { Registry } from '../../platform/registry/common/platform.js'; +import { EditorPane } from './parts/editor/editorPane.js'; +import { IConstructorSignature, IInstantiationService, BrandedService, ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +import { IDisposable, toDisposable } from '../../base/common/lifecycle.js'; +import { Promises } from '../../base/common/async.js'; +import { IEditorService } from '../services/editor/common/editorService.js'; +import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js'; +import { IWorkingCopyService } from '../services/workingCopy/common/workingCopyService.js'; +import { URI } from '../../base/common/uri.js'; +import { Schemas } from '../../base/common/network.js'; +import { IEditorGroup } from '../services/editor/common/editorGroupsService.js'; +import { Iterable } from '../../base/common/iterator.js'; +import { Emitter } from '../../base/common/event.js'; //#region Editor Pane Registry diff --git a/src/vs/workbench/browser/labels.ts b/src/vs/workbench/browser/labels.ts index 0c9fc4e9e..f83bdc050 100644 --- a/src/vs/workbench/browser/labels.ts +++ b/src/vs/workbench/browser/labels.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { dirname, isEqual, basenameOrAuthority } from 'vs/base/common/resources'; -import { IconLabel, IIconLabelValueOptions, IIconLabelCreationOptions } from 'vs/base/browser/ui/iconLabel/iconLabel'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { IDecoration, IDecorationsService, IResourceDecorationChangeEvent } from 'vs/workbench/services/decorations/common/decorations'; -import { Schemas } from 'vs/base/common/network'; -import { FileKind, FILES_ASSOCIATIONS_CONFIG } from 'vs/platform/files/common/files'; -import { ITextModel } from 'vs/editor/common/model'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { Event, Emitter } from 'vs/base/common/event'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { getIconClasses } from 'vs/editor/common/services/getIconClasses'; -import { Disposable, dispose, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { normalizeDriveLetter } from 'vs/base/common/labels'; -import { IRange } from 'vs/editor/common/core/range'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { INotebookDocumentService } from 'vs/workbench/services/notebook/common/notebookDocumentService'; +import { localize } from '../../nls.js'; +import { URI } from '../../base/common/uri.js'; +import { dirname, isEqual, basenameOrAuthority } from '../../base/common/resources.js'; +import { IconLabel, IIconLabelValueOptions, IIconLabelCreationOptions } from '../../base/browser/ui/iconLabel/iconLabel.js'; +import { ILanguageService } from '../../editor/common/languages/language.js'; +import { IWorkspaceContextService } from '../../platform/workspace/common/workspace.js'; +import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { IModelService } from '../../editor/common/services/model.js'; +import { ITextFileService } from '../services/textfile/common/textfiles.js'; +import { IDecoration, IDecorationsService, IResourceDecorationChangeEvent } from '../services/decorations/common/decorations.js'; +import { Schemas } from '../../base/common/network.js'; +import { FileKind, FILES_ASSOCIATIONS_CONFIG } from '../../platform/files/common/files.js'; +import { ITextModel } from '../../editor/common/model.js'; +import { IThemeService } from '../../platform/theme/common/themeService.js'; +import { Event, Emitter } from '../../base/common/event.js'; +import { ILabelService } from '../../platform/label/common/label.js'; +import { getIconClasses } from '../../editor/common/services/getIconClasses.js'; +import { Disposable, dispose, IDisposable, MutableDisposable } from '../../base/common/lifecycle.js'; +import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { normalizeDriveLetter } from '../../base/common/labels.js'; +import { IRange } from '../../editor/common/core/range.js'; +import { ThemeIcon } from '../../base/common/themables.js'; +import { INotebookDocumentService } from '../services/notebook/common/notebookDocumentService.js'; export interface IResourceLabelProps { resource?: URI | { primary?: URI; secondary?: URI }; diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 4ca393d98..7290a2f70 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -3,51 +3,51 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { Event, Emitter } from 'vs/base/common/event'; -import { EventType, addDisposableListener, getClientArea, position, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, isActiveDocument, getWindow, getWindowId, getActiveElement } from 'vs/base/browser/dom'; -import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from 'vs/base/browser/browser'; -import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; -import { isWindows, isLinux, isMacintosh, isWeb, isIOS } from 'vs/base/common/platform'; -import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from 'vs/workbench/common/editor'; -import { SidebarPart } from 'vs/workbench/browser/parts/sidebar/sidebarPart'; -import { PanelPart } from 'vs/workbench/browser/parts/panel/panelPart'; -import { Position, Parts, PanelOpensMaximizedOptions, IWorkbenchLayoutService, positionFromString, positionToString, panelOpensMaximizedFromString, PanelAlignment, ActivityBarPosition, LayoutSettings, MULTI_WINDOW_PARTS, SINGLE_WINDOW_PARTS, ZenModeSettings, EditorTabsMode, EditorActionsLocation, shouldShowCustomTitleBar, isHorizontal } from 'vs/workbench/services/layout/browser/layoutService'; -import { isTemporaryWorkspace, IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ITitleService } from 'vs/workbench/services/title/browser/titleService'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { StartupKind, ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { getMenuBarVisibility, IPath, hasNativeTitlebar, hasCustomTitlebar, TitleBarSetting, CustomTitleBarVisibility, useWindowControlsOverlay } from 'vs/platform/window/common/window'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { EditorGroupLayout, GroupsOrder, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { SerializableGrid, ISerializableView, ISerializedGrid, Orientation, ISerializedNode, ISerializedLeafNode, Direction, IViewSize, Sizing } from 'vs/base/browser/ui/grid/grid'; -import { Part } from 'vs/workbench/browser/part'; -import { IStatusbarService } from 'vs/workbench/services/statusbar/browser/statusbar'; -import { IFileService } from 'vs/platform/files/common/files'; -import { isCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { coalesce } from 'vs/base/common/arrays'; -import { assertIsDefined } from 'vs/base/common/types'; -import { INotificationService, NotificationsFilter } from 'vs/platform/notification/common/notification'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { WINDOW_ACTIVE_BORDER, WINDOW_INACTIVE_BORDER } from 'vs/workbench/common/theme'; -import { LineNumbersType } from 'vs/editor/common/config/editorOptions'; -import { URI } from 'vs/base/common/uri'; -import { IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { mark } from 'vs/base/common/performance'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { ILogService } from 'vs/platform/log/common/log'; -import { DeferredPromise, Promises } from 'vs/base/common/async'; -import { IBannerService } from 'vs/workbench/services/banner/browser/bannerService'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { AuxiliaryBarPart } from 'vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IAuxiliaryWindowService } from 'vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService'; -import { CodeWindow, mainWindow } from 'vs/base/browser/window'; +import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js'; +import { Event, Emitter } from '../../base/common/event.js'; +import { EventType, addDisposableListener, getClientArea, position, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, isActiveDocument, getWindow, getWindowId, getActiveElement } from '../../base/browser/dom.js'; +import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from '../../base/browser/browser.js'; +import { IWorkingCopyBackupService } from '../services/workingCopy/common/workingCopyBackup.js'; +import { isWindows, isLinux, isMacintosh, isWeb, isIOS } from '../../base/common/platform.js'; +import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from '../common/editor.js'; +import { SidebarPart } from './parts/sidebar/sidebarPart.js'; +import { PanelPart } from './parts/panel/panelPart.js'; +import { Position, Parts, PanelOpensMaximizedOptions, IWorkbenchLayoutService, positionFromString, positionToString, panelOpensMaximizedFromString, PanelAlignment, ActivityBarPosition, LayoutSettings, MULTI_WINDOW_PARTS, SINGLE_WINDOW_PARTS, ZenModeSettings, EditorTabsMode, EditorActionsLocation, shouldShowCustomTitleBar, isHorizontal } from '../services/layout/browser/layoutService.js'; +import { isTemporaryWorkspace, IWorkspaceContextService, WorkbenchState } from '../../platform/workspace/common/workspace.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; +import { IConfigurationChangeEvent, IConfigurationService } from '../../platform/configuration/common/configuration.js'; +import { ITitleService } from '../services/title/browser/titleService.js'; +import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +import { StartupKind, ILifecycleService } from '../services/lifecycle/common/lifecycle.js'; +import { getMenuBarVisibility, IPath, hasNativeTitlebar, hasCustomTitlebar, TitleBarSetting, CustomTitleBarVisibility, useWindowControlsOverlay } from '../../platform/window/common/window.js'; +import { IHostService } from '../services/host/browser/host.js'; +import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; +import { IEditorService } from '../services/editor/common/editorService.js'; +import { EditorGroupLayout, GroupsOrder, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; +import { SerializableGrid, ISerializableView, ISerializedGrid, Orientation, ISerializedNode, ISerializedLeafNode, Direction, IViewSize, Sizing } from '../../base/browser/ui/grid/grid.js'; +import { Part } from './part.js'; +import { IStatusbarService } from '../services/statusbar/browser/statusbar.js'; +import { IFileService } from '../../platform/files/common/files.js'; +import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; +import { coalesce } from '../../base/common/arrays.js'; +import { assertIsDefined } from '../../base/common/types.js'; +import { INotificationService, NotificationsFilter } from '../../platform/notification/common/notification.js'; +import { IThemeService } from '../../platform/theme/common/themeService.js'; +import { WINDOW_ACTIVE_BORDER, WINDOW_INACTIVE_BORDER } from '../common/theme.js'; +import { LineNumbersType } from '../../editor/common/config/editorOptions.js'; +import { URI } from '../../base/common/uri.js'; +import { IViewDescriptorService, ViewContainerLocation } from '../common/views.js'; +import { DiffEditorInput } from '../common/editor/diffEditorInput.js'; +import { mark } from '../../base/common/performance.js'; +import { IExtensionService } from '../services/extensions/common/extensions.js'; +import { ILogService } from '../../platform/log/common/log.js'; +import { DeferredPromise, Promises } from '../../base/common/async.js'; +import { IBannerService } from '../services/banner/browser/bannerService.js'; +import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; +import { AuxiliaryBarPart } from './parts/auxiliarybar/auxiliaryBarPart.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { IAuxiliaryWindowService } from '../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; +import { CodeWindow, mainWindow } from '../../base/browser/window.js'; //#region Layout Implementation @@ -671,6 +671,9 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi runtime: layoutRuntimeState, }; + const isNewWindow = lifecycleService.startupKind === StartupKind.NewWindow; + const activityBarNotDefault = this.configurationService.getValue(LayoutSettings.ACTIVITY_BAR_LOCATION) !== ActivityBarPosition.DEFAULT; + // Sidebar View Container To Restore if (this.isVisible(Parts.SIDEBAR_PART)) { @@ -692,6 +695,15 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi this.stateModel.setRuntimeValue(LayoutStateKeys.SIDEBAR_HIDDEN, true); } } + // Side bar is hidden and a new window is opened with activity bar not visible (not default) + else if (isNewWindow && activityBarNotDefault) { + // Open side bar if there is a view container to restore + const viewContainerToRestore = this.storageService.get(SidebarPart.activeViewletSettingsKey, StorageScope.WORKSPACE, this.viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)?.id); + if (viewContainerToRestore) { + this.state.initialization.views.containerToRestore.sideBar = viewContainerToRestore; + this.stateModel.setRuntimeValue(LayoutStateKeys.SIDEBAR_HIDDEN, false); + } + } // Panel View Container To Restore if (this.isVisible(Parts.PANEL_PART)) { diff --git a/src/vs/workbench/browser/panecomposite.ts b/src/vs/workbench/browser/panecomposite.ts index 89e701e2d..86dbfe14f 100644 --- a/src/vs/workbench/browser/panecomposite.ts +++ b/src/vs/workbench/browser/panecomposite.ts @@ -3,26 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Registry } from 'vs/platform/registry/common/platform'; -import { Composite, CompositeDescriptor, CompositeRegistry } from 'vs/workbench/browser/composite'; -import { IConstructorSignature, BrandedService, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { URI } from 'vs/base/common/uri'; -import { Dimension } from 'vs/base/browser/dom'; -import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IAction, Separator } from 'vs/base/common/actions'; -import { MenuId, SubmenuItemAction } from 'vs/platform/actions/common/actions'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { ViewPaneContainer, ViewsSubMenu } from 'vs/workbench/browser/parts/views/viewPaneContainer'; -import { IPaneComposite } from 'vs/workbench/common/panecomposite'; -import { IView } from 'vs/workbench/common/views'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { VIEWPANE_FILTER_ACTION } from 'vs/workbench/browser/parts/views/viewPane'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; +import { Registry } from '../../platform/registry/common/platform.js'; +import { Composite, CompositeDescriptor, CompositeRegistry } from './composite.js'; +import { IConstructorSignature, BrandedService, IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +import { URI } from '../../base/common/uri.js'; +import { Dimension } from '../../base/browser/dom.js'; +import { IActionViewItem } from '../../base/browser/ui/actionbar/actionbar.js'; +import { IAction, Separator } from '../../base/common/actions.js'; +import { MenuId, SubmenuItemAction } from '../../platform/actions/common/actions.js'; +import { IContextMenuService } from '../../platform/contextview/browser/contextView.js'; +import { IStorageService } from '../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +import { IThemeService } from '../../platform/theme/common/themeService.js'; +import { IWorkspaceContextService } from '../../platform/workspace/common/workspace.js'; +import { ViewPaneContainer, ViewsSubMenu } from './parts/views/viewPaneContainer.js'; +import { IPaneComposite } from '../common/panecomposite.js'; +import { IView } from '../common/views.js'; +import { IExtensionService } from '../services/extensions/common/extensions.js'; +import { VIEWPANE_FILTER_ACTION } from './parts/views/viewPane.js'; +import { IBoundarySashes } from '../../base/browser/ui/sash/sash.js'; +import { IBaseActionViewItemOptions } from '../../base/browser/ui/actionbar/actionViewItems.js'; export abstract class PaneComposite extends Composite implements IPaneComposite { diff --git a/src/vs/workbench/browser/part.ts b/src/vs/workbench/browser/part.ts index 086dcb51b..e85aac5c3 100644 --- a/src/vs/workbench/browser/part.ts +++ b/src/vs/workbench/browser/part.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/part'; -import { Component } from 'vs/workbench/common/component'; -import { IThemeService, IColorTheme } from 'vs/platform/theme/common/themeService'; -import { Dimension, size, IDimension, getActiveDocument, prepend, IDomPosition } from 'vs/base/browser/dom'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ISerializableView, IViewSize } from 'vs/base/browser/ui/grid/grid'; -import { Event, Emitter } from 'vs/base/common/event'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { assertIsDefined } from 'vs/base/common/types'; -import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import './media/part.css'; +import { Component } from '../common/component.js'; +import { IThemeService, IColorTheme } from '../../platform/theme/common/themeService.js'; +import { Dimension, size, IDimension, getActiveDocument, prepend, IDomPosition } from '../../base/browser/dom.js'; +import { IStorageService } from '../../platform/storage/common/storage.js'; +import { ISerializableView, IViewSize } from '../../base/browser/ui/grid/grid.js'; +import { Event, Emitter } from '../../base/common/event.js'; +import { IWorkbenchLayoutService } from '../services/layout/browser/layoutService.js'; +import { assertIsDefined } from '../../base/common/types.js'; +import { IDisposable, toDisposable } from '../../base/common/lifecycle.js'; export interface IPartOptions { readonly hasTitle?: boolean; diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 97f386107..ce7ed066b 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -3,40 +3,41 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/activitybarpart'; -import 'vs/css!./media/activityaction'; -import { localize, localize2 } from 'vs/nls'; -import { ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Part } from 'vs/workbench/browser/part'; -import { ActivityBarPosition, IWorkbenchLayoutService, LayoutSettings, Parts, Position } from 'vs/workbench/services/layout/browser/layoutService'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle'; -import { ToggleSidebarPositionAction } from 'vs/workbench/browser/actions/layoutActions'; -import { IThemeService, IColorTheme, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { ACTIVITY_BAR_BACKGROUND, ACTIVITY_BAR_BORDER, ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND, ACTIVITY_BAR_INACTIVE_FOREGROUND, ACTIVITY_BAR_ACTIVE_BACKGROUND, ACTIVITY_BAR_DRAG_AND_DROP_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER } from 'vs/workbench/common/theme'; -import { activeContrastBorder, contrastBorder, focusBorder } from 'vs/platform/theme/common/colorRegistry'; -import { addDisposableListener, append, EventType, isAncestor, $, clearNode } from 'vs/base/browser/dom'; -import { assertIsDefined } from 'vs/base/common/types'; -import { CustomMenubarControl } from 'vs/workbench/browser/parts/titlebar/menubarControl'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { getMenuBarVisibility } from 'vs/platform/window/common/window'; -import { IAction, Separator, SubmenuAction, toAction } from 'vs/base/common/actions'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; -import { GestureEvent } from 'vs/base/browser/touch'; -import { IPaneCompositePart } from 'vs/workbench/browser/parts/paneCompositePart'; -import { IPaneCompositeBarOptions, PaneCompositeBar } from 'vs/workbench/browser/parts/paneCompositeBar'; -import { GlobalCompositeBar } from 'vs/workbench/browser/parts/globalCompositeBar'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { Action2, IAction2Options, IMenuService, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; -import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IViewDescriptorService, ViewContainerLocation, ViewContainerLocationToString } from 'vs/workbench/common/views'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; +import './media/activitybarpart.css'; +import './media/activityaction.css'; +import { localize, localize2 } from '../../../../nls.js'; +import { ActionsOrientation } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { Part } from '../../part.js'; +import { ActivityBarPosition, IWorkbenchLayoutService, LayoutSettings, Parts, Position } from '../../../services/layout/browser/layoutService.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { ToggleSidebarPositionAction } from '../../actions/layoutActions.js'; +import { IThemeService, IColorTheme, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { ACTIVITY_BAR_BACKGROUND, ACTIVITY_BAR_BORDER, ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND, ACTIVITY_BAR_INACTIVE_FOREGROUND, ACTIVITY_BAR_ACTIVE_BACKGROUND, ACTIVITY_BAR_DRAG_AND_DROP_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER } from '../../../common/theme.js'; +import { activeContrastBorder, contrastBorder, focusBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { addDisposableListener, append, EventType, isAncestor, $, clearNode } from '../../../../base/browser/dom.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { CustomMenubarControl } from '../titlebar/menubarControl.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { getMenuBarVisibility } from '../../../../platform/window/common/window.js'; +import { IAction, Separator, SubmenuAction, toAction } from '../../../../base/common/actions.js'; +import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { GestureEvent } from '../../../../base/browser/touch.js'; +import { IPaneCompositePart } from '../paneCompositePart.js'; +import { IPaneCompositeBarOptions, PaneCompositeBar } from '../paneCompositeBar.js'; +import { GlobalCompositeBar } from '../globalCompositeBar.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { Action2, IAction2Options, IMenuService, MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { createAndFillInContextMenuActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IViewDescriptorService, ViewContainerLocation, ViewContainerLocationToString } from '../../../common/views.js'; +import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js'; +import { IExtensionService } from '../../../services/extensions/common/extensions.js'; +import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; +import { IViewsService } from '../../../services/views/common/viewsService.js'; export class ActivitybarPart extends Part { @@ -205,6 +206,7 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { @IStorageService storageService: IStorageService, @IExtensionService extensionService: IExtensionService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, + @IViewsService viewService: IViewsService, @IContextKeyService contextKeyService: IContextKeyService, @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, @IConfigurationService private readonly configurationService: IConfigurationService, @@ -217,7 +219,7 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { options.fillExtraContextMenuActions(actions, e); this.fillContextMenuActions(actions, e); } - }, part, paneCompositePart, instantiationService, storageService, extensionService, viewDescriptorService, contextKeyService, environmentService, layoutService); + }, part, paneCompositePart, instantiationService, storageService, extensionService, viewDescriptorService, viewService, contextKeyService, environmentService, layoutService); if (showGlobalActivities) { this.globalCompositeBar = this._register(instantiationService.createInstance(GlobalCompositeBar, () => this.getContextMenuActions(), (theme: IColorTheme) => this.options.colors(theme), this.options.activityHoverOptions)); diff --git a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css index b40341d21..22cd4083d 100644 --- a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css +++ b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css @@ -169,23 +169,6 @@ text-align: center; } -.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge .profile-icon-overlay { - position: absolute; - top: 27px; - right: 6px; - background-color: var(--vscode-activityBar-background); -} - -.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge .profile-icon-overlay .codicon { - color: var(--vscode-activityBar-inactiveForeground); -} - -.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .profile-badge .profile-icon-overlay .codicon, -.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .profile-badge .profile-icon-overlay .codicon, -.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .profile-badge .profile-icon-overlay .codicon { - color: var(--vscode-activityBar-foreground) !important; -} - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge .profile-text-overlay { position: absolute; font-weight: 600; diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts index 3de5a2cc2..b2c7e5f01 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Codicon } from 'vs/base/common/codicons'; -import { localize, localize2 } from 'vs/nls'; -import { Action2, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { AuxiliaryBarVisibleContext } from 'vs/workbench/common/contextkeys'; -import { ViewContainerLocation, ViewContainerLocationToString } from 'vs/workbench/common/views'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { localize, localize2 } from '../../../../nls.js'; +import { Action2, MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { AuxiliaryBarVisibleContext } from '../../../common/contextkeys.js'; +import { ViewContainerLocation, ViewContainerLocationToString } from '../../../common/views.js'; +import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; +import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; const auxiliaryBarRightIcon = registerIcon('auxiliarybar-right-layout-icon', Codicon.layoutSidebarRight, localize('toggleAuxiliaryIconRight', 'Icon to toggle the auxiliary bar off in its right position.')); diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts index 246ac87fc..264794c15 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/auxiliaryBarPart'; -import { localize } from 'vs/nls'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { contrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ActiveAuxiliaryContext, AuxiliaryBarFocusContext } from 'vs/workbench/common/contextkeys'; -import { ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND, ACTIVITY_BAR_TOP_ACTIVE_BORDER, ACTIVITY_BAR_TOP_DRAG_AND_DROP_BORDER, ACTIVITY_BAR_TOP_FOREGROUND, ACTIVITY_BAR_TOP_INACTIVE_FOREGROUND, PANEL_ACTIVE_TITLE_BORDER, PANEL_ACTIVE_TITLE_FOREGROUND, PANEL_DRAG_AND_DROP_BORDER, PANEL_INACTIVE_TITLE_FOREGROUND, SIDE_BAR_BACKGROUND, SIDE_BAR_BORDER, SIDE_BAR_FOREGROUND } from 'vs/workbench/common/theme'; -import { IViewDescriptorService } from 'vs/workbench/common/views'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { ActivityBarPosition, IWorkbenchLayoutService, LayoutSettings, Parts, Position } from 'vs/workbench/services/layout/browser/layoutService'; -import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; -import { IAction, Separator, SubmenuAction, toAction } from 'vs/base/common/actions'; -import { ToggleAuxiliaryBarAction } from 'vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions'; -import { assertIsDefined } from 'vs/base/common/types'; -import { LayoutPriority } from 'vs/base/browser/ui/splitview/splitview'; -import { ToggleSidebarPositionAction } from 'vs/workbench/browser/actions/layoutActions'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { AbstractPaneCompositePart, CompositeBarPosition } from 'vs/workbench/browser/parts/paneCompositePart'; -import { ActionsOrientation, IActionViewItem, prepareActions } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IPaneCompositeBarOptions } from 'vs/workbench/browser/parts/paneCompositeBar'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { $ } from 'vs/base/browser/dom'; -import { HiddenItemStrategy, WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { ActionViewItem, IActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { CompositeMenuActions } from 'vs/workbench/browser/actions'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; +import './media/auxiliaryBarPart.css'; +import { localize } from '../../../../nls.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { contrastBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { ActiveAuxiliaryContext, AuxiliaryBarFocusContext } from '../../../common/contextkeys.js'; +import { ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND, ACTIVITY_BAR_TOP_ACTIVE_BORDER, ACTIVITY_BAR_TOP_DRAG_AND_DROP_BORDER, ACTIVITY_BAR_TOP_FOREGROUND, ACTIVITY_BAR_TOP_INACTIVE_FOREGROUND, PANEL_ACTIVE_TITLE_BORDER, PANEL_ACTIVE_TITLE_FOREGROUND, PANEL_DRAG_AND_DROP_BORDER, PANEL_INACTIVE_TITLE_FOREGROUND, SIDE_BAR_BACKGROUND, SIDE_BAR_BORDER, SIDE_BAR_FOREGROUND } from '../../../common/theme.js'; +import { IViewDescriptorService } from '../../../common/views.js'; +import { IExtensionService } from '../../../services/extensions/common/extensions.js'; +import { ActivityBarPosition, IWorkbenchLayoutService, LayoutSettings, Parts, Position } from '../../../services/layout/browser/layoutService.js'; +import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js'; +import { IAction, Separator, SubmenuAction, toAction } from '../../../../base/common/actions.js'; +import { ToggleAuxiliaryBarAction } from './auxiliaryBarActions.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { LayoutPriority } from '../../../../base/browser/ui/splitview/splitview.js'; +import { ToggleSidebarPositionAction } from '../../actions/layoutActions.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { AbstractPaneCompositePart, CompositeBarPosition } from '../paneCompositePart.js'; +import { ActionsOrientation, IActionViewItem, prepareActions } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { IPaneCompositeBarOptions } from '../paneCompositeBar.js'; +import { IMenuService, MenuId } from '../../../../platform/actions/common/actions.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { createAndFillInContextMenuActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { $ } from '../../../../base/browser/dom.js'; +import { HiddenItemStrategy, WorkbenchToolBar } from '../../../../platform/actions/browser/toolbar.js'; +import { ActionViewItem, IActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; +import { CompositeMenuActions } from '../../actions.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; export class AuxiliaryBarPart extends AbstractPaneCompositePart { diff --git a/src/vs/workbench/browser/parts/banner/bannerPart.ts b/src/vs/workbench/browser/parts/banner/bannerPart.ts index e8957eae6..1f329c4c7 100644 --- a/src/vs/workbench/browser/parts/banner/bannerPart.ts +++ b/src/vs/workbench/browser/parts/banner/bannerPart.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/bannerpart'; -import { localize2 } from 'vs/nls'; -import { $, addDisposableListener, append, asCSSUrl, clearNode, EventType, isHTMLElement } from 'vs/base/browser/dom'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { Part } from 'vs/workbench/browser/part'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { Action } from 'vs/base/common/actions'; -import { Link } from 'vs/platform/opener/browser/link'; -import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Emitter } from 'vs/base/common/event'; -import { IBannerItem, IBannerService } from 'vs/workbench/services/banner/browser/bannerService'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { URI } from 'vs/base/common/uri'; -import { widgetClose } from 'vs/platform/theme/common/iconRegistry'; -import { BannerFocused } from 'vs/workbench/common/contextkeys'; +import './media/bannerpart.css'; +import { localize2 } from '../../../../nls.js'; +import { $, addDisposableListener, append, asCSSUrl, clearNode, EventType, isHTMLElement } from '../../../../base/browser/dom.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { Part } from '../../part.js'; +import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; +import { Action } from '../../../../base/common/actions.js'; +import { Link } from '../../../../platform/opener/browser/link.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { IBannerItem, IBannerService } from '../../../services/banner/browser/bannerService.js'; +import { MarkdownRenderer } from '../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { URI } from '../../../../base/common/uri.js'; +import { widgetClose } from '../../../../platform/theme/common/iconRegistry.js'; +import { BannerFocused } from '../../../common/contextkeys.js'; // Banner Part diff --git a/src/vs/workbench/browser/parts/compositeBar.ts b/src/vs/workbench/browser/parts/compositeBar.ts index a9fc39c84..04d781835 100644 --- a/src/vs/workbench/browser/parts/compositeBar.ts +++ b/src/vs/workbench/browser/parts/compositeBar.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { IAction, toAction } from 'vs/base/common/actions'; -import { IActivity } from 'vs/workbench/services/activity/common/activity'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ActionBar, ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; -import { CompositeActionViewItem, CompositeOverflowActivityAction, CompositeOverflowActivityActionViewItem, CompositeBarAction, ICompositeBar, ICompositeBarColors, IActivityHoverOptions } from 'vs/workbench/browser/parts/compositeBarActions'; -import { Dimension, $, addDisposableListener, EventType, EventHelper, isAncestor, getWindow } from 'vs/base/browser/dom'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { isUndefinedOrNull } from 'vs/base/common/types'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import { Emitter } from 'vs/base/common/event'; -import { ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views'; -import { IPaneComposite } from 'vs/workbench/common/panecomposite'; -import { IComposite } from 'vs/workbench/common/composite'; -import { CompositeDragAndDropData, CompositeDragAndDropObserver, IDraggedCompositeData, ICompositeDragAndDrop, Before2D, toggleDropEffect } from 'vs/workbench/browser/dnd'; -import { Gesture, EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch'; +import { localize } from '../../../nls.js'; +import { IAction, toAction } from '../../../base/common/actions.js'; +import { IActivity } from '../../services/activity/common/activity.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ActionBar, ActionsOrientation } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { CompositeActionViewItem, CompositeOverflowActivityAction, CompositeOverflowActivityActionViewItem, CompositeBarAction, ICompositeBar, ICompositeBarColors, IActivityHoverOptions } from './compositeBarActions.js'; +import { Dimension, $, addDisposableListener, EventType, EventHelper, isAncestor, getWindow } from '../../../base/browser/dom.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { Widget } from '../../../base/browser/ui/widget.js'; +import { isUndefinedOrNull } from '../../../base/common/types.js'; +import { IColorTheme } from '../../../platform/theme/common/themeService.js'; +import { Emitter } from '../../../base/common/event.js'; +import { ViewContainerLocation, IViewDescriptorService } from '../../common/views.js'; +import { IPaneComposite } from '../../common/panecomposite.js'; +import { IComposite } from '../../common/composite.js'; +import { CompositeDragAndDropData, CompositeDragAndDropObserver, IDraggedCompositeData, ICompositeDragAndDrop, Before2D, toggleDropEffect, ICompositeDragAndDropObserverCallbacks } from '../dnd.js'; +import { Gesture, EventType as TouchEventType, GestureEvent } from '../../../base/browser/touch.js'; export interface ICompositeBarItem { @@ -152,6 +152,78 @@ export interface ICompositeBarOptions { readonly getDefaultCompositeId: () => string | undefined; } +class CompositeBarDndCallbacks implements ICompositeDragAndDropObserverCallbacks { + + private insertDropBefore: Before2D | undefined = undefined; + + constructor( + private readonly compositeBarContainer: HTMLElement, + private readonly actionBarContainer: HTMLElement, + private readonly compositeBarModel: CompositeBarModel, + private readonly dndHandler: ICompositeDragAndDrop, + private readonly orientation: ActionsOrientation, + ) { } + + onDragOver(e: IDraggedCompositeData) { + + // don't add feedback if this is over the composite bar actions or there are no actions + const visibleItems = this.compositeBarModel.visibleItems; + if (!visibleItems.length || (e.eventData.target && isAncestor(e.eventData.target as HTMLElement, this.actionBarContainer))) { + this.insertDropBefore = this.updateFromDragging(this.compositeBarContainer, false, false, true); + return; + } + + const insertAtFront = this.insertAtFront(this.actionBarContainer, e.eventData); + const target = insertAtFront ? visibleItems[0] : visibleItems[visibleItems.length - 1]; + const validDropTarget = this.dndHandler.onDragOver(e.dragAndDropData, target.id, e.eventData); + toggleDropEffect(e.eventData.dataTransfer, 'move', validDropTarget); + this.insertDropBefore = this.updateFromDragging(this.compositeBarContainer, validDropTarget, insertAtFront, true); + } + + onDragLeave(e: IDraggedCompositeData) { + this.insertDropBefore = this.updateFromDragging(this.compositeBarContainer, false, false, false); + } + + onDragEnd(e: IDraggedCompositeData) { + this.insertDropBefore = this.updateFromDragging(this.compositeBarContainer, false, false, false); + } + + onDrop(e: IDraggedCompositeData) { + const visibleItems = this.compositeBarModel.visibleItems; + let targetId = undefined; + if (visibleItems.length) { + targetId = this.insertAtFront(this.actionBarContainer, e.eventData) ? visibleItems[0].id : visibleItems[visibleItems.length - 1].id; + } + this.dndHandler.drop(e.dragAndDropData, targetId, e.eventData, this.insertDropBefore); + this.insertDropBefore = this.updateFromDragging(this.compositeBarContainer, false, false, false); + } + + private insertAtFront(element: HTMLElement, event: DragEvent): boolean { + const rect = element.getBoundingClientRect(); + const posX = event.clientX; + const posY = event.clientY; + + switch (this.orientation) { + case ActionsOrientation.HORIZONTAL: + return posX < rect.left; + case ActionsOrientation.VERTICAL: + return posY < rect.top; + } + } + + private updateFromDragging(element: HTMLElement, showFeedback: boolean, front: boolean, isDragging: boolean): Before2D | undefined { + element.classList.toggle('dragged-over', isDragging); + element.classList.toggle('dragged-over-head', showFeedback && front); + element.classList.toggle('dragged-over-tail', showFeedback && !front); + + if (!showFeedback) { + return undefined; + } + + return { verticallyBefore: front, horizontallyBefore: front }; + } +} + export class CompositeBar extends Widget implements ICompositeBar { private readonly _onDidChange = this._register(new Emitter()); @@ -232,67 +304,12 @@ export class CompositeBar extends Widget implements ICompositeBar { this._register(addDisposableListener(parent, TouchEventType.Contextmenu, e => this.showContextMenu(getWindow(parent), e))); // Register a drop target on the whole bar to prevent forbidden feedback - let insertDropBefore: Before2D | undefined = undefined; - this._register(CompositeDragAndDropObserver.INSTANCE.registerTarget(parent, { - onDragOver: (e: IDraggedCompositeData) => { - - // don't add feedback if this is over the composite bar actions or there are no actions - const visibleItems = this.getVisibleComposites(); - if (!visibleItems.length || (e.eventData.target && isAncestor(e.eventData.target as HTMLElement, actionBarDiv))) { - insertDropBefore = this.updateFromDragging(parent, false, false, true); - return; - } - - const insertAtFront = this.insertAtFront(actionBarDiv, e.eventData); - const target = insertAtFront ? visibleItems[0] : visibleItems[visibleItems.length - 1]; - const validDropTarget = this.options.dndHandler.onDragOver(e.dragAndDropData, target.id, e.eventData); - toggleDropEffect(e.eventData.dataTransfer, 'move', validDropTarget); - insertDropBefore = this.updateFromDragging(parent, validDropTarget, insertAtFront, true); - }, - onDragLeave: (e: IDraggedCompositeData) => { - insertDropBefore = this.updateFromDragging(parent, false, false, false); - }, - onDragEnd: (e: IDraggedCompositeData) => { - insertDropBefore = this.updateFromDragging(parent, false, false, false); - }, - onDrop: (e: IDraggedCompositeData) => { - const visibleItems = this.getVisibleComposites(); - if (visibleItems.length) { - const target = this.insertAtFront(actionBarDiv, e.eventData) ? visibleItems[0] : visibleItems[visibleItems.length - 1]; - this.options.dndHandler.drop(e.dragAndDropData, target.id, e.eventData, insertDropBefore); - } - insertDropBefore = this.updateFromDragging(parent, false, false, false); - } - })); + const dndCallback = new CompositeBarDndCallbacks(parent, actionBarDiv, this.model, this.options.dndHandler, this.options.orientation); + this._register(CompositeDragAndDropObserver.INSTANCE.registerTarget(parent, dndCallback)); return actionBarDiv; } - private insertAtFront(element: HTMLElement, event: DragEvent): boolean { - const rect = element.getBoundingClientRect(); - const posX = event.clientX; - const posY = event.clientY; - - switch (this.options.orientation) { - case ActionsOrientation.HORIZONTAL: - return posX < rect.left; - case ActionsOrientation.VERTICAL: - return posY < rect.top; - } - } - - private updateFromDragging(element: HTMLElement, showFeedback: boolean, front: boolean, isDragging: boolean): Before2D | undefined { - element.classList.toggle('dragged-over', isDragging); - element.classList.toggle('dragged-over-head', showFeedback && front); - element.classList.toggle('dragged-over-tail', showFeedback && !front); - - if (!showFeedback) { - return undefined; - } - - return { verticallyBefore: front, horizontallyBefore: front }; - } - focus(index?: number): void { this.compositeSwitcherBar?.focus(index); } diff --git a/src/vs/workbench/browser/parts/compositeBarActions.ts b/src/vs/workbench/browser/parts/compositeBarActions.ts index 24b1b97b7..15f6b0633 100644 --- a/src/vs/workbench/browser/parts/compositeBarActions.ts +++ b/src/vs/workbench/browser/parts/compositeBarActions.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Action, IAction, Separator } from 'vs/base/common/actions'; -import { $, addDisposableListener, append, clearNode, EventHelper, EventType, getDomNodePagePosition, hide, show } from 'vs/base/browser/dom'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { toDisposable, DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IThemeService, IColorTheme } from 'vs/platform/theme/common/themeService'; -import { NumberBadge, IBadge, IActivity, ProgressBadge } from 'vs/workbench/services/activity/common/activity'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { DelayedDragHandler } from 'vs/base/browser/dnd'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { Emitter, Event } from 'vs/base/common/event'; -import { CompositeDragAndDropObserver, ICompositeDragAndDrop, Before2D, toggleDropEffect } from 'vs/workbench/browser/dnd'; -import { Color } from 'vs/base/common/color'; -import { BaseActionViewItem, IActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; -import { URI } from 'vs/base/common/uri'; -import { badgeBackground, badgeForeground, contrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import type { IHoverWidget } from 'vs/base/browser/ui/hover/hover'; +import { localize } from '../../../nls.js'; +import { Action, IAction, Separator } from '../../../base/common/actions.js'; +import { $, addDisposableListener, append, clearNode, EventHelper, EventType, getDomNodePagePosition, hide, show } from '../../../base/browser/dom.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; +import { toDisposable, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { IThemeService, IColorTheme } from '../../../platform/theme/common/themeService.js'; +import { NumberBadge, IBadge, IActivity, ProgressBadge, IconBadge } from '../../services/activity/common/activity.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { DelayedDragHandler } from '../../../base/browser/dnd.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { Emitter, Event } from '../../../base/common/event.js'; +import { CompositeDragAndDropObserver, ICompositeDragAndDrop, Before2D, toggleDropEffect } from '../dnd.js'; +import { Color } from '../../../base/common/color.js'; +import { BaseActionViewItem, IActionViewItemOptions } from '../../../base/browser/ui/actionbar/actionViewItems.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IHoverService } from '../../../platform/hover/browser/hover.js'; +import { RunOnceScheduler } from '../../../base/common/async.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { HoverPosition } from '../../../base/browser/ui/hover/hoverWidget.js'; +import { URI } from '../../../base/common/uri.js'; +import { badgeBackground, badgeForeground, contrastBorder } from '../../../platform/theme/common/colorRegistry.js'; +import type { IHoverWidget } from '../../../base/browser/ui/hover/hover.js'; export interface ICompositeBar { @@ -154,7 +154,7 @@ export class CompositeBarActionViewItem extends BaseActionViewItem { protected override readonly options: ICompositeBarActionViewItemOptions; private badgeContent: HTMLElement | undefined; - private readonly badgeDisposable = this._register(new MutableDisposable()); + private readonly badgeDisposable = this._register(new MutableDisposable()); private mouseUpTimeout: any; private keybindingLabel: string | undefined | null; @@ -214,9 +214,10 @@ export class CompositeBarActionViewItem extends BaseActionViewItem { // Badge if (this.badgeContent) { - const badgeFg = colors.badgeForeground ?? theme.getColor(badgeForeground); - const badgeBg = colors.badgeBackground ?? theme.getColor(badgeBackground); - const contrastBorderColor = theme.getColor(contrastBorder); + const badgeStyles = this.getActivity()?.badge.getColors(theme); + const badgeFg = badgeStyles?.badgeForeground ?? colors.badgeForeground ?? theme.getColor(badgeForeground); + const badgeBg = badgeStyles?.badgeBackground ?? colors.badgeBackground ?? theme.getColor(badgeBackground); + const contrastBorderColor = badgeStyles?.badgeBorder ?? theme.getColor(contrastBorder); this.badgeContent.style.color = badgeFg ? badgeFg.toString() : ''; this.badgeContent.style.backgroundColor = badgeBg ? badgeBg.toString() : ''; @@ -285,15 +286,21 @@ export class CompositeBarActionViewItem extends BaseActionViewItem { this.updateStyles(); } + private getActivity(): IActivity | undefined { + if (this._action instanceof CompositeBarAction) { + return this._action.activity; + } + return undefined; + } + protected updateActivity(): void { - const action = this.action; - if (!this.badge || !this.badgeContent || !(action instanceof CompositeBarAction)) { + if (!this.badge || !this.badgeContent || !(this._action instanceof CompositeBarAction)) { return; } - const activity = action.activity; + const activity = this.getActivity(); - this.badgeDisposable.clear(); + this.badgeDisposable.value = new DisposableStore(); clearNode(this.badgeContent); hide(this.badge); @@ -336,14 +343,24 @@ export class CompositeBarActionViewItem extends BaseActionViewItem { } } + // Icon + else if (badge instanceof IconBadge) { + classes.push('icon-badge'); + const badgeContentClassess = ['icon-overlay', ...ThemeIcon.asClassNameArray(badge.icon)]; + this.badgeContent.classList.add(...badgeContentClassess); + this.badgeDisposable.value.add(toDisposable(() => this.badgeContent?.classList.remove(...badgeContentClassess))); + show(this.badge); + } + if (classes.length) { this.badge.classList.add(...classes); - this.badgeDisposable.value = toDisposable(() => this.badge.classList.remove(...classes)); + this.badgeDisposable.value.add(toDisposable(() => this.badge.classList.remove(...classes))); } } this.updateTitle(); + this.updateStyles(); } protected override updateLabel(): void { diff --git a/src/vs/workbench/browser/parts/compositePart.ts b/src/vs/workbench/browser/parts/compositePart.ts index cbc478306..fc483b4d3 100644 --- a/src/vs/workbench/browser/parts/compositePart.ts +++ b/src/vs/workbench/browser/parts/compositePart.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/compositepart'; -import { localize } from 'vs/nls'; -import { defaultGenerator } from 'vs/base/common/idGenerator'; -import { IDisposable, dispose, DisposableStore, MutableDisposable, } from 'vs/base/common/lifecycle'; -import { Emitter } from 'vs/base/common/event'; -import { isCancellationError } from 'vs/base/common/errors'; -import { ActionsOrientation, IActionViewItem, prepareActions } from 'vs/base/browser/ui/actionbar/actionbar'; -import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; -import { IAction } from 'vs/base/common/actions'; -import { Part, IPartOptions } from 'vs/workbench/browser/part'; -import { Composite, CompositeRegistry } from 'vs/workbench/browser/composite'; -import { IComposite } from 'vs/workbench/common/composite'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IProgressIndicator, IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { Dimension, append, $, hide, show } from 'vs/base/browser/dom'; -import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; -import { assertIsDefined } from 'vs/base/common/types'; -import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { AbstractProgressScope, ScopedProgressIndicator } from 'vs/workbench/services/progress/browser/progressIndicator'; -import { WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { defaultProgressBarStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { createInstantHoverDelegate, getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import type { IHoverService } from 'vs/platform/hover/browser/hover'; +import './media/compositepart.css'; +import { localize } from '../../../nls.js'; +import { defaultGenerator } from '../../../base/common/idGenerator.js'; +import { IDisposable, dispose, DisposableStore, MutableDisposable, } from '../../../base/common/lifecycle.js'; +import { Emitter } from '../../../base/common/event.js'; +import { isCancellationError } from '../../../base/common/errors.js'; +import { ActionsOrientation, IActionViewItem, prepareActions } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { ProgressBar } from '../../../base/browser/ui/progressbar/progressbar.js'; +import { IAction } from '../../../base/common/actions.js'; +import { Part, IPartOptions } from '../part.js'; +import { Composite, CompositeRegistry } from '../composite.js'; +import { IComposite } from '../../common/composite.js'; +import { IWorkbenchLayoutService } from '../../services/layout/browser/layoutService.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../platform/storage/common/storage.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js'; +import { IProgressIndicator, IEditorProgressService } from '../../../platform/progress/common/progress.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { Dimension, append, $, hide, show } from '../../../base/browser/dom.js'; +import { AnchorAlignment } from '../../../base/browser/ui/contextview/contextview.js'; +import { assertIsDefined } from '../../../base/common/types.js'; +import { createActionViewItem } from '../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { AbstractProgressScope, ScopedProgressIndicator } from '../../services/progress/browser/progressIndicator.js'; +import { WorkbenchToolBar } from '../../../platform/actions/browser/toolbar.js'; +import { defaultProgressBarStyles } from '../../../platform/theme/browser/defaultStyles.js'; +import { IBoundarySashes } from '../../../base/browser/ui/sash/sash.js'; +import { IBaseActionViewItemOptions } from '../../../base/browser/ui/actionbar/actionViewItems.js'; +import { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js'; +import { createInstantHoverDelegate, getDefaultHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import type { IHoverService } from '../../../platform/hover/browser/hover.js'; export interface ICompositeTitleLabel { diff --git a/src/vs/workbench/browser/parts/dialogs/dialog.web.contribution.ts b/src/vs/workbench/browser/parts/dialogs/dialog.web.contribution.ts index a97e57d2c..b4806127a 100644 --- a/src/vs/workbench/browser/parts/dialogs/dialog.web.contribution.ts +++ b/src/vs/workbench/browser/parts/dialogs/dialog.web.contribution.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IDialogHandler, IDialogResult, IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions'; -import { IDialogsModel, IDialogViewItem } from 'vs/workbench/common/dialogs'; -import { BrowserDialogHandler } from 'vs/workbench/browser/parts/dialogs/dialogHandler'; -import { DialogService } from 'vs/workbench/services/dialogs/common/dialogService'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Lazy } from 'vs/base/common/lazy'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { IDialogHandler, IDialogResult, IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ILayoutService } from '../../../../platform/layout/browser/layoutService.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IProductService } from '../../../../platform/product/common/productService.js'; +import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; +import { IDialogsModel, IDialogViewItem } from '../../../common/dialogs.js'; +import { BrowserDialogHandler } from './dialogHandler.js'; +import { DialogService } from '../../../services/dialogs/common/dialogService.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { Lazy } from '../../../../base/common/lazy.js'; export class DialogHandlerContribution extends Disposable implements IWorkbenchContribution { diff --git a/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts b/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts index c064ebced..21f62b646 100644 --- a/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +++ b/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts @@ -3,23 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { IConfirmation, IConfirmationResult, IInputResult, ICheckbox, IInputElement, ICustomDialogOptions, IInput, AbstractDialogHandler, DialogType, IPrompt, IAsyncPromptResult } from 'vs/platform/dialogs/common/dialogs'; -import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; -import { ILogService } from 'vs/platform/log/common/log'; -import Severity from 'vs/base/common/severity'; -import { Dialog, IDialogResult } from 'vs/base/browser/ui/dialog/dialog'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { EventHelper } from 'vs/base/browser/dom'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { fromNow } from 'vs/base/common/date'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { defaultButtonStyles, defaultCheckboxStyles, defaultDialogStyles, defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; +import { localize } from '../../../../nls.js'; +import { IConfirmation, IConfirmationResult, IInputResult, ICheckbox, IInputElement, ICustomDialogOptions, IInput, AbstractDialogHandler, DialogType, IPrompt, IAsyncPromptResult } from '../../../../platform/dialogs/common/dialogs.js'; +import { ILayoutService } from '../../../../platform/layout/browser/layoutService.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import Severity from '../../../../base/common/severity.js'; +import { Dialog, IDialogResult } from '../../../../base/browser/ui/dialog/dialog.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { EventHelper } from '../../../../base/browser/dom.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { IProductService } from '../../../../platform/product/common/productService.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { fromNow } from '../../../../base/common/date.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { MarkdownRenderer } from '../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js'; +import { defaultButtonStyles, defaultCheckboxStyles, defaultDialogStyles, defaultInputBoxStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { ResultKind } from '../../../../platform/keybinding/common/keybindingResolver.js'; export class BrowserDialogHandler extends AbstractDialogHandler { diff --git a/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts b/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts index 279fc5713..7122370c7 100644 --- a/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts +++ b/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { onDidChangeFullscreen } from 'vs/base/browser/browser'; -import { hide, show } from 'vs/base/browser/dom'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { isNative } from 'vs/base/common/platform'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { hasCustomTitlebar } from 'vs/platform/window/common/window'; -import { IEditorGroupView, IEditorPartsView } from 'vs/workbench/browser/parts/editor/editor'; -import { EditorPart, IEditorPartUIState } from 'vs/workbench/browser/parts/editor/editorPart'; -import { IAuxiliaryTitlebarPart } from 'vs/workbench/browser/parts/titlebar/titlebarPart'; -import { WindowTitle } from 'vs/workbench/browser/parts/titlebar/windowTitle'; -import { IAuxiliaryWindowOpenOptions, IAuxiliaryWindowService } from 'vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService'; -import { GroupDirection, GroupsOrder, IAuxiliaryEditorPart } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IWorkbenchLayoutService, shouldShowCustomTitleBar } from 'vs/workbench/services/layout/browser/layoutService'; -import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IStatusbarService } from 'vs/workbench/services/statusbar/browser/statusbar'; -import { ITitleService } from 'vs/workbench/services/title/browser/titleService'; +import { onDidChangeFullscreen } from '../../../../base/browser/browser.js'; +import { hide, show } from '../../../../base/browser/dom.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { isNative } from '../../../../base/common/platform.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { hasCustomTitlebar } from '../../../../platform/window/common/window.js'; +import { IEditorGroupView, IEditorPartsView } from './editor.js'; +import { EditorPart, IEditorPartUIState } from './editorPart.js'; +import { IAuxiliaryTitlebarPart } from '../titlebar/titlebarPart.js'; +import { WindowTitle } from '../titlebar/windowTitle.js'; +import { IAuxiliaryWindowOpenOptions, IAuxiliaryWindowService } from '../../../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; +import { GroupDirection, GroupsOrder, IAuxiliaryEditorPart } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { IWorkbenchLayoutService, shouldShowCustomTitleBar } from '../../../services/layout/browser/layoutService.js'; +import { ILifecycleService } from '../../../services/lifecycle/common/lifecycle.js'; +import { IStatusbarService } from '../../../services/statusbar/browser/statusbar.js'; +import { ITitleService } from '../../../services/title/browser/titleService.js'; export interface IAuxiliaryEditorPartOpenOptions extends IAuxiliaryWindowOpenOptions { readonly state?: IEditorPartUIState; diff --git a/src/vs/workbench/browser/parts/editor/binaryDiffEditor.ts b/src/vs/workbench/browser/parts/editor/binaryDiffEditor.ts index f4314ae0d..894e4b51e 100644 --- a/src/vs/workbench/browser/parts/editor/binaryDiffEditor.ts +++ b/src/vs/workbench/browser/parts/editor/binaryDiffEditor.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { BINARY_DIFF_EDITOR_ID } from 'vs/workbench/common/editor'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { SideBySideEditor } from 'vs/workbench/browser/parts/editor/sideBySideEditor'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { BaseBinaryResourceEditor } from 'vs/workbench/browser/parts/editor/binaryEditor'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { localize } from '../../../../nls.js'; +import { BINARY_DIFF_EDITOR_ID } from '../../../common/editor.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { SideBySideEditor } from './sideBySideEditor.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { BaseBinaryResourceEditor } from './binaryEditor.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IEditorGroup, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; /** * An implementation of editor for diffing binary files like images or videos. diff --git a/src/vs/workbench/browser/parts/editor/binaryEditor.ts b/src/vs/workbench/browser/parts/editor/binaryEditor.ts index 52a019088..a1205e7aa 100644 --- a/src/vs/workbench/browser/parts/editor/binaryEditor.ts +++ b/src/vs/workbench/browser/parts/editor/binaryEditor.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Emitter } from 'vs/base/common/event'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ByteSize } from 'vs/platform/files/common/files'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { EditorPlaceholder, IEditorPlaceholderContents } from 'vs/workbench/browser/parts/editor/editorPlaceholder'; -import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; +import { localize } from '../../../../nls.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { BinaryEditorModel } from '../../../common/editor/binaryEditorModel.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { ByteSize } from '../../../../platform/files/common/files.js'; +import { IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { EditorPlaceholder, IEditorPlaceholderContents } from './editorPlaceholder.js'; +import { IEditorGroup } from '../../../services/editor/common/editorGroupsService.js'; export interface IOpenCallbacks { openInternal: (input: EditorInput, options: IEditorOptions | undefined) => Promise; diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbs.ts b/src/vs/workbench/browser/parts/editor/breadcrumbs.ts index 10046b04a..4e650d81e 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbs.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbs.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BreadcrumbsWidget } from 'vs/base/browser/ui/breadcrumbs/breadcrumbsWidget'; -import { Emitter, Event } from 'vs/base/common/event'; -import * as glob from 'vs/base/common/glob'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; -import { IConfigurationOverrides, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { Extensions, IConfigurationRegistry, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { GroupIdentifier, IEditorPartOptions } from 'vs/workbench/common/editor'; +import { BreadcrumbsWidget } from '../../../../base/browser/ui/breadcrumbs/breadcrumbsWidget.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import * as glob from '../../../../base/common/glob.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { localize } from '../../../../nls.js'; +import { IConfigurationOverrides, IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { Extensions, IConfigurationRegistry, ConfigurationScope } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { GroupIdentifier, IEditorPartOptions } from '../../../common/editor.js'; export const IBreadcrumbsService = createDecorator('IEditorBreadcrumbsService'); diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts index 6bba2fcc4..8fa44fe2e 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts @@ -3,44 +3,44 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { BreadcrumbsItem, BreadcrumbsWidget, IBreadcrumbsItemEvent, IBreadcrumbsWidgetStyles } from 'vs/base/browser/ui/breadcrumbs/breadcrumbsWidget'; -import { tail } from 'vs/base/common/arrays'; -import { timeout } from 'vs/base/common/async'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { combinedDisposable, DisposableStore, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { extUri } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./media/breadcrumbscontrol'; -import { localize, localize2 } from 'vs/nls'; -import { Action2, MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; -import { FileKind, IFileService, IFileStat } from 'vs/platform/files/common/files'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IListService, WorkbenchAsyncDataTree, WorkbenchDataTree, WorkbenchListFocusContextKey } from 'vs/platform/list/browser/listService'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { DEFAULT_LABELS_CONTAINER, ResourceLabels } from 'vs/workbench/browser/labels'; -import { BreadcrumbsConfig, IBreadcrumbsService } from 'vs/workbench/browser/parts/editor/breadcrumbs'; -import { BreadcrumbsModel, FileElement, OutlineElement2 } from 'vs/workbench/browser/parts/editor/breadcrumbsModel'; -import { BreadcrumbsFilePicker, BreadcrumbsOutlinePicker, BreadcrumbsPicker } from 'vs/workbench/browser/parts/editor/breadcrumbsPicker'; -import { IEditorPartOptions, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; -import { ACTIVE_GROUP, ACTIVE_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorGroupView } from 'vs/workbench/browser/parts/editor/editor'; -import { PixelRatio } from 'vs/base/browser/pixelRatio'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { IOutline } from 'vs/workbench/services/outline/browser/outline'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { Codicon } from 'vs/base/common/codicons'; -import { defaultBreadcrumbsWidgetStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { Emitter } from 'vs/base/common/event'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; +import * as dom from '../../../../base/browser/dom.js'; +import { StandardMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { BreadcrumbsItem, BreadcrumbsWidget, IBreadcrumbsItemEvent, IBreadcrumbsWidgetStyles } from '../../../../base/browser/ui/breadcrumbs/breadcrumbsWidget.js'; +import { tail } from '../../../../base/common/arrays.js'; +import { timeout } from '../../../../base/common/async.js'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { combinedDisposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { extUri } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import './media/breadcrumbscontrol.css'; +import { localize, localize2 } from '../../../../nls.js'; +import { Action2, MenuId, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextViewService } from '../../../../platform/contextview/browser/contextView.js'; +import { FileKind, IFileService, IFileStat } from '../../../../platform/files/common/files.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IListService, WorkbenchAsyncDataTree, WorkbenchDataTree, WorkbenchListFocusContextKey } from '../../../../platform/list/browser/listService.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { DEFAULT_LABELS_CONTAINER, ResourceLabels } from '../../labels.js'; +import { BreadcrumbsConfig, IBreadcrumbsService } from './breadcrumbs.js'; +import { BreadcrumbsModel, FileElement, OutlineElement2 } from './breadcrumbsModel.js'; +import { BreadcrumbsFilePicker, BreadcrumbsOutlinePicker, BreadcrumbsPicker } from './breadcrumbsPicker.js'; +import { IEditorPartOptions, EditorResourceAccessor, SideBySideEditor } from '../../../common/editor.js'; +import { ACTIVE_GROUP, ACTIVE_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from '../../../services/editor/common/editorService.js'; +import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorGroupView } from './editor.js'; +import { PixelRatio } from '../../../../base/browser/pixelRatio.js'; +import { ILabelService } from '../../../../platform/label/common/label.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { IOutline } from '../../../services/outline/browser/outline.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { defaultBreadcrumbsWidgetStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { IHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegate.js'; +import { getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js'; class OutlineItem extends BreadcrumbsItem { diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts index 22f155f85..f49b2301e 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { DisposableStore, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { Schemas, matchesSomeScheme } from 'vs/base/common/network'; -import { dirname, isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { FileKind } from 'vs/platform/files/common/files'; -import { IWorkspaceContextService, IWorkspaceFolder, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs'; -import { IEditorPane } from 'vs/workbench/common/editor'; -import { IOutline, IOutlineService, OutlineTarget } from 'vs/workbench/services/outline/browser/outline'; +import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { DisposableStore, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { Schemas, matchesSomeScheme } from '../../../../base/common/network.js'; +import { dirname, isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { FileKind } from '../../../../platform/files/common/files.js'; +import { IWorkspaceContextService, IWorkspaceFolder, WorkbenchState } from '../../../../platform/workspace/common/workspace.js'; +import { BreadcrumbsConfig } from './breadcrumbs.js'; +import { IEditorPane } from '../../../common/editor.js'; +import { IOutline, IOutlineService, OutlineTarget } from '../../../services/outline/browser/outline.js'; export class FileElement { constructor( diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts index 13c2df311..6fd6bb2a0 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts @@ -3,34 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { compareFileNames } from 'vs/base/common/comparers'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; -import { createMatches, FuzzyScore } from 'vs/base/common/filters'; -import * as glob from 'vs/base/common/glob'; -import { IDisposable, DisposableStore, MutableDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { posix, relative } from 'vs/base/common/path'; -import { basename, dirname, isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import 'vs/css!./media/breadcrumbscontrol'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { FileKind, IFileService, IFileStat } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { WorkbenchDataTree, WorkbenchAsyncDataTree } from 'vs/platform/list/browser/listService'; -import { breadcrumbsPickerBackground, widgetBorder, widgetShadow } from 'vs/platform/theme/common/colorRegistry'; -import { isWorkspace, isWorkspaceFolder, IWorkspace, IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { ResourceLabels, IResourceLabel, DEFAULT_LABELS_CONTAINER } from 'vs/workbench/browser/labels'; -import { BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs'; -import { OutlineElement2, FileElement } from 'vs/workbench/browser/parts/editor/breadcrumbsModel'; -import { IAsyncDataSource, ITreeRenderer, ITreeNode, ITreeFilter, TreeVisibility, ITreeSorter } from 'vs/base/browser/ui/tree/tree'; -import { IIdentityProvider, IListVirtualDelegate, IKeyboardNavigationLabelProvider } from 'vs/base/browser/ui/list/list'; -import { IFileIconTheme, IThemeService } from 'vs/platform/theme/common/themeService'; -import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; -import { localize } from 'vs/nls'; -import { IOutline, IOutlineComparator } from 'vs/workbench/services/outline/browser/outline'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; +import { compareFileNames } from '../../../../base/common/comparers.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { createMatches, FuzzyScore } from '../../../../base/common/filters.js'; +import * as glob from '../../../../base/common/glob.js'; +import { IDisposable, DisposableStore, MutableDisposable, Disposable } from '../../../../base/common/lifecycle.js'; +import { posix, relative } from '../../../../base/common/path.js'; +import { basename, dirname, isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import './media/breadcrumbscontrol.css'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { FileKind, IFileService, IFileStat } from '../../../../platform/files/common/files.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { WorkbenchDataTree, WorkbenchAsyncDataTree } from '../../../../platform/list/browser/listService.js'; +import { breadcrumbsPickerBackground, widgetBorder, widgetShadow } from '../../../../platform/theme/common/colorRegistry.js'; +import { isWorkspace, isWorkspaceFolder, IWorkspace, IWorkspaceContextService, IWorkspaceFolder } from '../../../../platform/workspace/common/workspace.js'; +import { ResourceLabels, IResourceLabel, DEFAULT_LABELS_CONTAINER } from '../../labels.js'; +import { BreadcrumbsConfig } from './breadcrumbs.js'; +import { OutlineElement2, FileElement } from './breadcrumbsModel.js'; +import { IAsyncDataSource, ITreeRenderer, ITreeNode, ITreeFilter, TreeVisibility, ITreeSorter } from '../../../../base/browser/ui/tree/tree.js'; +import { IIdentityProvider, IListVirtualDelegate, IKeyboardNavigationLabelProvider } from '../../../../base/browser/ui/list/list.js'; +import { IFileIconTheme, IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { IListAccessibilityProvider } from '../../../../base/browser/ui/list/listWidget.js'; +import { localize } from '../../../../nls.js'; +import { IOutline, IOutlineComparator } from '../../../services/outline/browser/outline.js'; +import { IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IEditorService, SIDE_GROUP } from '../../../services/editor/common/editorService.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; interface ILayoutInfo { maxHeight: number; diff --git a/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts b/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts index 378552f35..dc3f83afe 100644 --- a/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts +++ b/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { localize, localize2 } from 'vs/nls'; -import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { TextDiffEditor } from 'vs/workbench/browser/parts/editor/textDiffEditor'; -import { ActiveCompareEditorCanSwapContext, TextCompareEditorActiveContext, TextCompareEditorVisibleContext } from 'vs/workbench/common/contextkeys'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { localize, localize2 } from '../../../../nls.js'; +import { MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { TextDiffEditor } from './textDiffEditor.js'; +import { ActiveCompareEditorCanSwapContext, TextCompareEditorActiveContext, TextCompareEditorVisibleContext } from '../../../common/contextkeys.js'; +import { DiffEditorInput } from '../../../common/editor/diffEditorInput.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; export const TOGGLE_DIFF_SIDE_BY_SIDE = 'toggle.diff.renderSideBySide'; export const GOTO_NEXT_CHANGE = 'workbench.action.compareEditor.nextChange'; diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index 753f4aa88..1c777faac 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Registry } from 'vs/platform/registry/common/platform'; -import { localize, localize2 } from 'vs/nls'; -import { IEditorPaneRegistry, EditorPaneDescriptor } from 'vs/workbench/browser/editor'; -import { IEditorFactoryRegistry, EditorExtensions } from 'vs/workbench/common/editor'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { localize, localize2 } from '../../../../nls.js'; +import { IEditorPaneRegistry, EditorPaneDescriptor } from '../../editor.js'; +import { IEditorFactoryRegistry, EditorExtensions } from '../../../common/editor.js'; import { TextCompareEditorActiveContext, ActiveEditorPinnedContext, EditorGroupEditorsCountContext, ActiveEditorStickyContext, ActiveEditorAvailableEditorIdsContext, EditorPartMultipleEditorGroupsContext, ActiveEditorDirtyContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, EditorTabsVisibleContext, ActiveEditorLastInGroupContext, EditorPartMaximizedEditorGroupContext, MultipleEditorGroupsContext, InEditorZenModeContext, IsAuxiliaryEditorPartContext, ActiveCompareEditorCanSwapContext, MultipleEditorsSelectedInGroupContext -} from 'vs/workbench/common/contextkeys'; -import { SideBySideEditorInput, SideBySideEditorInputSerializer } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { TextResourceEditor } from 'vs/workbench/browser/parts/editor/textResourceEditor'; -import { SideBySideEditor } from 'vs/workbench/browser/parts/editor/sideBySideEditor'; -import { DiffEditorInput, DiffEditorInputSerializer } from 'vs/workbench/common/editor/diffEditorInput'; -import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput'; -import { TextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; -import { TextDiffEditor } from 'vs/workbench/browser/parts/editor/textDiffEditor'; -import { BinaryResourceDiffEditor } from 'vs/workbench/browser/parts/editor/binaryDiffEditor'; -import { ChangeEncodingAction, ChangeEOLAction, ChangeLanguageAction, EditorStatusContribution } from 'vs/workbench/browser/parts/editor/editorStatus'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { MenuRegistry, MenuId, IMenuItem, registerAction2 } from 'vs/platform/actions/common/actions'; -import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; +} from '../../../common/contextkeys.js'; +import { SideBySideEditorInput, SideBySideEditorInputSerializer } from '../../../common/editor/sideBySideEditorInput.js'; +import { TextResourceEditor } from './textResourceEditor.js'; +import { SideBySideEditor } from './sideBySideEditor.js'; +import { DiffEditorInput, DiffEditorInputSerializer } from '../../../common/editor/diffEditorInput.js'; +import { UntitledTextEditorInput } from '../../../services/untitled/common/untitledTextEditorInput.js'; +import { TextResourceEditorInput } from '../../../common/editor/textResourceEditorInput.js'; +import { TextDiffEditor } from './textDiffEditor.js'; +import { BinaryResourceDiffEditor } from './binaryDiffEditor.js'; +import { ChangeEncodingAction, ChangeEOLAction, ChangeLanguageAction, EditorStatusContribution } from './editorStatus.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { MenuRegistry, MenuId, IMenuItem, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js'; import { CloseEditorsInOtherGroupsAction, CloseAllEditorsAction, MoveGroupLeftAction, MoveGroupRightAction, SplitEditorAction, JoinTwoGroupsAction, RevertAndCloseEditorAction, NavigateBetweenGroupsAction, FocusActiveGroupAction, FocusFirstGroupAction, ResetGroupSizesAction, MinimizeOtherGroupsAction, FocusPreviousGroup, FocusNextGroup, @@ -44,7 +44,7 @@ import { NavigateBackwardsInEditsAction, NavigateForwardInNavigationsAction, NavigateBackwardsInNavigationsAction, NavigatePreviousInNavigationsAction, NavigatePreviousInEditsAction, NavigateToLastNavigationLocationAction, MaximizeGroupHideSidebarAction, MoveEditorToNewWindowAction, CopyEditorToNewindowAction, RestoreEditorsToMainWindowAction, ToggleMaximizeEditorGroupAction, MinimizeOtherGroupsHideSidebarAction, CopyEditorGroupToNewWindowAction, MoveEditorGroupToNewWindowAction, NewEmptyEditorWindowAction -} from 'vs/workbench/browser/parts/editor/editorActions'; +} from './editorActions.js'; import { CLOSE_EDITORS_AND_GROUP_COMMAND_ID, CLOSE_EDITORS_IN_GROUP_COMMAND_ID, CLOSE_EDITORS_TO_THE_RIGHT_COMMAND_ID, CLOSE_EDITOR_COMMAND_ID, CLOSE_EDITOR_GROUP_COMMAND_ID, CLOSE_OTHER_EDITORS_IN_GROUP_COMMAND_ID, CLOSE_PINNED_EDITOR_COMMAND_ID, CLOSE_SAVED_EDITORS_COMMAND_ID, KEEP_EDITOR_COMMAND_ID, PIN_EDITOR_COMMAND_ID, SHOW_EDITORS_IN_GROUP, SPLIT_EDITOR_DOWN, SPLIT_EDITOR_LEFT, @@ -52,26 +52,26 @@ import { TOGGLE_LOCK_GROUP_COMMAND_ID, UNLOCK_GROUP_COMMAND_ID, SPLIT_EDITOR_IN_GROUP, JOIN_EDITOR_IN_GROUP, FOCUS_FIRST_SIDE_EDITOR, FOCUS_SECOND_SIDE_EDITOR, TOGGLE_SPLIT_EDITOR_IN_GROUP_LAYOUT, LOCK_GROUP_COMMAND_ID, SPLIT_EDITOR, TOGGLE_MAXIMIZE_EDITOR_GROUP, MOVE_EDITOR_INTO_NEW_WINDOW_COMMAND_ID, COPY_EDITOR_INTO_NEW_WINDOW_COMMAND_ID, MOVE_EDITOR_GROUP_INTO_NEW_WINDOW_COMMAND_ID, COPY_EDITOR_GROUP_INTO_NEW_WINDOW_COMMAND_ID, NEW_EMPTY_EDITOR_WINDOW_COMMAND_ID -} from 'vs/workbench/browser/parts/editor/editorCommands'; -import { GOTO_NEXT_CHANGE, GOTO_PREVIOUS_CHANGE, TOGGLE_DIFF_IGNORE_TRIM_WHITESPACE, TOGGLE_DIFF_SIDE_BY_SIDE, DIFF_SWAP_SIDES } from './diffEditorCommands'; -import { inQuickPickContext, getQuickNavigateHandler } from 'vs/workbench/browser/quickaccess'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ContextKeyExpr, ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; -import { isMacintosh } from 'vs/base/common/platform'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { FloatingEditorClickMenu } from 'vs/workbench/browser/codeeditor'; -import { WorkbenchPhase, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions'; -import { EditorAutoSave } from 'vs/workbench/browser/parts/editor/editorAutoSave'; -import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from 'vs/platform/quickinput/common/quickAccess'; -import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess, AllEditorsByMostRecentlyUsedQuickAccess } from 'vs/workbench/browser/parts/editor/editorQuickAccess'; -import { FileAccess } from 'vs/base/common/network'; -import { Codicon } from 'vs/base/common/codicons'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { UntitledTextEditorInputSerializer, UntitledTextEditorWorkingCopyEditorHandler } from 'vs/workbench/services/untitled/common/untitledTextEditorHandler'; -import { DynamicEditorConfigurations } from 'vs/workbench/browser/parts/editor/editorConfiguration'; -import { ConfigureEditorAction, ConfigureEditorTabsAction, EditorActionsDefaultAction, EditorActionsTitleBarAction, HideEditorActionsAction, HideEditorTabsAction, ShowMultipleEditorTabsAction, ShowSingleEditorTabAction, ZenHideEditorTabsAction, ZenShowMultipleEditorTabsAction, ZenShowSingleEditorTabAction } from 'vs/workbench/browser/actions/layoutActions'; -import { ICommandAction } from 'vs/platform/action/common/action'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +} from './editorCommands.js'; +import { GOTO_NEXT_CHANGE, GOTO_PREVIOUS_CHANGE, TOGGLE_DIFF_IGNORE_TRIM_WHITESPACE, TOGGLE_DIFF_SIDE_BY_SIDE, DIFF_SWAP_SIDES } from './diffEditorCommands.js'; +import { inQuickPickContext, getQuickNavigateHandler } from '../../quickaccess.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ContextKeyExpr, ContextKeyExpression } from '../../../../platform/contextkey/common/contextkey.js'; +import { isMacintosh } from '../../../../base/common/platform.js'; +import { EditorContributionInstantiation, registerEditorContribution } from '../../../../editor/browser/editorExtensions.js'; +import { FloatingEditorClickMenu } from '../../codeeditor.js'; +import { WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; +import { EditorAutoSave } from './editorAutoSave.js'; +import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from '../../../../platform/quickinput/common/quickAccess.js'; +import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess, AllEditorsByMostRecentlyUsedQuickAccess } from './editorQuickAccess.js'; +import { FileAccess } from '../../../../base/common/network.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { UntitledTextEditorInputSerializer, UntitledTextEditorWorkingCopyEditorHandler } from '../../../services/untitled/common/untitledTextEditorHandler.js'; +import { DynamicEditorConfigurations } from './editorConfiguration.js'; +import { ConfigureEditorAction, ConfigureEditorTabsAction, EditorActionsDefaultAction, EditorActionsTitleBarAction, HideEditorActionsAction, HideEditorTabsAction, ShowMultipleEditorTabsAction, ShowSingleEditorTabAction, ZenHideEditorTabsAction, ZenShowMultipleEditorTabsAction, ZenShowSingleEditorTabAction } from '../../actions/layoutActions.js'; +import { ICommandAction } from '../../../../platform/action/common/action.js'; +import { EditorContextKeys } from '../../../../editor/common/editorContextKeys.js'; //#region Editor Registrations diff --git a/src/vs/workbench/browser/parts/editor/editor.ts b/src/vs/workbench/browser/parts/editor/editor.ts index 066385368..d6f477d64 100644 --- a/src/vs/workbench/browser/parts/editor/editor.ts +++ b/src/vs/workbench/browser/parts/editor/editor.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { GroupIdentifier, IWorkbenchEditorConfiguration, IEditorIdentifier, IEditorCloseEvent, IEditorPartOptions, IEditorPartOptionsChangeEvent, SideBySideEditor, EditorCloseContext, IEditorPane, IEditorPartLimitOptions, IEditorPartDecorationOptions, IEditorWillOpenEvent } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { IEditorGroup, GroupDirection, IMergeGroupOptions, GroupsOrder, GroupsArrangement, IAuxiliaryEditorPart, IEditorPart } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Dimension } from 'vs/base/browser/dom'; -import { Event } from 'vs/base/common/event'; -import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ISerializableView } from 'vs/base/browser/ui/grid/grid'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { isObject } from 'vs/base/common/types'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IWindowsConfiguration } from 'vs/platform/window/common/window'; -import { BooleanVerifier, EnumVerifier, NumberVerifier, ObjectVerifier, SetVerifier, verifyObject } from 'vs/base/common/verifier'; -import { IAuxiliaryWindowOpenOptions } from 'vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService'; -import { ContextKeyValue, IContextKey, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { GroupIdentifier, IWorkbenchEditorConfiguration, IEditorIdentifier, IEditorCloseEvent, IEditorPartOptions, IEditorPartOptionsChangeEvent, SideBySideEditor, EditorCloseContext, IEditorPane, IEditorPartLimitOptions, IEditorPartDecorationOptions, IEditorWillOpenEvent } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { IEditorGroup, GroupDirection, IMergeGroupOptions, GroupsOrder, GroupsArrangement, IAuxiliaryEditorPart, IEditorPart } from '../../../services/editor/common/editorGroupsService.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { Dimension } from '../../../../base/browser/dom.js'; +import { Event } from '../../../../base/common/event.js'; +import { IConfigurationChangeEvent, IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { ISerializableView } from '../../../../base/browser/ui/grid/grid.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { isObject } from '../../../../base/common/types.js'; +import { IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IWindowsConfiguration } from '../../../../platform/window/common/window.js'; +import { BooleanVerifier, EnumVerifier, NumberVerifier, ObjectVerifier, SetVerifier, verifyObject } from '../../../../base/common/verifier.js'; +import { IAuxiliaryWindowOpenOptions } from '../../../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; +import { ContextKeyValue, IContextKey, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; export interface IEditorPartCreationOptions { readonly restorePreviousState: boolean; diff --git a/src/vs/workbench/browser/parts/editor/editorActions.ts b/src/vs/workbench/browser/parts/editor/editorActions.ts index 3293be1a2..1b1a39b30 100644 --- a/src/vs/workbench/browser/parts/editor/editorActions.ts +++ b/src/vs/workbench/browser/parts/editor/editorActions.ts @@ -3,42 +3,41 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize, localize2 } from 'vs/nls'; -import { Action } from 'vs/base/common/actions'; -import { firstOrDefault } from 'vs/base/common/arrays'; -import { IEditorIdentifier, IEditorCommandsContext, CloseDirection, SaveReason, EditorsOrder, EditorInputCapabilities, DEFAULT_EDITOR_ASSOCIATION, GroupIdentifier, EditorResourceAccessor } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { GoFilter, IHistoryService } from 'vs/workbench/services/history/common/history'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { CLOSE_EDITOR_COMMAND_ID, MOVE_ACTIVE_EDITOR_COMMAND_ID, ActiveEditorMoveCopyArguments, SPLIT_EDITOR_LEFT, SPLIT_EDITOR_RIGHT, SPLIT_EDITOR_UP, SPLIT_EDITOR_DOWN, splitEditor, LAYOUT_EDITOR_GROUPS_COMMAND_ID, UNPIN_EDITOR_COMMAND_ID, COPY_ACTIVE_EDITOR_COMMAND_ID, SPLIT_EDITOR, TOGGLE_MAXIMIZE_EDITOR_GROUP, MOVE_EDITOR_INTO_NEW_WINDOW_COMMAND_ID, COPY_EDITOR_INTO_NEW_WINDOW_COMMAND_ID, MOVE_EDITOR_GROUP_INTO_NEW_WINDOW_COMMAND_ID, COPY_EDITOR_GROUP_INTO_NEW_WINDOW_COMMAND_ID, NEW_EMPTY_EDITOR_WINDOW_COMMAND_ID as NEW_EMPTY_EDITOR_WINDOW_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; -import { IEditorGroupsService, IEditorGroup, GroupsArrangement, GroupLocation, GroupDirection, preferredSideBySideGroupDirection, IFindGroupScope, GroupOrientation, EditorGroupLayout, GroupsOrder, MergeGroupMode } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { IFileDialogService, ConfirmResult, IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { ItemActivation, IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { AllEditorsByMostRecentlyUsedQuickAccess, ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess } from 'vs/workbench/browser/parts/editor/editorQuickAccess'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; -import { isLinux, isNative, isWindows } from 'vs/base/common/platform'; -import { Action2, IAction2Options, MenuId } from 'vs/platform/actions/common/actions'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { IKeybindingRule, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { ILogService } from 'vs/platform/log/common/log'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { ActiveEditorAvailableEditorIdsContext, ActiveEditorContext, ActiveEditorGroupEmptyContext, AuxiliaryBarVisibleContext, EditorPartMaximizedEditorGroupContext, EditorPartMultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext, MultipleEditorGroupsContext, SideBarVisibleContext } from 'vs/workbench/common/contextkeys'; -import { getActiveDocument } from 'vs/base/browser/dom'; -import { ICommandActionTitle } from 'vs/platform/action/common/action'; -import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; -import { resolveCommandsContext } from 'vs/workbench/browser/parts/editor/editorCommandsContext'; -import { IListService } from 'vs/platform/list/browser/listService'; +import { localize, localize2 } from '../../../../nls.js'; +import { Action } from '../../../../base/common/actions.js'; +import { IEditorIdentifier, IEditorCommandsContext, CloseDirection, SaveReason, EditorsOrder, EditorInputCapabilities, DEFAULT_EDITOR_ASSOCIATION, GroupIdentifier, EditorResourceAccessor } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; +import { GoFilter, IHistoryService } from '../../../services/history/common/history.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { CLOSE_EDITOR_COMMAND_ID, MOVE_ACTIVE_EDITOR_COMMAND_ID, ActiveEditorMoveCopyArguments, SPLIT_EDITOR_LEFT, SPLIT_EDITOR_RIGHT, SPLIT_EDITOR_UP, SPLIT_EDITOR_DOWN, splitEditor, LAYOUT_EDITOR_GROUPS_COMMAND_ID, UNPIN_EDITOR_COMMAND_ID, COPY_ACTIVE_EDITOR_COMMAND_ID, SPLIT_EDITOR, TOGGLE_MAXIMIZE_EDITOR_GROUP, MOVE_EDITOR_INTO_NEW_WINDOW_COMMAND_ID, COPY_EDITOR_INTO_NEW_WINDOW_COMMAND_ID, MOVE_EDITOR_GROUP_INTO_NEW_WINDOW_COMMAND_ID, COPY_EDITOR_GROUP_INTO_NEW_WINDOW_COMMAND_ID, NEW_EMPTY_EDITOR_WINDOW_COMMAND_ID as NEW_EMPTY_EDITOR_WINDOW_COMMAND_ID } from './editorCommands.js'; +import { IEditorGroupsService, IEditorGroup, GroupsArrangement, GroupLocation, GroupDirection, preferredSideBySideGroupDirection, IFindGroupScope, GroupOrientation, EditorGroupLayout, GroupsOrder, MergeGroupMode } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IWorkspacesService } from '../../../../platform/workspaces/common/workspaces.js'; +import { IFileDialogService, ConfirmResult, IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { ItemActivation, IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { AllEditorsByMostRecentlyUsedQuickAccess, ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess } from './editorQuickAccess.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { IFilesConfigurationService, AutoSaveMode } from '../../../services/filesConfiguration/common/filesConfigurationService.js'; +import { IEditorResolverService } from '../../../services/editor/common/editorResolverService.js'; +import { isLinux, isNative, isWindows } from '../../../../base/common/platform.js'; +import { Action2, IAction2Options, MenuId } from '../../../../platform/actions/common/actions.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { IKeybindingRule, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { ActiveEditorAvailableEditorIdsContext, ActiveEditorContext, ActiveEditorGroupEmptyContext, AuxiliaryBarVisibleContext, EditorPartMaximizedEditorGroupContext, EditorPartMultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext, MultipleEditorGroupsContext, SideBarVisibleContext } from '../../../common/contextkeys.js'; +import { getActiveDocument } from '../../../../base/browser/dom.js'; +import { ICommandActionTitle } from '../../../../platform/action/common/action.js'; +import { IProgressService, ProgressLocation } from '../../../../platform/progress/common/progress.js'; +import { resolveCommandsContext } from './editorCommandsContext.js'; +import { IListService } from '../../../../platform/list/browser/listService.js'; class ExecuteCommandAction extends Action2 { @@ -656,7 +655,7 @@ abstract class AbstractCloseAllAction extends Action2 { await this.revealEditorsToConfirm(editors, editorGroupService); // help user make a decision by revealing editors - const confirmation = await firstOrDefault(editors)?.editor.closeHandler?.confirm?.(editors); + const confirmation = await editors.at(0)?.editor.closeHandler?.confirm?.(editors); if (typeof confirmation === 'number') { switch (confirmation) { case ConfirmResult.CANCEL: diff --git a/src/vs/workbench/browser/parts/editor/editorAutoSave.ts b/src/vs/workbench/browser/parts/editor/editorAutoSave.ts index 32f66e1d8..a76981541 100644 --- a/src/vs/workbench/browser/parts/editor/editorAutoSave.ts +++ b/src/vs/workbench/browser/parts/editor/editorAutoSave.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { Disposable, DisposableStore, IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle'; -import { IFilesConfigurationService, AutoSaveMode, AutoSaveDisabledReason } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { SaveReason, IEditorIdentifier, GroupIdentifier, EditorInputCapabilities } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { IWorkingCopy, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { URI } from 'vs/base/common/uri'; -import { ResourceMap } from 'vs/base/common/map'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { IWorkbenchContribution } from '../../../common/contributions.js'; +import { Disposable, DisposableStore, IDisposable, dispose, toDisposable } from '../../../../base/common/lifecycle.js'; +import { IFilesConfigurationService, AutoSaveMode, AutoSaveDisabledReason } from '../../../services/filesConfiguration/common/filesConfigurationService.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { SaveReason, IEditorIdentifier, GroupIdentifier, EditorInputCapabilities } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IWorkingCopyService } from '../../../services/workingCopy/common/workingCopyService.js'; +import { IWorkingCopy, WorkingCopyCapabilities } from '../../../services/workingCopy/common/workingCopy.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IMarkerService } from '../../../../platform/markers/common/markers.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ResourceMap } from '../../../../base/common/map.js'; +import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; export class EditorAutoSave extends Disposable implements IWorkbenchContribution { diff --git a/src/vs/workbench/browser/parts/editor/editorCommands.ts b/src/vs/workbench/browser/parts/editor/editorCommands.ts index 10405ef3d..6dda6ad53 100644 --- a/src/vs/workbench/browser/parts/editor/editorCommands.ts +++ b/src/vs/workbench/browser/parts/editor/editorCommands.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Schemas, matchesScheme } from 'vs/base/common/network'; -import { extname } from 'vs/base/common/resources'; -import { isNumber, isObject, isString, isUndefined } from 'vs/base/common/types'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { isDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { localize, localize2 } from 'vs/nls'; -import { Categories } from 'vs/platform/action/common/actionCommonCategories'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { CommandsRegistry, ICommandHandler, ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { EditorResolution, IEditorOptions, IResourceEditorInput, ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IListService, IOpenEvent } from 'vs/platform/list/browser/listService'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess } from 'vs/workbench/browser/parts/editor/editorQuickAccess'; -import { SideBySideEditor } from 'vs/workbench/browser/parts/editor/sideBySideEditor'; -import { TextDiffEditor } from 'vs/workbench/browser/parts/editor/textDiffEditor'; -import { ActiveEditorCanSplitInGroupContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupLockedContext, ActiveEditorStickyContext, MultipleEditorGroupsContext, SideBySideEditorActiveContext, TextCompareEditorActiveContext } from 'vs/workbench/common/contextkeys'; -import { CloseDirection, EditorInputCapabilities, EditorsOrder, IResourceDiffEditorInput, IUntitledTextResourceEditorInput, IVisibleEditorPane, isEditorInputWithOptionsAndGroup } from 'vs/workbench/common/editor'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { EditorGroupColumn, columnToEditorGroup } from 'vs/workbench/services/editor/common/editorGroupColumn'; -import { EditorGroupLayout, GroupDirection, GroupLocation, GroupsOrder, IEditorGroup, IEditorGroupsService, IEditorReplacement, preferredSideBySideGroupDirection } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; -import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService'; -import { DIFF_FOCUS_OTHER_SIDE, DIFF_FOCUS_PRIMARY_SIDE, DIFF_FOCUS_SECONDARY_SIDE, DIFF_OPEN_SIDE, registerDiffEditorCommands } from './diffEditorCommands'; -import { IResolvedEditorCommandsContext, resolveCommandsContext } from 'vs/workbench/browser/parts/editor/editorCommandsContext'; +import { IJSONSchema } from '../../../../base/common/jsonSchema.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { Schemas, matchesScheme } from '../../../../base/common/network.js'; +import { extname } from '../../../../base/common/resources.js'; +import { isNumber, isObject, isString, isUndefined } from '../../../../base/common/types.js'; +import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { isDiffEditor } from '../../../../editor/browser/editorBrowser.js'; +import { EditorContextKeys } from '../../../../editor/common/editorContextKeys.js'; +import { localize, localize2 } from '../../../../nls.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; +import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { CommandsRegistry, ICommandHandler, ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { EditorResolution, IEditorOptions, IResourceEditorInput, ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { KeybindingWeight, KeybindingsRegistry } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { IListService, IOpenEvent } from '../../../../platform/list/browser/listService.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess } from './editorQuickAccess.js'; +import { SideBySideEditor } from './sideBySideEditor.js'; +import { TextDiffEditor } from './textDiffEditor.js'; +import { ActiveEditorCanSplitInGroupContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupLockedContext, ActiveEditorStickyContext, MultipleEditorGroupsContext, SideBySideEditorActiveContext, TextCompareEditorActiveContext } from '../../../common/contextkeys.js'; +import { CloseDirection, EditorInputCapabilities, EditorsOrder, IResourceDiffEditorInput, IUntitledTextResourceEditorInput, IVisibleEditorPane, isEditorInputWithOptionsAndGroup } from '../../../common/editor.js'; +import { DiffEditorInput } from '../../../common/editor/diffEditorInput.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { EditorGroupColumn, columnToEditorGroup } from '../../../services/editor/common/editorGroupColumn.js'; +import { EditorGroupLayout, GroupDirection, GroupLocation, GroupsOrder, IEditorGroup, IEditorGroupsService, IEditorReplacement, preferredSideBySideGroupDirection } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorResolverService } from '../../../services/editor/common/editorResolverService.js'; +import { IEditorService, SIDE_GROUP } from '../../../services/editor/common/editorService.js'; +import { IPathService } from '../../../services/path/common/pathService.js'; +import { IUntitledTextEditorService } from '../../../services/untitled/common/untitledTextEditorService.js'; +import { DIFF_FOCUS_OTHER_SIDE, DIFF_FOCUS_PRIMARY_SIDE, DIFF_FOCUS_SECONDARY_SIDE, DIFF_OPEN_SIDE, registerDiffEditorCommands } from './diffEditorCommands.js'; +import { IResolvedEditorCommandsContext, resolveCommandsContext } from './editorCommandsContext.js'; export const CLOSE_SAVED_EDITORS_COMMAND_ID = 'workbench.action.closeUnmodifiedEditors'; export const CLOSE_EDITORS_IN_GROUP_COMMAND_ID = 'workbench.action.closeEditorsInGroup'; diff --git a/src/vs/workbench/browser/parts/editor/editorCommandsContext.ts b/src/vs/workbench/browser/parts/editor/editorCommandsContext.ts index b9fea217e..1fec47d1c 100644 --- a/src/vs/workbench/browser/parts/editor/editorCommandsContext.ts +++ b/src/vs/workbench/browser/parts/editor/editorCommandsContext.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getActiveElement } from 'vs/base/browser/dom'; -import { List } from 'vs/base/browser/ui/list/listWidget'; -import { URI } from 'vs/base/common/uri'; -import { IListService } from 'vs/platform/list/browser/listService'; -import { IEditorCommandsContext, isEditorCommandsContext, IEditorIdentifier, isEditorIdentifier } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { IEditorGroup, IEditorGroupsService, isEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { getActiveElement } from '../../../../base/browser/dom.js'; +import { List } from '../../../../base/browser/ui/list/listWidget.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IListService } from '../../../../platform/list/browser/listService.js'; +import { IEditorCommandsContext, isEditorCommandsContext, IEditorIdentifier, isEditorIdentifier } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { IEditorGroup, IEditorGroupsService, isEditorGroup } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; export interface IResolvedEditorCommandsContext { readonly groupedEditors: { diff --git a/src/vs/workbench/browser/parts/editor/editorConfiguration.ts b/src/vs/workbench/browser/parts/editor/editorConfiguration.ts index 0df198dd6..c235e44ad 100644 --- a/src/vs/workbench/browser/parts/editor/editorConfiguration.ts +++ b/src/vs/workbench/browser/parts/editor/editorConfiguration.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions, IConfigurationNode, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; -import { IEditorResolverService, RegisteredEditorInfo, RegisteredEditorPriority } from 'vs/workbench/services/editor/common/editorResolverService'; -import { IJSONSchemaMap } from 'vs/base/common/jsonSchema'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { coalesce } from 'vs/base/common/arrays'; -import { Event } from 'vs/base/common/event'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { ByteSize, getLargeFileConfirmationLimit } from 'vs/platform/files/common/files'; +import { localize } from '../../../../nls.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IWorkbenchContribution } from '../../../common/contributions.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions, IConfigurationNode, ConfigurationScope } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { workbenchConfigurationNodeBase } from '../../../common/configuration.js'; +import { IEditorResolverService, RegisteredEditorInfo, RegisteredEditorPriority } from '../../../services/editor/common/editorResolverService.js'; +import { IJSONSchemaMap } from '../../../../base/common/jsonSchema.js'; +import { IExtensionService } from '../../../services/extensions/common/extensions.js'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { Event } from '../../../../base/common/event.js'; +import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; +import { ByteSize, getLargeFileConfirmationLimit } from '../../../../platform/files/common/files.js'; export class DynamicEditorConfigurations extends Disposable implements IWorkbenchContribution { diff --git a/src/vs/workbench/browser/parts/editor/editorDropTarget.ts b/src/vs/workbench/browser/parts/editor/editorDropTarget.ts index b11c66e60..ed286ff7f 100644 --- a/src/vs/workbench/browser/parts/editor/editorDropTarget.ts +++ b/src/vs/workbench/browser/parts/editor/editorDropTarget.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editordroptarget'; -import { DataTransfers } from 'vs/base/browser/dnd'; -import { addDisposableListener, DragAndDropObserver, EventHelper, EventType, getWindow, isAncestor } from 'vs/base/browser/dom'; -import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { isMacintosh, isWeb } from 'vs/base/common/platform'; -import { assertAllDefined, assertIsDefined } from 'vs/base/common/types'; -import { localize } from 'vs/nls'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { activeContrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { isTemporaryWorkspace, IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { CodeDataTransfers, containsDragType, Extensions as DragAndDropExtensions, IDragAndDropContributionRegistry, LocalSelectionTransfer } from 'vs/platform/dnd/browser/dnd'; -import { DraggedEditorGroupIdentifier, DraggedEditorIdentifier, extractTreeDropData, ResourcesDropHandler } from 'vs/workbench/browser/dnd'; -import { fillActiveEditorViewState, IEditorGroupView } from 'vs/workbench/browser/parts/editor/editor'; -import { EditorInputCapabilities, IEditorIdentifier, IUntypedEditorInput } from 'vs/workbench/common/editor'; -import { EDITOR_DRAG_AND_DROP_BACKGROUND, EDITOR_DROP_INTO_PROMPT_BACKGROUND, EDITOR_DROP_INTO_PROMPT_BORDER, EDITOR_DROP_INTO_PROMPT_FOREGROUND } from 'vs/workbench/common/theme'; -import { GroupDirection, IEditorDropTargetDelegate, IEditorGroup, IEditorGroupsService, IMergeGroupOptions, MergeGroupMode } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { ITreeViewsDnDService } from 'vs/editor/common/services/treeViewsDndService'; -import { DraggedTreeItemsIdentifier } from 'vs/editor/common/services/treeViewsDnd'; +import './media/editordroptarget.css'; +import { DataTransfers } from '../../../../base/browser/dnd.js'; +import { addDisposableListener, DragAndDropObserver, EventHelper, EventType, getWindow, isAncestor } from '../../../../base/browser/dom.js'; +import { renderFormattedText } from '../../../../base/browser/formattedTextRenderer.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { toDisposable } from '../../../../base/common/lifecycle.js'; +import { isMacintosh, isWeb } from '../../../../base/common/platform.js'; +import { assertAllDefined, assertIsDefined } from '../../../../base/common/types.js'; +import { localize } from '../../../../nls.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { activeContrastBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { IThemeService, Themable } from '../../../../platform/theme/common/themeService.js'; +import { isTemporaryWorkspace, IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; +import { CodeDataTransfers, containsDragType, Extensions as DragAndDropExtensions, IDragAndDropContributionRegistry, LocalSelectionTransfer } from '../../../../platform/dnd/browser/dnd.js'; +import { DraggedEditorGroupIdentifier, DraggedEditorIdentifier, extractTreeDropData, ResourcesDropHandler } from '../../dnd.js'; +import { fillActiveEditorViewState, IEditorGroupView } from './editor.js'; +import { EditorInputCapabilities, IEditorIdentifier, IUntypedEditorInput } from '../../../common/editor.js'; +import { EDITOR_DRAG_AND_DROP_BACKGROUND, EDITOR_DROP_INTO_PROMPT_BACKGROUND, EDITOR_DROP_INTO_PROMPT_BORDER, EDITOR_DROP_INTO_PROMPT_FOREGROUND } from '../../../common/theme.js'; +import { GroupDirection, IEditorDropTargetDelegate, IEditorGroup, IEditorGroupsService, IMergeGroupOptions, MergeGroupMode } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { ITreeViewsDnDService } from '../../../../editor/common/services/treeViewsDndService.js'; +import { DraggedTreeItemsIdentifier } from '../../../../editor/common/services/treeViewsDnd.js'; interface IDropOperation { splitDirection?: GroupDirection; diff --git a/src/vs/workbench/browser/parts/editor/editorGroupView.ts b/src/vs/workbench/browser/parts/editor/editorGroupView.ts index 41e4e3ccc..8e9756045 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupView.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupView.ts @@ -3,61 +3,61 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editorgroupview'; -import { EditorGroupModel, IEditorOpenOptions, IGroupModelChangeEvent, ISerializedEditorGroupModel, isGroupEditorCloseEvent, isGroupEditorOpenEvent, isSerializedEditorGroupModel } from 'vs/workbench/common/editor/editorGroupModel'; -import { GroupIdentifier, CloseDirection, IEditorCloseEvent, IEditorPane, SaveReason, IEditorPartOptionsChangeEvent, EditorsOrder, IVisibleEditorPane, EditorResourceAccessor, EditorInputCapabilities, IUntypedEditorInput, DEFAULT_EDITOR_ASSOCIATION, SideBySideEditor, EditorCloseContext, IEditorWillMoveEvent, IEditorWillOpenEvent, IMatchEditorOptions, GroupModelChangeKind, IActiveEditorChangeEvent, IFindEditorOptions, IToolbarActions, TEXT_DIFF_EDITOR_ID } from 'vs/workbench/common/editor'; -import { ActiveEditorGroupLockedContext, ActiveEditorDirtyContext, EditorGroupEditorsCountContext, ActiveEditorStickyContext, ActiveEditorPinnedContext, ActiveEditorLastInGroupContext, ActiveEditorFirstInGroupContext, ResourceContextKey, applyAvailableEditorIds, ActiveEditorAvailableEditorIdsContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorContext, ActiveEditorReadonlyContext, ActiveEditorCanRevertContext, ActiveEditorCanToggleReadonlyContext, ActiveCompareEditorCanSwapContext, MultipleEditorsSelectedInGroupContext, TwoEditorsSelectedInGroupContext, SelectedEditorsInGroupFileOrUntitledResourceContextKey } from 'vs/workbench/common/contextkeys'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { Emitter, Relay } from 'vs/base/common/event'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Dimension, trackFocus, addDisposableListener, EventType, EventHelper, findParentWithClass, isAncestor, IDomNodePagePosition, isMouseEvent, isActiveElement, getWindow, getActiveElement } from 'vs/base/browser/dom'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { editorBackground, contrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import { EDITOR_GROUP_HEADER_TABS_BACKGROUND, EDITOR_GROUP_HEADER_NO_TABS_BACKGROUND, EDITOR_GROUP_EMPTY_BACKGROUND, EDITOR_GROUP_HEADER_BORDER } from 'vs/workbench/common/theme'; -import { ICloseEditorsFilter, GroupsOrder, ICloseEditorOptions, ICloseAllEditorsOptions, IEditorReplacement, IActiveEditorActions } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { EditorPanes } from 'vs/workbench/browser/parts/editor/editorPanes'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { EditorProgressIndicator } from 'vs/workbench/services/progress/browser/progressIndicator'; -import { localize } from 'vs/nls'; -import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; -import { DisposableStore, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { DeferredPromise, Promises, RunOnceWorker } from 'vs/base/common/async'; -import { EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch'; -import { IEditorGroupsView, IEditorGroupView, fillActiveEditorViewState, EditorServiceImpl, IEditorGroupTitleHeight, IInternalEditorOpenOptions, IInternalMoveCopyOptions, IInternalEditorCloseOptions, IInternalEditorTitleControlOptions, IEditorPartsView, IEditorGroupViewOptions } from 'vs/workbench/browser/parts/editor/editor'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IAction, SubmenuAction } from 'vs/base/common/actions'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { hash } from 'vs/base/common/hash'; -import { getMimeTypes } from 'vs/editor/common/services/languagesAssociations'; -import { extname, isEqual } from 'vs/base/common/resources'; -import { Schemas } from 'vs/base/common/network'; -import { EditorActivation, IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IFileDialogService, ConfirmResult, IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { URI } from 'vs/base/common/uri'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { isLinux, isMacintosh, isNative, isWindows } from 'vs/base/common/platform'; -import { ILogService } from 'vs/platform/log/common/log'; -import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUtils'; -import { defaultProgressBarStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { EditorGroupWatermark } from 'vs/workbench/browser/parts/editor/editorGroupWatermark'; -import { EditorTitleControl } from 'vs/workbench/browser/parts/editor/editorTitleControl'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { FileSystemProviderCapabilities, IFileService } from 'vs/platform/files/common/files'; +import './media/editorgroupview.css'; +import { EditorGroupModel, IEditorOpenOptions, IGroupModelChangeEvent, ISerializedEditorGroupModel, isGroupEditorCloseEvent, isGroupEditorOpenEvent, isSerializedEditorGroupModel } from '../../../common/editor/editorGroupModel.js'; +import { GroupIdentifier, CloseDirection, IEditorCloseEvent, IEditorPane, SaveReason, IEditorPartOptionsChangeEvent, EditorsOrder, IVisibleEditorPane, EditorResourceAccessor, EditorInputCapabilities, IUntypedEditorInput, DEFAULT_EDITOR_ASSOCIATION, SideBySideEditor, EditorCloseContext, IEditorWillMoveEvent, IEditorWillOpenEvent, IMatchEditorOptions, GroupModelChangeKind, IActiveEditorChangeEvent, IFindEditorOptions, IToolbarActions, TEXT_DIFF_EDITOR_ID } from '../../../common/editor.js'; +import { ActiveEditorGroupLockedContext, ActiveEditorDirtyContext, EditorGroupEditorsCountContext, ActiveEditorStickyContext, ActiveEditorPinnedContext, ActiveEditorLastInGroupContext, ActiveEditorFirstInGroupContext, ResourceContextKey, applyAvailableEditorIds, ActiveEditorAvailableEditorIdsContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorContext, ActiveEditorReadonlyContext, ActiveEditorCanRevertContext, ActiveEditorCanToggleReadonlyContext, ActiveCompareEditorCanSwapContext, MultipleEditorsSelectedInGroupContext, TwoEditorsSelectedInGroupContext, SelectedEditorsInGroupFileOrUntitledResourceContextKey } from '../../../common/contextkeys.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { Emitter, Relay } from '../../../../base/common/event.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { Dimension, trackFocus, addDisposableListener, EventType, EventHelper, findParentWithClass, isAncestor, IDomNodePagePosition, isMouseEvent, isActiveElement, getWindow, getActiveElement } from '../../../../base/browser/dom.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { ProgressBar } from '../../../../base/browser/ui/progressbar/progressbar.js'; +import { IThemeService, Themable } from '../../../../platform/theme/common/themeService.js'; +import { editorBackground, contrastBorder } from '../../../../platform/theme/common/colorRegistry.js'; +import { EDITOR_GROUP_HEADER_TABS_BACKGROUND, EDITOR_GROUP_HEADER_NO_TABS_BACKGROUND, EDITOR_GROUP_EMPTY_BACKGROUND, EDITOR_GROUP_HEADER_BORDER } from '../../../common/theme.js'; +import { ICloseEditorsFilter, GroupsOrder, ICloseEditorOptions, ICloseAllEditorsOptions, IEditorReplacement, IActiveEditorActions } from '../../../services/editor/common/editorGroupsService.js'; +import { EditorPanes } from './editorPanes.js'; +import { IEditorProgressService } from '../../../../platform/progress/common/progress.js'; +import { EditorProgressIndicator } from '../../../services/progress/browser/progressIndicator.js'; +import { localize } from '../../../../nls.js'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { DisposableStore, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { DeferredPromise, Promises, RunOnceWorker } from '../../../../base/common/async.js'; +import { EventType as TouchEventType, GestureEvent } from '../../../../base/browser/touch.js'; +import { IEditorGroupsView, IEditorGroupView, fillActiveEditorViewState, EditorServiceImpl, IEditorGroupTitleHeight, IInternalEditorOpenOptions, IInternalMoveCopyOptions, IInternalEditorCloseOptions, IInternalEditorTitleControlOptions, IEditorPartsView, IEditorGroupViewOptions } from './editor.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { IAction, SubmenuAction } from '../../../../base/common/actions.js'; +import { IMenuService, MenuId } from '../../../../platform/actions/common/actions.js'; +import { StandardMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { createAndFillInActionBarActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { hash } from '../../../../base/common/hash.js'; +import { getMimeTypes } from '../../../../editor/common/services/languagesAssociations.js'; +import { extname, isEqual } from '../../../../base/common/resources.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { EditorActivation, IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IFileDialogService, ConfirmResult, IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { IFilesConfigurationService, AutoSaveMode } from '../../../services/filesConfiguration/common/filesConfigurationService.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; +import { isLinux, isMacintosh, isNative, isWindows } from '../../../../base/common/platform.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { TelemetryTrustedValue } from '../../../../platform/telemetry/common/telemetryUtils.js'; +import { defaultProgressBarStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; +import { EditorGroupWatermark } from './editorGroupWatermark.js'; +import { EditorTitleControl } from './editorTitleControl.js'; +import { EditorPane } from './editorPane.js'; +import { IEditorResolverService } from '../../../services/editor/common/editorResolverService.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { DiffEditorInput } from '../../../common/editor/diffEditorInput.js'; +import { FileSystemProviderCapabilities, IFileService } from '../../../../platform/files/common/files.js'; export class EditorGroupView extends Themable implements IEditorGroupView { @@ -1324,7 +1324,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { const editorsToOpen = coalesce(editors).filter(({ editor }) => !editor.isDisposed()); // Use the first editor as active editor - const firstEditor = firstOrDefault(editorsToOpen); + const firstEditor = editorsToOpen.at(0); if (!firstEditor) { return; } diff --git a/src/vs/workbench/browser/parts/editor/editorGroupWatermark.ts b/src/vs/workbench/browser/parts/editor/editorGroupWatermark.ts index c9ac110bc..db8ede5ff 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupWatermark.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupWatermark.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { isMacintosh, isWeb, OS } from 'vs/base/common/platform'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { append, clearNode, $, h } from 'vs/base/browser/dom'; -import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { defaultKeybindingLabelStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { editorForeground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; +import { localize } from '../../../../nls.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { isMacintosh, isWeb, OS } from '../../../../base/common/platform.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { IWorkspaceContextService, WorkbenchState } from '../../../../platform/workspace/common/workspace.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { append, clearNode, $, h } from '../../../../base/browser/dom.js'; +import { KeybindingLabel } from '../../../../base/browser/ui/keybindingLabel/keybindingLabel.js'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { defaultKeybindingLabelStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { editorForeground, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js'; registerColor('editorWatermark.foreground', { dark: transparent(editorForeground, 0.6), light: transparent(editorForeground, 0.68), hcDark: editorForeground, hcLight: editorForeground }, localize('editorLineHighlight', 'Foreground color for the labels in the editor watermark.')); diff --git a/src/vs/workbench/browser/parts/editor/editorPane.ts b/src/vs/workbench/browser/parts/editor/editorPane.ts index 7a73fe46f..bb868efd2 100644 --- a/src/vs/workbench/browser/parts/editor/editorPane.ts +++ b/src/vs/workbench/browser/parts/editor/editorPane.ts @@ -3,28 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Composite } from 'vs/workbench/browser/composite'; -import { IEditorPane, GroupIdentifier, IEditorMemento, IEditorOpenContext, isEditorInput } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { LRUCache, Touch } from 'vs/base/common/map'; -import { URI } from 'vs/base/common/uri'; -import { Emitter, Event } from 'vs/base/common/event'; -import { isEmptyObject } from 'vs/base/common/types'; -import { DEFAULT_EDITOR_MIN_DIMENSIONS, DEFAULT_EDITOR_MAX_DIMENSIONS } from 'vs/workbench/browser/parts/editor/editor'; -import { MementoObject } from 'vs/workbench/common/memento'; -import { joinPath, IExtUri, isEqual } from 'vs/base/common/resources'; -import { indexOfPath } from 'vs/base/common/extpath'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { ITextResourceConfigurationChangeEvent, ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { getWindowById } from 'vs/base/browser/dom'; +import { Composite } from '../../composite.js'; +import { IEditorPane, GroupIdentifier, IEditorMemento, IEditorOpenContext, isEditorInput } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IEditorGroup, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { LRUCache, Touch } from '../../../../base/common/map.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { isEmptyObject } from '../../../../base/common/types.js'; +import { DEFAULT_EDITOR_MIN_DIMENSIONS, DEFAULT_EDITOR_MAX_DIMENSIONS } from './editor.js'; +import { MementoObject } from '../../../common/memento.js'; +import { joinPath, IExtUri, isEqual } from '../../../../base/common/resources.js'; +import { indexOfPath } from '../../../../base/common/extpath.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { ITextResourceConfigurationChangeEvent, ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; +import { getWindowById } from '../../../../base/browser/dom.js'; /** * The base class of editors in the workbench. Editors register themselves for specific editor inputs. diff --git a/src/vs/workbench/browser/parts/editor/editorPanes.ts b/src/vs/workbench/browser/parts/editor/editorPanes.ts index ef1b25dd6..68b73d9a5 100644 --- a/src/vs/workbench/browser/parts/editor/editorPanes.ts +++ b/src/vs/workbench/browser/parts/editor/editorPanes.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { IAction } from 'vs/base/common/actions'; -import { Emitter } from 'vs/base/common/event'; -import Severity from 'vs/base/common/severity'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { EditorExtensions, EditorInputCapabilities, IEditorOpenContext, IVisibleEditorPane, isEditorOpenError } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getActiveElement, getWindowById } from 'vs/base/browser/dom'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IEditorPaneRegistry, IEditorPaneDescriptor } from 'vs/workbench/browser/editor'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorProgressService, LongRunningOperation } from 'vs/platform/progress/common/progress'; -import { IEditorGroupView, DEFAULT_EDITOR_MIN_DIMENSIONS, DEFAULT_EDITOR_MAX_DIMENSIONS, IInternalEditorOpenOptions } from 'vs/workbench/browser/parts/editor/editor'; -import { assertIsDefined } from 'vs/base/common/types'; -import { IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust'; -import { ErrorPlaceholderEditor, IErrorEditorPlaceholderOptions, WorkspaceTrustRequiredPlaceholderEditor } from 'vs/workbench/browser/parts/editor/editorPlaceholder'; -import { EditorOpenSource, IEditorOptions } from 'vs/platform/editor/common/editor'; -import { isCancellationError } from 'vs/base/common/errors'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IDialogService, IPromptButton, IPromptCancelButton } from 'vs/platform/dialogs/common/dialogs'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; +import { localize } from '../../../../nls.js'; +import { IAction } from '../../../../base/common/actions.js'; +import { Emitter } from '../../../../base/common/event.js'; +import Severity from '../../../../base/common/severity.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { EditorExtensions, EditorInputCapabilities, IEditorOpenContext, IVisibleEditorPane, isEditorOpenError } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getActiveElement, getWindowById, isEditableElement } from '../../../../base/browser/dom.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IEditorPaneRegistry, IEditorPaneDescriptor } from '../../editor.js'; +import { IWorkbenchLayoutService } from '../../../services/layout/browser/layoutService.js'; +import { EditorPane } from './editorPane.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IEditorProgressService, LongRunningOperation } from '../../../../platform/progress/common/progress.js'; +import { IEditorGroupView, DEFAULT_EDITOR_MIN_DIMENSIONS, DEFAULT_EDITOR_MAX_DIMENSIONS, IInternalEditorOpenOptions } from './editor.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { IWorkspaceTrustManagementService } from '../../../../platform/workspace/common/workspaceTrust.js'; +import { ErrorPlaceholderEditor, IErrorEditorPlaceholderOptions, WorkspaceTrustRequiredPlaceholderEditor } from './editorPlaceholder.js'; +import { EditorOpenSource, IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { isCancellationError } from '../../../../base/common/errors.js'; +import { toErrorMessage } from '../../../../base/common/errorMessage.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IDialogService, IPromptButton, IPromptCancelButton } from '../../../../platform/dialogs/common/dialogs.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; +import { IHostService } from '../../../services/host/browser/host.js'; export interface IOpenEditorResult { @@ -84,6 +84,7 @@ export class EditorPanes extends Disposable { get activeEditorPane(): IVisibleEditorPane | null { return this._activeEditorPane as IVisibleEditorPane | null; } private readonly editorPanes: EditorPane[] = []; + private readonly mapEditorPaneToPendingSetInput = new Map>(); private readonly activeEditorPaneDisposables = this._register(new DisposableStore()); private pagePosition: IDomNodePagePosition | undefined; @@ -287,7 +288,7 @@ export class EditorPanes extends Disposable { return true; // restore focus if same element is still active } - if (activeElement.tagName !== 'INPUT' && activeElement.tagName !== 'TEXTAREA') { + if (!isEditableElement(activeElement)) { // This is to avoid regressions from not restoring focus as we used to: // Only allow a different input element (or textarea) to remain focused @@ -409,11 +410,23 @@ export class EditorPanes extends Disposable { // If the input did not change, return early and only // apply the options unless the options instruct us to // force open it even if it is the same - const inputMatches = editorPane.input?.matches(editor); + let inputMatches = editorPane.input?.matches(editor); if (inputMatches && !options?.forceReload) { - editorPane.setOptions(options); - return { changed: false, cancelled: false }; + // We have to await a pending `setInput()` call for this + // pane before we can call into `setOptions()`, otherwise + // we risk calling when the input is not yet fully applied. + if (this.mapEditorPaneToPendingSetInput.has(editorPane)) { + await this.mapEditorPaneToPendingSetInput.get(editorPane); + } + + // At this point, the input might have changed, so we check again + inputMatches = editorPane.input?.matches(editor); + if (inputMatches) { + editorPane.setOptions(options); + } + + return { changed: false, cancelled: !inputMatches }; } // Start a new editor input operation to report progress @@ -430,8 +443,10 @@ export class EditorPanes extends Disposable { // load (https://github.com/microsoft/vscode/issues/34697) editorPane.clearInput(); - // Set the input to the editor pane - await editorPane.setInput(editor, options, context, operation.token); + // Set the input to the editor pane and keep track of it + const pendingSetInput = editorPane.setInput(editor, options, context, operation.token); + this.mapEditorPaneToPendingSetInput.set(editorPane, pendingSetInput); + await pendingSetInput; if (!operation.isCurrent()) { cancelled = true; @@ -443,6 +458,9 @@ export class EditorPanes extends Disposable { throw error; } } finally { + if (operation.isCurrent()) { + this.mapEditorPaneToPendingSetInput.delete(editorPane); + } operation.stop(); } @@ -463,6 +481,9 @@ export class EditorPanes extends Disposable { this.safeRun(() => this._activeEditorPane?.clearInput()); this.safeRun(() => this._activeEditorPane?.setVisible(false)); + // Clear any pending setInput promise + this.mapEditorPaneToPendingSetInput.delete(this._activeEditorPane); + // Remove editor pane from parent const editorPaneContainer = this._activeEditorPane.getContainer(); if (editorPaneContainer) { diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index c305eb571..5aeb5e50b 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -3,39 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { Part } from 'vs/workbench/browser/part'; -import { Dimension, $, EventHelper, addDisposableGenericMouseDownListener, getWindow, isAncestorOfActiveElement, getActiveElement, isHTMLElement } from 'vs/base/browser/dom'; -import { Event, Emitter, Relay, PauseableEmitter } from 'vs/base/common/event'; -import { contrastBorder, editorBackground } from 'vs/platform/theme/common/colorRegistry'; -import { GroupDirection, GroupsArrangement, GroupOrientation, IMergeGroupOptions, MergeGroupMode, GroupsOrder, GroupLocation, IFindGroupScope, EditorGroupLayout, GroupLayoutArgument, IEditorSideGroup, IEditorDropTargetDelegate, IEditorPart } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IView, orthogonal, LayoutPriority, IViewSize, Direction, SerializableGrid, Sizing, ISerializedGrid, ISerializedNode, Orientation, GridBranchNode, isGridBranchNode, GridNode, createSerializedGrid, Grid } from 'vs/base/browser/ui/grid/grid'; -import { GroupIdentifier, EditorInputWithOptions, IEditorPartOptions, IEditorPartOptionsChangeEvent, GroupModelChangeKind } from 'vs/workbench/common/editor'; -import { EDITOR_GROUP_BORDER, EDITOR_PANE_BACKGROUND } from 'vs/workbench/common/theme'; -import { distinct, coalesce } from 'vs/base/common/arrays'; -import { IEditorGroupView, getEditorPartOptions, impactsEditorPartOptions, IEditorPartCreationOptions, IEditorPartsView, IEditorGroupsView, IEditorGroupViewOptions } from 'vs/workbench/browser/parts/editor/editor'; -import { EditorGroupView } from 'vs/workbench/browser/parts/editor/editorGroupView'; -import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration'; -import { IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { ISerializedEditorGroupModel, isSerializedEditorGroupModel } from 'vs/workbench/common/editor/editorGroupModel'; -import { EditorDropTarget } from 'vs/workbench/browser/parts/editor/editorDropTarget'; -import { Color } from 'vs/base/common/color'; -import { CenteredViewLayout } from 'vs/base/browser/ui/centered/centeredViewLayout'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { Parts, IWorkbenchLayoutService, Position } from 'vs/workbench/services/layout/browser/layoutService'; -import { DeepPartial, assertIsDefined, assertType } from 'vs/base/common/types'; -import { CompositeDragAndDropObserver } from 'vs/workbench/browser/dnd'; -import { DeferredPromise, Promises } from 'vs/base/common/async'; -import { findGroup } from 'vs/workbench/services/editor/common/editorGroupFinder'; -import { SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { EditorPartMaximizedEditorGroupContext, EditorPartMultipleEditorGroupsContext, IsAuxiliaryEditorPartContext } from 'vs/workbench/common/contextkeys'; -import { mainWindow } from 'vs/base/browser/window'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { Part } from '../../part.js'; +import { Dimension, $, EventHelper, addDisposableGenericMouseDownListener, getWindow, isAncestorOfActiveElement, getActiveElement, isHTMLElement } from '../../../../base/browser/dom.js'; +import { Event, Emitter, Relay, PauseableEmitter } from '../../../../base/common/event.js'; +import { contrastBorder, editorBackground } from '../../../../platform/theme/common/colorRegistry.js'; +import { GroupDirection, GroupsArrangement, GroupOrientation, IMergeGroupOptions, MergeGroupMode, GroupsOrder, GroupLocation, IFindGroupScope, EditorGroupLayout, GroupLayoutArgument, IEditorSideGroup, IEditorDropTargetDelegate, IEditorPart } from '../../../services/editor/common/editorGroupsService.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IView, orthogonal, LayoutPriority, IViewSize, Direction, SerializableGrid, Sizing, ISerializedGrid, ISerializedNode, Orientation, GridBranchNode, isGridBranchNode, GridNode, createSerializedGrid, Grid } from '../../../../base/browser/ui/grid/grid.js'; +import { GroupIdentifier, EditorInputWithOptions, IEditorPartOptions, IEditorPartOptionsChangeEvent, GroupModelChangeKind } from '../../../common/editor.js'; +import { EDITOR_GROUP_BORDER, EDITOR_PANE_BACKGROUND } from '../../../common/theme.js'; +import { distinct, coalesce } from '../../../../base/common/arrays.js'; +import { IEditorGroupView, getEditorPartOptions, impactsEditorPartOptions, IEditorPartCreationOptions, IEditorPartsView, IEditorGroupsView, IEditorGroupViewOptions } from './editor.js'; +import { EditorGroupView } from './editorGroupView.js'; +import { IConfigurationService, IConfigurationChangeEvent } from '../../../../platform/configuration/common/configuration.js'; +import { IDisposable, dispose, toDisposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { ISerializedEditorGroupModel, isSerializedEditorGroupModel } from '../../../common/editor/editorGroupModel.js'; +import { EditorDropTarget } from './editorDropTarget.js'; +import { Color } from '../../../../base/common/color.js'; +import { CenteredViewLayout } from '../../../../base/browser/ui/centered/centeredViewLayout.js'; +import { onUnexpectedError } from '../../../../base/common/errors.js'; +import { Parts, IWorkbenchLayoutService, Position } from '../../../services/layout/browser/layoutService.js'; +import { DeepPartial, assertIsDefined, assertType } from '../../../../base/common/types.js'; +import { CompositeDragAndDropObserver } from '../../dnd.js'; +import { DeferredPromise, Promises } from '../../../../base/common/async.js'; +import { findGroup } from '../../../services/editor/common/editorGroupFinder.js'; +import { SIDE_GROUP } from '../../../services/editor/common/editorService.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { EditorPartMaximizedEditorGroupContext, EditorPartMultipleEditorGroupsContext, IsAuxiliaryEditorPartContext } from '../../../common/contextkeys.js'; +import { mainWindow } from '../../../../base/browser/window.js'; export interface IEditorPartUIState { readonly serializedGrid: ISerializedGrid; diff --git a/src/vs/workbench/browser/parts/editor/editorParts.ts b/src/vs/workbench/browser/parts/editor/editorParts.ts index c04fd7769..3684686bd 100644 --- a/src/vs/workbench/browser/parts/editor/editorParts.ts +++ b/src/vs/workbench/browser/parts/editor/editorParts.ts @@ -3,27 +3,27 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { EditorGroupLayout, GroupDirection, GroupLocation, GroupOrientation, GroupsArrangement, GroupsOrder, IAuxiliaryEditorPart, IEditorGroupContextKeyProvider, IEditorDropTargetDelegate, IEditorGroupsService, IEditorSideGroup, IEditorWorkingSet, IFindGroupScope, IMergeGroupOptions, IEditorWorkingSetOptions, IEditorPart } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { Emitter } from 'vs/base/common/event'; -import { DisposableMap, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { GroupIdentifier } from 'vs/workbench/common/editor'; -import { EditorPart, IEditorPartUIState, MainEditorPart } from 'vs/workbench/browser/parts/editor/editorPart'; -import { IEditorGroupView, IEditorPartsView } from 'vs/workbench/browser/parts/editor/editor'; -import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { distinct, firstOrDefault } from 'vs/base/common/arrays'; -import { AuxiliaryEditorPart, IAuxiliaryEditorPartOpenOptions } from 'vs/workbench/browser/parts/editor/auxiliaryEditorPart'; -import { MultiWindowParts } from 'vs/workbench/browser/part'; -import { DeferredPromise } from 'vs/base/common/async'; -import { IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IAuxiliaryWindowOpenOptions, IAuxiliaryWindowService } from 'vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService'; -import { generateUuid } from 'vs/base/common/uuid'; -import { ContextKeyValue, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { isHTMLElement } from 'vs/base/browser/dom'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { localize } from '../../../../nls.js'; +import { EditorGroupLayout, GroupDirection, GroupLocation, GroupOrientation, GroupsArrangement, GroupsOrder, IAuxiliaryEditorPart, IEditorGroupContextKeyProvider, IEditorDropTargetDelegate, IEditorGroupsService, IEditorSideGroup, IEditorWorkingSet, IFindGroupScope, IMergeGroupOptions, IEditorWorkingSetOptions, IEditorPart } from '../../../services/editor/common/editorGroupsService.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { GroupIdentifier } from '../../../common/editor.js'; +import { EditorPart, IEditorPartUIState, MainEditorPart } from './editorPart.js'; +import { IEditorGroupView, IEditorPartsView } from './editor.js'; +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { distinct } from '../../../../base/common/arrays.js'; +import { AuxiliaryEditorPart, IAuxiliaryEditorPartOpenOptions } from './auxiliaryEditorPart.js'; +import { MultiWindowParts } from '../../part.js'; +import { DeferredPromise } from '../../../../base/common/async.js'; +import { IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { IAuxiliaryWindowOpenOptions, IAuxiliaryWindowService } from '../../../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; +import { ContextKeyValue, IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { isHTMLElement } from '../../../../base/browser/dom.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; interface IEditorPartsUIState { readonly auxiliary: IAuxiliaryEditorPartState[]; @@ -250,7 +250,7 @@ export class EditorParts extends MultiWindowParts implements IEditor } } - const mostRecentActivePart = firstOrDefault(this.mostRecentActiveParts); + const mostRecentActivePart = this.mostRecentActiveParts.at(0); mostRecentActivePart?.activeGroup.focus(); this._isReady = true; @@ -427,7 +427,7 @@ export class EditorParts extends MultiWindowParts implements IEditor // Restore Focus unless instructed otherwise if (!options?.preserveFocus) { - const mostRecentActivePart = firstOrDefault(this.mostRecentActiveParts); + const mostRecentActivePart = this.mostRecentActiveParts.at(0); if (mostRecentActivePart) { await mostRecentActivePart.whenReady; mostRecentActivePart.activeGroup.focus(); diff --git a/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts b/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts index e434679f4..6c1000754 100644 --- a/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts +++ b/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts @@ -3,33 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editorplaceholder'; -import { localize } from 'vs/nls'; -import { truncate, truncateMiddle } from 'vs/base/common/strings'; -import Severity from 'vs/base/common/severity'; -import { IEditorOpenContext, isEditorOpenError } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { Dimension, size, clearNode, $, EventHelper } from 'vs/base/browser/dom'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { assertAllDefined } from 'vs/base/common/types'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IWorkspaceContextService, isSingleFolderWorkspaceIdentifier, toWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; -import { EditorOpenSource, IEditorOptions } from 'vs/platform/editor/common/editor'; -import { computeEditorAriaLabel, EditorPaneDescriptor } from 'vs/workbench/browser/editor'; -import { ButtonBar } from 'vs/base/browser/ui/button/button'; -import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { SimpleIconLabel } from 'vs/base/browser/ui/iconLabel/simpleIconLabel'; -import { FileChangeType, FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; +import './media/editorplaceholder.css'; +import { localize } from '../../../../nls.js'; +import { truncate, truncateMiddle } from '../../../../base/common/strings.js'; +import Severity from '../../../../base/common/severity.js'; +import { IEditorOpenContext, isEditorOpenError } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { EditorPane } from './editorPane.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { DomScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { ScrollbarVisibility } from '../../../../base/common/scrollable.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { Dimension, size, clearNode, $, EventHelper } from '../../../../base/browser/dom.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { DisposableStore, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { assertAllDefined } from '../../../../base/common/types.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IWorkspaceContextService, isSingleFolderWorkspaceIdentifier, toWorkspaceIdentifier } from '../../../../platform/workspace/common/workspace.js'; +import { EditorOpenSource, IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { computeEditorAriaLabel, EditorPaneDescriptor } from '../../editor.js'; +import { ButtonBar } from '../../../../base/browser/ui/button/button.js'; +import { defaultButtonStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { SimpleIconLabel } from '../../../../base/browser/ui/iconLabel/simpleIconLabel.js'; +import { FileChangeType, FileOperationError, FileOperationResult, IFileService } from '../../../../platform/files/common/files.js'; +import { toErrorMessage } from '../../../../base/common/errorMessage.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { IEditorGroup } from '../../../services/editor/common/editorGroupsService.js'; export interface IEditorPlaceholderContents { icon: string; diff --git a/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts b/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts index 3a69dbbff..bbab2a62d 100644 --- a/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts +++ b/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editorquickaccess'; -import { localize } from 'vs/nls'; -import { IQuickPickSeparator, quickPickItemScorerAccessor, IQuickPickItemWithResource, IQuickPick } from 'vs/platform/quickinput/common/quickInput'; -import { PickerQuickAccessProvider, IPickerQuickAccessItem, TriggerAction } from 'vs/platform/quickinput/browser/pickerQuickAccess'; -import { IEditorGroupsService, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { EditorsOrder, IEditorIdentifier, EditorResourceAccessor, SideBySideEditor, GroupIdentifier } from 'vs/workbench/common/editor'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { getIconClasses } from 'vs/editor/common/services/getIconClasses'; -import { prepareQuery, scoreItemFuzzy, compareItemsByFuzzyScore, FuzzyScorerCache } from 'vs/base/common/fuzzyScorer'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; +import './media/editorquickaccess.css'; +import { localize } from '../../../../nls.js'; +import { IQuickPickSeparator, quickPickItemScorerAccessor, IQuickPickItemWithResource, IQuickPick } from '../../../../platform/quickinput/common/quickInput.js'; +import { PickerQuickAccessProvider, IPickerQuickAccessItem, TriggerAction } from '../../../../platform/quickinput/browser/pickerQuickAccess.js'; +import { IEditorGroupsService, GroupsOrder } from '../../../services/editor/common/editorGroupsService.js'; +import { EditorsOrder, IEditorIdentifier, EditorResourceAccessor, SideBySideEditor, GroupIdentifier } from '../../../common/editor.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IModelService } from '../../../../editor/common/services/model.js'; +import { ILanguageService } from '../../../../editor/common/languages/language.js'; +import { getIconClasses } from '../../../../editor/common/services/getIconClasses.js'; +import { prepareQuery, scoreItemFuzzy, compareItemsByFuzzyScore, FuzzyScorerCache } from '../../../../base/common/fuzzyScorer.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; interface IEditorQuickPickItem extends IQuickPickItemWithResource, IPickerQuickAccessItem { groupId: GroupIdentifier; diff --git a/src/vs/workbench/browser/parts/editor/editorStatus.ts b/src/vs/workbench/browser/parts/editor/editorStatus.ts index dcef2cf97..acc013522 100644 --- a/src/vs/workbench/browser/parts/editor/editorStatus.ts +++ b/src/vs/workbench/browser/parts/editor/editorStatus.ts @@ -3,59 +3,59 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editorstatus'; -import { localize, localize2 } from 'vs/nls'; -import { getWindowById, runAtThisOrScheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; -import { format, compare, splitLines } from 'vs/base/common/strings'; -import { extname, basename, isEqual } from 'vs/base/common/resources'; -import { areFunctions, assertIsDefined } from 'vs/base/common/types'; -import { URI } from 'vs/base/common/uri'; -import { Action } from 'vs/base/common/actions'; -import { Language } from 'vs/base/common/platform'; -import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput'; -import { IFileEditorInput, EditorResourceAccessor, IEditorPane, SideBySideEditor } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { Disposable, MutableDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IEditorAction } from 'vs/editor/common/editorCommon'; -import { EndOfLineSequence } from 'vs/editor/common/model'; -import { TrimTrailingWhitespaceAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; -import { IndentUsingSpaces, IndentUsingTabs, ChangeTabDisplaySize, DetectIndentation, IndentationToSpacesAction, IndentationToTabsAction } from 'vs/editor/contrib/indentation/browser/indentation'; -import { BaseBinaryResourceEditor } from 'vs/workbench/browser/parts/editor/binaryEditor'; -import { BinaryResourceDiffEditor } from 'vs/workbench/browser/parts/editor/binaryDiffEditor'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IFileService, FILES_ASSOCIATIONS_CONFIG } from 'vs/platform/files/common/files'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILanguageService, ILanguageSelection } from 'vs/editor/common/languages/language'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ICommandService, CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { EncodingMode, IEncodingSupport, ILanguageSupport, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { SUPPORTED_ENCODINGS } from 'vs/workbench/services/textfile/common/encoding'; -import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { deepClone } from 'vs/base/common/objects'; -import { ICodeEditor, getCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Schemas } from 'vs/base/common/network'; -import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; -import { IQuickInputService, IQuickPickItem, QuickPickInput } from 'vs/platform/quickinput/common/quickInput'; -import { getIconClassesForLanguageId } from 'vs/editor/common/services/getIconClasses'; -import { Promises, timeout } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment, IStatusbarEntry } from 'vs/workbench/services/statusbar/browser/statusbar'; -import { IMarker, IMarkerService, MarkerSeverity, IMarkerData } from 'vs/platform/markers/common/markers'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { AutomaticLanguageDetectionLikelyWrongClassification, AutomaticLanguageDetectionLikelyWrongId, IAutomaticLanguageDetectionLikelyWrongData, ILanguageDetectionService } from 'vs/workbench/services/languageDetection/common/languageDetectionWorkerService'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { Action2 } from 'vs/platform/actions/common/actions'; -import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { TabFocus } from 'vs/editor/browser/config/tabFocus'; -import { IEditorGroupsService, IEditorPart } from 'vs/workbench/services/editor/common/editorGroupsService'; +import './media/editorstatus.css'; +import { localize, localize2 } from '../../../../nls.js'; +import { getWindowById, runAtThisOrScheduleAtNextAnimationFrame } from '../../../../base/browser/dom.js'; +import { format, compare, splitLines } from '../../../../base/common/strings.js'; +import { extname, basename, isEqual } from '../../../../base/common/resources.js'; +import { areFunctions, assertIsDefined } from '../../../../base/common/types.js'; +import { URI } from '../../../../base/common/uri.js'; +import { Action } from '../../../../base/common/actions.js'; +import { Language } from '../../../../base/common/platform.js'; +import { UntitledTextEditorInput } from '../../../services/untitled/common/untitledTextEditorInput.js'; +import { IFileEditorInput, EditorResourceAccessor, IEditorPane, SideBySideEditor } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { Disposable, MutableDisposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IEditorAction } from '../../../../editor/common/editorCommon.js'; +import { EndOfLineSequence } from '../../../../editor/common/model.js'; +import { TrimTrailingWhitespaceAction } from '../../../../editor/contrib/linesOperations/browser/linesOperations.js'; +import { IndentUsingSpaces, IndentUsingTabs, ChangeTabDisplaySize, DetectIndentation, IndentationToSpacesAction, IndentationToTabsAction } from '../../../../editor/contrib/indentation/browser/indentation.js'; +import { BaseBinaryResourceEditor } from './binaryEditor.js'; +import { BinaryResourceDiffEditor } from './binaryDiffEditor.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IFileService, FILES_ASSOCIATIONS_CONFIG } from '../../../../platform/files/common/files.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ILanguageService, ILanguageSelection } from '../../../../editor/common/languages/language.js'; +import { Range } from '../../../../editor/common/core/range.js'; +import { Selection } from '../../../../editor/common/core/selection.js'; +import { ICommandService, CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { IExtensionGalleryService } from '../../../../platform/extensionManagement/common/extensionManagement.js'; +import { EncodingMode, IEncodingSupport, ILanguageSupport, ITextFileService } from '../../../services/textfile/common/textfiles.js'; +import { SUPPORTED_ENCODINGS } from '../../../services/textfile/common/encoding.js'; +import { ConfigurationChangedEvent, EditorOption } from '../../../../editor/common/config/editorOptions.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { ConfigurationTarget, IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { deepClone } from '../../../../base/common/objects.js'; +import { ICodeEditor, getCodeEditor } from '../../../../editor/browser/editorBrowser.js'; +import { Schemas } from '../../../../base/common/network.js'; +import { IPreferencesService } from '../../../services/preferences/common/preferences.js'; +import { IQuickInputService, IQuickPickItem, QuickPickInput } from '../../../../platform/quickinput/common/quickInput.js'; +import { getIconClassesForLanguageId } from '../../../../editor/common/services/getIconClasses.js'; +import { Promises, timeout } from '../../../../base/common/async.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { IWorkbenchContribution } from '../../../common/contributions.js'; +import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment, IStatusbarEntry } from '../../../services/statusbar/browser/statusbar.js'; +import { IMarker, IMarkerService, MarkerSeverity, IMarkerData } from '../../../../platform/markers/common/markers.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { AutomaticLanguageDetectionLikelyWrongClassification, AutomaticLanguageDetectionLikelyWrongId, IAutomaticLanguageDetectionLikelyWrongData, ILanguageDetectionService } from '../../../services/languageDetection/common/languageDetectionWorkerService.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { Action2 } from '../../../../platform/actions/common/actions.js'; +import { ServicesAccessor } from '../../../../editor/browser/editorExtensions.js'; +import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { TabFocus } from '../../../../editor/browser/config/tabFocus.js'; +import { IEditorGroupsService, IEditorPart } from '../../../services/editor/common/editorGroupsService.js'; class SideBySideEditorEncodingSupport implements IEncodingSupport { constructor(private primary: IEncodingSupport, private secondary: IEncodingSupport) { } diff --git a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts index e5e4f7774..d03297e00 100644 --- a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +++ b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts @@ -3,50 +3,52 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editortabscontrol'; -import { localize } from 'vs/nls'; -import { applyDragImage, DataTransfers } from 'vs/base/browser/dnd'; -import { Dimension, getActiveWindow, getWindow, isMouseEvent } from 'vs/base/browser/dom'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { ActionsOrientation, IActionViewItem, prepareActions } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IAction, ActionRunner } from 'vs/base/common/actions'; -import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; -import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { listActiveSelectionBackground, listActiveSelectionForeground } from 'vs/platform/theme/common/colorRegistry'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { DraggedEditorGroupIdentifier, DraggedEditorIdentifier, fillEditorsDragData, isWindowDraggedOver } from 'vs/workbench/browser/dnd'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { IEditorGroupsView, IEditorGroupView, IEditorPartsView, IInternalEditorOpenOptions } from 'vs/workbench/browser/parts/editor/editor'; -import { IEditorCommandsContext, EditorResourceAccessor, IEditorPartOptions, SideBySideEditor, EditorsOrder, EditorInputCapabilities, IToolbarActions, GroupIdentifier, Verbosity } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { ResourceContextKey, ActiveEditorPinnedContext, ActiveEditorStickyContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, ActiveEditorFirstInGroupContext, ActiveEditorAvailableEditorIdsContext, applyAvailableEditorIds, ActiveEditorLastInGroupContext } from 'vs/workbench/common/contextkeys'; -import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; -import { assertIsDefined } from 'vs/base/common/types'; -import { isFirefox } from 'vs/base/browser/browser'; -import { isCancellationError } from 'vs/base/common/errors'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { LocalSelectionTransfer } from 'vs/platform/dnd/browser/dnd'; -import { DraggedTreeItemsIdentifier } from 'vs/editor/common/services/treeViewsDnd'; -import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; -import { IEditorTitleControlDimensions } from 'vs/workbench/browser/parts/editor/editorTitleControl'; -import { IReadonlyEditorGroupModel } from 'vs/workbench/common/editor/editorGroupModel'; -import { EDITOR_CORE_NAVIGATION_COMMANDS } from 'vs/workbench/browser/parts/editor/editorCommands'; -import { IAuxiliaryEditorPart, MergeGroupMode } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { isMacintosh } from 'vs/base/common/platform'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; -import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; +import './media/editortabscontrol.css'; +import { localize } from '../../../../nls.js'; +import { applyDragImage, DataTransfers } from '../../../../base/browser/dnd.js'; +import { Dimension, getActiveWindow, getWindow, isMouseEvent } from '../../../../base/browser/dom.js'; +import { StandardMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { ActionsOrientation, IActionViewItem, prepareActions } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { IAction, ActionRunner } from '../../../../base/common/actions.js'; +import { ResolvedKeybinding } from '../../../../base/common/keybindings.js'; +import { DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; +import { createActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { IContextKeyService, IContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { listActiveSelectionBackground, listActiveSelectionForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { IThemeService, Themable } from '../../../../platform/theme/common/themeService.js'; +import { DraggedEditorGroupIdentifier, DraggedEditorIdentifier, fillEditorsDragData, isWindowDraggedOver } from '../../dnd.js'; +import { EditorPane } from './editorPane.js'; +import { IEditorGroupsView, IEditorGroupView, IEditorPartsView, IInternalEditorOpenOptions } from './editor.js'; +import { IEditorCommandsContext, EditorResourceAccessor, IEditorPartOptions, SideBySideEditor, EditorsOrder, EditorInputCapabilities, IToolbarActions, GroupIdentifier, Verbosity } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { ResourceContextKey, ActiveEditorPinnedContext, ActiveEditorStickyContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, ActiveEditorFirstInGroupContext, ActiveEditorAvailableEditorIdsContext, applyAvailableEditorIds, ActiveEditorLastInGroupContext } from '../../../common/contextkeys.js'; +import { AnchorAlignment } from '../../../../base/browser/ui/contextview/contextview.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { isFirefox } from '../../../../base/browser/browser.js'; +import { isCancellationError } from '../../../../base/common/errors.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { WorkbenchToolBar } from '../../../../platform/actions/browser/toolbar.js'; +import { LocalSelectionTransfer } from '../../../../platform/dnd/browser/dnd.js'; +import { DraggedTreeItemsIdentifier } from '../../../../editor/common/services/treeViewsDnd.js'; +import { IEditorResolverService } from '../../../services/editor/common/editorResolverService.js'; +import { IEditorTitleControlDimensions } from './editorTitleControl.js'; +import { IReadonlyEditorGroupModel } from '../../../common/editor/editorGroupModel.js'; +import { EDITOR_CORE_NAVIGATION_COMMANDS } from './editorCommands.js'; +import { IAuxiliaryEditorPart, MergeGroupMode } from '../../../services/editor/common/editorGroupsService.js'; +import { isMacintosh } from '../../../../base/common/platform.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { IHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegate.js'; +import { getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import { IBaseActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; +import { MarkdownString } from '../../../../base/common/htmlContent.js'; +import { IManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; export class EditorCommandsContextActionRunner extends ActionRunner { @@ -452,8 +454,17 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC return this.groupsView.partOptions.tabHeight !== 'compact' ? EditorTabsControl.EDITOR_TAB_HEIGHT.normal : EditorTabsControl.EDITOR_TAB_HEIGHT.compact; } - protected getHoverTitle(editor: EditorInput): string { - return editor.getTitle(Verbosity.LONG); + protected getHoverTitle(editor: EditorInput): string | IManagedHoverTooltipMarkdownString { + const title = editor.getTitle(Verbosity.LONG); + if (!this.tabsModel.isPinned(editor)) { + return { + markdown: new MarkdownString('', { supportThemeIcons: true, isTrusted: true }). + appendText(title). + appendMarkdown(' (_preview_ [$(gear)](command:workbench.action.openSettings?%5B%22workbench.editor.enablePreview%22%5D "Configure Preview Mode"))'), + markdownNotSupportedFallback: title + ' (preview)' + }; + } + return title; } protected getHoverDelegate(): IHoverDelegate { diff --git a/src/vs/workbench/browser/parts/editor/editorTitleControl.ts b/src/vs/workbench/browser/parts/editor/editorTitleControl.ts index d134e9b61..ac74f9b77 100644 --- a/src/vs/workbench/browser/parts/editor/editorTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/editorTitleControl.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/editortitlecontrol'; -import { Dimension, clearNode } from 'vs/base/browser/dom'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { BreadcrumbsControl, BreadcrumbsControlFactory } from 'vs/workbench/browser/parts/editor/breadcrumbsControl'; -import { IEditorGroupsView, IEditorGroupTitleHeight, IEditorGroupView, IEditorPartsView, IInternalEditorOpenOptions } from 'vs/workbench/browser/parts/editor/editor'; -import { IEditorTabsControl } from 'vs/workbench/browser/parts/editor/editorTabsControl'; -import { MultiEditorTabsControl } from 'vs/workbench/browser/parts/editor/multiEditorTabsControl'; -import { SingleEditorTabsControl } from 'vs/workbench/browser/parts/editor/singleEditorTabsControl'; -import { IEditorPartOptions } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { MultiRowEditorControl } from 'vs/workbench/browser/parts/editor/multiRowEditorTabsControl'; -import { IReadonlyEditorGroupModel } from 'vs/workbench/common/editor/editorGroupModel'; -import { NoEditorTabsControl } from 'vs/workbench/browser/parts/editor/noEditorTabsControl'; +import './media/editortitlecontrol.css'; +import { Dimension, clearNode } from '../../../../base/browser/dom.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IThemeService, Themable } from '../../../../platform/theme/common/themeService.js'; +import { BreadcrumbsControl, BreadcrumbsControlFactory } from './breadcrumbsControl.js'; +import { IEditorGroupsView, IEditorGroupTitleHeight, IEditorGroupView, IEditorPartsView, IInternalEditorOpenOptions } from './editor.js'; +import { IEditorTabsControl } from './editorTabsControl.js'; +import { MultiEditorTabsControl } from './multiEditorTabsControl.js'; +import { SingleEditorTabsControl } from './singleEditorTabsControl.js'; +import { IEditorPartOptions } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { MultiRowEditorControl } from './multiRowEditorTabsControl.js'; +import { IReadonlyEditorGroupModel } from '../../../common/editor/editorGroupModel.js'; +import { NoEditorTabsControl } from './noEditorTabsControl.js'; export interface IEditorTitleControlDimensions { diff --git a/src/vs/workbench/browser/parts/editor/editorWithViewState.ts b/src/vs/workbench/browser/parts/editor/editorWithViewState.ts index e31756007..8cfd84b64 100644 --- a/src/vs/workbench/browser/parts/editor/editorWithViewState.ts +++ b/src/vs/workbench/browser/parts/editor/editorWithViewState.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from 'vs/base/common/uri'; -import { Event } from 'vs/base/common/event'; -import { IEditorMemento, IEditorCloseEvent, IEditorOpenContext, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IEditorGroupsService, IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IExtUri } from 'vs/base/common/resources'; -import { IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; +import { URI } from '../../../../base/common/uri.js'; +import { Event } from '../../../../base/common/event.js'; +import { IEditorMemento, IEditorCloseEvent, IEditorOpenContext, EditorResourceAccessor, SideBySideEditor } from '../../../common/editor.js'; +import { EditorPane } from './editorPane.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IEditorGroupsService, IEditorGroup } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IExtUri } from '../../../../base/common/resources.js'; +import { IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; /** * Base class of editors that want to store and restore view state. diff --git a/src/vs/workbench/browser/parts/editor/editorsObserver.ts b/src/vs/workbench/browser/parts/editor/editorsObserver.ts index ac30da415..19dd4c3b5 100644 --- a/src/vs/workbench/browser/parts/editor/editorsObserver.ts +++ b/src/vs/workbench/browser/parts/editor/editorsObserver.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IEditorFactoryRegistry, IEditorIdentifier, GroupIdentifier, EditorExtensions, IEditorPartOptionsChangeEvent, EditorsOrder, GroupModelChangeKind, EditorInputCapabilities } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { Event, Emitter } from 'vs/base/common/event'; -import { IEditorGroupsService, IEditorGroup, GroupsOrder, IEditorGroupsContainer } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { coalesce } from 'vs/base/common/arrays'; -import { LinkedMap, Touch, ResourceMap } from 'vs/base/common/map'; -import { equals } from 'vs/base/common/objects'; -import { IResourceEditorInputIdentifier } from 'vs/platform/editor/common/editor'; -import { URI } from 'vs/base/common/uri'; +import { IEditorFactoryRegistry, IEditorIdentifier, GroupIdentifier, EditorExtensions, IEditorPartOptionsChangeEvent, EditorsOrder, GroupModelChangeKind, EditorInputCapabilities } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { dispose, Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { Event, Emitter } from '../../../../base/common/event.js'; +import { IEditorGroupsService, IEditorGroup, GroupsOrder, IEditorGroupsContainer } from '../../../services/editor/common/editorGroupsService.js'; +import { coalesce } from '../../../../base/common/arrays.js'; +import { LinkedMap, Touch, ResourceMap } from '../../../../base/common/map.js'; +import { equals } from '../../../../base/common/objects.js'; +import { IResourceEditorInputIdentifier } from '../../../../platform/editor/common/editor.js'; +import { URI } from '../../../../base/common/uri.js'; interface ISerializedEditorsList { entries: ISerializedEditorIdentifier[]; diff --git a/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css b/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css index d4db8eaff..4861d1843 100644 --- a/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css +++ b/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css @@ -18,7 +18,7 @@ } .monaco-editor-pane-placeholder .editor-placeholder-icon-container .codicon { - font-size: 48px; + font-size: 48px !important; } .monaco-editor-pane-placeholder .editor-placeholder-icon-container .codicon.codicon-error { diff --git a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css index 24de0a1f3..eb4033f60 100644 --- a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +++ b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css @@ -11,10 +11,14 @@ .monaco-workbench .part.editor > .content .editor-group-container > .title .title-label, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-label { - white-space: nowrap; flex: 1; } +.monaco-workbench .part.editor > .content .editor-group-container > .title .title-label .label-name, +.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-label .label-name { + white-space: nowrap; +} + .monaco-workbench .part.editor > .content .editor-group-container > .title .title-label a, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-label a { font-size: 13px; diff --git a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts index 9007f132a..b23be82eb 100644 --- a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts +++ b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts @@ -3,61 +3,61 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/multieditortabscontrol'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; -import { shorten } from 'vs/base/common/labels'; -import { EditorResourceAccessor, Verbosity, IEditorPartOptions, SideBySideEditor, DEFAULT_EDITOR_ASSOCIATION, EditorInputCapabilities, IUntypedEditorInput, preventEditorClose, EditorCloseMethod, EditorsOrder, IToolbarActions } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { computeEditorAriaLabel } from 'vs/workbench/browser/editor'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { EventType as TouchEventType, GestureEvent, Gesture } from 'vs/base/browser/touch'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { ResourceLabels, IResourceLabel, DEFAULT_LABELS_CONTAINER } from 'vs/workbench/browser/labels'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { MenuId } from 'vs/platform/actions/common/actions'; -import { EditorCommandsContextActionRunner, EditorTabsControl } from 'vs/workbench/browser/parts/editor/editorTabsControl'; -import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; -import { IDisposable, dispose, DisposableStore, combinedDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { getOrSet } from 'vs/base/common/map'; -import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { TAB_INACTIVE_BACKGROUND, TAB_ACTIVE_BACKGROUND, TAB_BORDER, EDITOR_DRAG_AND_DROP_BACKGROUND, TAB_UNFOCUSED_ACTIVE_BACKGROUND, TAB_UNFOCUSED_ACTIVE_BORDER, TAB_ACTIVE_BORDER, TAB_HOVER_BACKGROUND, TAB_HOVER_BORDER, TAB_UNFOCUSED_HOVER_BACKGROUND, TAB_UNFOCUSED_HOVER_BORDER, EDITOR_GROUP_HEADER_TABS_BACKGROUND, WORKBENCH_BACKGROUND, TAB_ACTIVE_BORDER_TOP, TAB_UNFOCUSED_ACTIVE_BORDER_TOP, TAB_ACTIVE_MODIFIED_BORDER, TAB_INACTIVE_MODIFIED_BORDER, TAB_UNFOCUSED_ACTIVE_MODIFIED_BORDER, TAB_UNFOCUSED_INACTIVE_MODIFIED_BORDER, TAB_UNFOCUSED_INACTIVE_BACKGROUND, TAB_HOVER_FOREGROUND, TAB_UNFOCUSED_HOVER_FOREGROUND, EDITOR_GROUP_HEADER_TABS_BORDER, TAB_LAST_PINNED_BORDER, TAB_SELECTED_BORDER_TOP } from 'vs/workbench/common/theme'; -import { activeContrastBorder, contrastBorder, editorBackground, listActiveSelectionBackground, listActiveSelectionForeground } from 'vs/platform/theme/common/colorRegistry'; -import { ResourcesDropHandler, DraggedEditorIdentifier, DraggedEditorGroupIdentifier, extractTreeDropData, isWindowDraggedOver } from 'vs/workbench/browser/dnd'; -import { Color } from 'vs/base/common/color'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { MergeGroupMode, IMergeGroupOptions } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { addDisposableListener, EventType, EventHelper, Dimension, scheduleAtNextAnimationFrame, findParentWithClass, clearNode, DragAndDropObserver, isMouseEvent, getWindow } from 'vs/base/browser/dom'; -import { localize } from 'vs/nls'; -import { IEditorGroupsView, EditorServiceImpl, IEditorGroupView, IInternalEditorOpenOptions, IEditorPartsView } from 'vs/workbench/browser/parts/editor/editor'; -import { CloseEditorTabAction, UnpinEditorAction } from 'vs/workbench/browser/parts/editor/editorActions'; -import { assertAllDefined, assertIsDefined } from 'vs/base/common/types'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { basenameOrAuthority } from 'vs/base/common/resources'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { IPath, win32, posix } from 'vs/base/common/path'; -import { coalesce, insert } from 'vs/base/common/arrays'; -import { isHighContrast } from 'vs/platform/theme/common/theme'; -import { isSafari } from 'vs/base/browser/browser'; -import { equals } from 'vs/base/common/objects'; -import { EditorActivation, IEditorOptions } from 'vs/platform/editor/common/editor'; -import { UNLOCK_GROUP_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { ITreeViewsDnDService } from 'vs/editor/common/services/treeViewsDndService'; -import { DraggedTreeItemsIdentifier } from 'vs/editor/common/services/treeViewsDnd'; -import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; -import { IEditorTitleControlDimensions } from 'vs/workbench/browser/parts/editor/editorTitleControl'; -import { StickyEditorGroupModel, UnstickyEditorGroupModel } from 'vs/workbench/common/editor/filteredEditorGroupModel'; -import { IReadonlyEditorGroupModel } from 'vs/workbench/common/editor/editorGroupModel'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { BugIndicatingError } from 'vs/base/common/errors'; -import { applyDragImage } from 'vs/base/browser/dnd'; +import './media/multieditortabscontrol.css'; +import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +import { shorten } from '../../../../base/common/labels.js'; +import { EditorResourceAccessor, Verbosity, IEditorPartOptions, SideBySideEditor, DEFAULT_EDITOR_ASSOCIATION, EditorInputCapabilities, IUntypedEditorInput, preventEditorClose, EditorCloseMethod, EditorsOrder, IToolbarActions } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { computeEditorAriaLabel } from '../../editor.js'; +import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { EventType as TouchEventType, GestureEvent, Gesture } from '../../../../base/browser/touch.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { ResourceLabels, IResourceLabel, DEFAULT_LABELS_CONTAINER } from '../../labels.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { MenuId } from '../../../../platform/actions/common/actions.js'; +import { EditorCommandsContextActionRunner, EditorTabsControl } from './editorTabsControl.js'; +import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js'; +import { IDisposable, dispose, DisposableStore, combinedDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +import { ScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js'; +import { ScrollbarVisibility } from '../../../../base/common/scrollable.js'; +import { getOrSet } from '../../../../base/common/map.js'; +import { IThemeService, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; +import { TAB_INACTIVE_BACKGROUND, TAB_ACTIVE_BACKGROUND, TAB_BORDER, EDITOR_DRAG_AND_DROP_BACKGROUND, TAB_UNFOCUSED_ACTIVE_BACKGROUND, TAB_UNFOCUSED_ACTIVE_BORDER, TAB_ACTIVE_BORDER, TAB_HOVER_BACKGROUND, TAB_HOVER_BORDER, TAB_UNFOCUSED_HOVER_BACKGROUND, TAB_UNFOCUSED_HOVER_BORDER, EDITOR_GROUP_HEADER_TABS_BACKGROUND, WORKBENCH_BACKGROUND, TAB_ACTIVE_BORDER_TOP, TAB_UNFOCUSED_ACTIVE_BORDER_TOP, TAB_ACTIVE_MODIFIED_BORDER, TAB_INACTIVE_MODIFIED_BORDER, TAB_UNFOCUSED_ACTIVE_MODIFIED_BORDER, TAB_UNFOCUSED_INACTIVE_MODIFIED_BORDER, TAB_UNFOCUSED_INACTIVE_BACKGROUND, TAB_HOVER_FOREGROUND, TAB_UNFOCUSED_HOVER_FOREGROUND, EDITOR_GROUP_HEADER_TABS_BORDER, TAB_LAST_PINNED_BORDER, TAB_SELECTED_BORDER_TOP } from '../../../common/theme.js'; +import { activeContrastBorder, contrastBorder, editorBackground, listActiveSelectionBackground, listActiveSelectionForeground } from '../../../../platform/theme/common/colorRegistry.js'; +import { ResourcesDropHandler, DraggedEditorIdentifier, DraggedEditorGroupIdentifier, extractTreeDropData, isWindowDraggedOver } from '../../dnd.js'; +import { Color } from '../../../../base/common/color.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { MergeGroupMode, IMergeGroupOptions } from '../../../services/editor/common/editorGroupsService.js'; +import { addDisposableListener, EventType, EventHelper, Dimension, scheduleAtNextAnimationFrame, findParentWithClass, clearNode, DragAndDropObserver, isMouseEvent, getWindow } from '../../../../base/browser/dom.js'; +import { localize } from '../../../../nls.js'; +import { IEditorGroupsView, EditorServiceImpl, IEditorGroupView, IInternalEditorOpenOptions, IEditorPartsView } from './editor.js'; +import { CloseEditorTabAction, UnpinEditorAction } from './editorActions.js'; +import { assertAllDefined, assertIsDefined } from '../../../../base/common/types.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { basenameOrAuthority } from '../../../../base/common/resources.js'; +import { RunOnceScheduler } from '../../../../base/common/async.js'; +import { IPathService } from '../../../services/path/common/pathService.js'; +import { IPath, win32, posix } from '../../../../base/common/path.js'; +import { coalesce, insert } from '../../../../base/common/arrays.js'; +import { isHighContrast } from '../../../../platform/theme/common/theme.js'; +import { isSafari } from '../../../../base/browser/browser.js'; +import { equals } from '../../../../base/common/objects.js'; +import { EditorActivation, IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { UNLOCK_GROUP_COMMAND_ID } from './editorCommands.js'; +import { StandardMouseEvent } from '../../../../base/browser/mouseEvent.js'; +import { ITreeViewsDnDService } from '../../../../editor/common/services/treeViewsDndService.js'; +import { DraggedTreeItemsIdentifier } from '../../../../editor/common/services/treeViewsDnd.js'; +import { IEditorResolverService } from '../../../services/editor/common/editorResolverService.js'; +import { IEditorTitleControlDimensions } from './editorTitleControl.js'; +import { StickyEditorGroupModel, UnstickyEditorGroupModel } from '../../../common/editor/filteredEditorGroupModel.js'; +import { IReadonlyEditorGroupModel } from '../../../common/editor/editorGroupModel.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { BugIndicatingError } from '../../../../base/common/errors.js'; +import { applyDragImage } from '../../../../base/browser/dnd.js'; interface IEditorInputLabel { readonly editor: EditorInput; diff --git a/src/vs/workbench/browser/parts/editor/multiRowEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/multiRowEditorTabsControl.ts index caada5014..d4d58f1ef 100644 --- a/src/vs/workbench/browser/parts/editor/multiRowEditorTabsControl.ts +++ b/src/vs/workbench/browser/parts/editor/multiRowEditorTabsControl.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Dimension } from 'vs/base/browser/dom'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorGroupsView, IEditorGroupView, IEditorPartsView, IInternalEditorOpenOptions } from 'vs/workbench/browser/parts/editor/editor'; -import { IEditorTabsControl } from 'vs/workbench/browser/parts/editor/editorTabsControl'; -import { MultiEditorTabsControl } from 'vs/workbench/browser/parts/editor/multiEditorTabsControl'; -import { IEditorPartOptions } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { StickyEditorGroupModel, UnstickyEditorGroupModel } from 'vs/workbench/common/editor/filteredEditorGroupModel'; -import { IEditorTitleControlDimensions } from 'vs/workbench/browser/parts/editor/editorTitleControl'; -import { IReadonlyEditorGroupModel } from 'vs/workbench/common/editor/editorGroupModel'; +import { Dimension } from '../../../../base/browser/dom.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IEditorGroupsView, IEditorGroupView, IEditorPartsView, IInternalEditorOpenOptions } from './editor.js'; +import { IEditorTabsControl } from './editorTabsControl.js'; +import { MultiEditorTabsControl } from './multiEditorTabsControl.js'; +import { IEditorPartOptions } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { StickyEditorGroupModel, UnstickyEditorGroupModel } from '../../../common/editor/filteredEditorGroupModel.js'; +import { IEditorTitleControlDimensions } from './editorTitleControl.js'; +import { IReadonlyEditorGroupModel } from '../../../common/editor/editorGroupModel.js'; export class MultiRowEditorControl extends Disposable implements IEditorTabsControl { diff --git a/src/vs/workbench/browser/parts/editor/noEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/noEditorTabsControl.ts index 6a0859cd3..af16587fd 100644 --- a/src/vs/workbench/browser/parts/editor/noEditorTabsControl.ts +++ b/src/vs/workbench/browser/parts/editor/noEditorTabsControl.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/singleeditortabscontrol'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { EditorTabsControl } from 'vs/workbench/browser/parts/editor/editorTabsControl'; -import { Dimension } from 'vs/base/browser/dom'; -import { IEditorTitleControlDimensions } from 'vs/workbench/browser/parts/editor/editorTitleControl'; -import { IToolbarActions } from 'vs/workbench/common/editor'; +import './media/singleeditortabscontrol.css'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { EditorTabsControl } from './editorTabsControl.js'; +import { Dimension } from '../../../../base/browser/dom.js'; +import { IEditorTitleControlDimensions } from './editorTitleControl.js'; +import { IToolbarActions } from '../../../common/editor.js'; export class NoEditorTabsControl extends EditorTabsControl { private activeEditor: EditorInput | null = null; @@ -47,9 +47,17 @@ export class NoEditorTabsControl extends EditorTabsControl { beforeCloseEditor(editor: EditorInput): void { } - closeEditor(editor: EditorInput): void { } + closeEditor(editor: EditorInput): void { + this.handleClosedEditors(); + } + + closeEditors(editors: EditorInput[]): void { + this.handleClosedEditors(); + } - closeEditors(editors: EditorInput[]): void { } + private handleClosedEditors(): void { + this.activeEditor = this.tabsModel.activeEditor; + } moveEditor(editor: EditorInput, fromIndex: number, targetIndex: number): void { } diff --git a/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts b/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts index 2dab828b5..b373fd8b0 100644 --- a/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts +++ b/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/sidebysideeditor'; -import { localize } from 'vs/nls'; -import { Dimension, $, clearNode, multibyteAwareBtoa } from 'vs/base/browser/dom'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IEditorControl, IEditorPane, IEditorOpenContext, EditorExtensions, SIDE_BY_SIDE_EDITOR_ID, SideBySideEditor as Side, IEditorPaneSelection, IEditorPaneWithSelection, IEditorPaneSelectionChangeEvent, isEditorPaneWithSelection, EditorPaneSelectionCompareResult } from 'vs/workbench/common/editor'; -import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IEditorPaneRegistry } from 'vs/workbench/browser/editor'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { SplitView, Sizing, Orientation } from 'vs/base/browser/ui/splitview/splitview'; -import { Event, Relay, Emitter } from 'vs/base/common/event'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { assertIsDefined } from 'vs/base/common/types'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { DEFAULT_EDITOR_MIN_DIMENSIONS } from 'vs/workbench/browser/parts/editor/editor'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { SIDE_BY_SIDE_EDITOR_HORIZONTAL_BORDER, SIDE_BY_SIDE_EDITOR_VERTICAL_BORDER } from 'vs/workbench/common/theme'; -import { AbstractEditorWithViewState } from 'vs/workbench/browser/parts/editor/editorWithViewState'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { isEqual } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; +import './media/sidebysideeditor.css'; +import { localize } from '../../../../nls.js'; +import { Dimension, $, clearNode, multibyteAwareBtoa } from '../../../../base/browser/dom.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { IEditorControl, IEditorPane, IEditorOpenContext, EditorExtensions, SIDE_BY_SIDE_EDITOR_ID, SideBySideEditor as Side, IEditorPaneSelection, IEditorPaneWithSelection, IEditorPaneSelectionChangeEvent, isEditorPaneWithSelection, EditorPaneSelectionCompareResult } from '../../../common/editor.js'; +import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { EditorPane } from './editorPane.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { IEditorPaneRegistry } from '../../editor.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IEditorGroup, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { SplitView, Sizing, Orientation } from '../../../../base/browser/ui/splitview/splitview.js'; +import { Event, Relay, Emitter } from '../../../../base/common/event.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { IEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IConfigurationChangeEvent, IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { DEFAULT_EDITOR_MIN_DIMENSIONS } from './editor.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { SIDE_BY_SIDE_EDITOR_HORIZONTAL_BORDER, SIDE_BY_SIDE_EDITOR_VERTICAL_BORDER } from '../../../common/theme.js'; +import { AbstractEditorWithViewState } from './editorWithViewState.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; interface ISideBySideEditorViewState { primary: object; diff --git a/src/vs/workbench/browser/parts/editor/singleEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/singleEditorTabsControl.ts index cfbf35f73..57ee640af 100644 --- a/src/vs/workbench/browser/parts/editor/singleEditorTabsControl.ts +++ b/src/vs/workbench/browser/parts/editor/singleEditorTabsControl.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/singleeditortabscontrol'; -import { EditorResourceAccessor, Verbosity, IEditorPartOptions, SideBySideEditor, preventEditorClose, EditorCloseMethod, IToolbarActions } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { EditorTabsControl } from 'vs/workbench/browser/parts/editor/editorTabsControl'; -import { ResourceLabel, IResourceLabel } from 'vs/workbench/browser/labels'; -import { TAB_ACTIVE_FOREGROUND, TAB_UNFOCUSED_ACTIVE_FOREGROUND } from 'vs/workbench/common/theme'; -import { EventType as TouchEventType, GestureEvent, Gesture } from 'vs/base/browser/touch'; -import { addDisposableListener, EventType, EventHelper, Dimension, isAncestor, DragAndDropObserver, isHTMLElement } from 'vs/base/browser/dom'; -import { CLOSE_EDITOR_COMMAND_ID, UNLOCK_GROUP_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; -import { Color } from 'vs/base/common/color'; -import { assertIsDefined, assertAllDefined } from 'vs/base/common/types'; -import { equals } from 'vs/base/common/objects'; -import { toDisposable } from 'vs/base/common/lifecycle'; -import { defaultBreadcrumbsWidgetStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { IEditorTitleControlDimensions } from 'vs/workbench/browser/parts/editor/editorTitleControl'; -import { BreadcrumbsControlFactory } from 'vs/workbench/browser/parts/editor/breadcrumbsControl'; +import './media/singleeditortabscontrol.css'; +import { EditorResourceAccessor, Verbosity, IEditorPartOptions, SideBySideEditor, preventEditorClose, EditorCloseMethod, IToolbarActions } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { EditorTabsControl } from './editorTabsControl.js'; +import { ResourceLabel, IResourceLabel } from '../../labels.js'; +import { TAB_ACTIVE_FOREGROUND, TAB_UNFOCUSED_ACTIVE_FOREGROUND } from '../../../common/theme.js'; +import { EventType as TouchEventType, GestureEvent, Gesture } from '../../../../base/browser/touch.js'; +import { addDisposableListener, EventType, EventHelper, Dimension, isAncestor, DragAndDropObserver, isHTMLElement } from '../../../../base/browser/dom.js'; +import { CLOSE_EDITOR_COMMAND_ID, UNLOCK_GROUP_COMMAND_ID } from './editorCommands.js'; +import { Color } from '../../../../base/common/color.js'; +import { assertIsDefined, assertAllDefined } from '../../../../base/common/types.js'; +import { equals } from '../../../../base/common/objects.js'; +import { toDisposable } from '../../../../base/common/lifecycle.js'; +import { defaultBreadcrumbsWidgetStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { IEditorTitleControlDimensions } from './editorTitleControl.js'; +import { BreadcrumbsControlFactory } from './breadcrumbsControl.js'; interface IRenderedEditorLabel { readonly editor?: EditorInput; diff --git a/src/vs/workbench/browser/parts/editor/textCodeEditor.ts b/src/vs/workbench/browser/parts/editor/textCodeEditor.ts index c3846b6fa..e7ace5f1a 100644 --- a/src/vs/workbench/browser/parts/editor/textCodeEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textCodeEditor.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { assertIsDefined } from 'vs/base/common/types'; -import { ITextEditorPane } from 'vs/workbench/common/editor'; -import { applyTextEditorOptions } from 'vs/workbench/common/editor/editorOptions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { isEqual } from 'vs/base/common/resources'; -import { IEditorOptions as ICodeEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { IEditorViewState, ScrollType } from 'vs/editor/common/editorCommon'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { AbstractTextEditor } from 'vs/workbench/browser/parts/editor/textEditor'; -import { Dimension } from 'vs/base/browser/dom'; +import { localize } from '../../../../nls.js'; +import { URI } from '../../../../base/common/uri.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { ITextEditorPane } from '../../../common/editor.js'; +import { applyTextEditorOptions } from '../../../common/editor/editorOptions.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { IEditorOptions as ICodeEditorOptions } from '../../../../editor/common/config/editorOptions.js'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../../../../editor/browser/widget/codeEditor/codeEditorWidget.js'; +import { IEditorViewState, ScrollType } from '../../../../editor/common/editorCommon.js'; +import { ICodeEditor } from '../../../../editor/browser/editorBrowser.js'; +import { AbstractTextEditor } from './textEditor.js'; +import { Dimension } from '../../../../base/browser/dom.js'; /** * A text editor using the code editor widget. diff --git a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts index 5743ac16f..63b7b0d6f 100644 --- a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts @@ -3,38 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { deepClone } from 'vs/base/common/objects'; -import { isObject, assertIsDefined } from 'vs/base/common/types'; -import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { IDiffEditorOptions, IEditorOptions as ICodeEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { AbstractTextEditor, IEditorConfiguration } from 'vs/workbench/browser/parts/editor/textEditor'; -import { TEXT_DIFF_EDITOR_ID, IEditorFactoryRegistry, EditorExtensions, ITextDiffEditorPane, IEditorOpenContext, isEditorInput, isTextEditorViewState, createTooLargeFileError } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { applyTextEditorOptions } from 'vs/workbench/common/editor/editorOptions'; -import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; -import { TextDiffEditorModel } from 'vs/workbench/common/editor/textDiffEditorModel'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITextResourceConfigurationChangeEvent, ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { TextFileOperationError, TextFileOperationResult } from 'vs/workbench/services/textfile/common/textfiles'; -import { ScrollType, IDiffEditorViewState, IDiffEditorModel, IDiffEditorViewModel } from 'vs/editor/common/editorCommon'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { EditorActivation, ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { isEqual } from 'vs/base/common/resources'; -import { Dimension, multibyteAwareBtoa } from 'vs/base/browser/dom'; -import { ByteSize, FileOperationError, FileOperationResult, IFileService, TooLargeFileOperationError } from 'vs/platform/files/common/files'; -import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; -import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditor/diffEditorWidget'; +import { localize } from '../../../../nls.js'; +import { deepClone } from '../../../../base/common/objects.js'; +import { isObject, assertIsDefined } from '../../../../base/common/types.js'; +import { ICodeEditor, IDiffEditor } from '../../../../editor/browser/editorBrowser.js'; +import { IDiffEditorOptions, IEditorOptions as ICodeEditorOptions } from '../../../../editor/common/config/editorOptions.js'; +import { AbstractTextEditor, IEditorConfiguration } from './textEditor.js'; +import { TEXT_DIFF_EDITOR_ID, IEditorFactoryRegistry, EditorExtensions, ITextDiffEditorPane, IEditorOpenContext, isEditorInput, isTextEditorViewState, createTooLargeFileError } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { applyTextEditorOptions } from '../../../common/editor/editorOptions.js'; +import { DiffEditorInput } from '../../../common/editor/diffEditorInput.js'; +import { TextDiffEditorModel } from '../../../common/editor/textDiffEditorModel.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { ITextResourceConfigurationChangeEvent, ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { TextFileOperationError, TextFileOperationResult } from '../../../services/textfile/common/textfiles.js'; +import { ScrollType, IDiffEditorViewState, IDiffEditorModel, IDiffEditorViewModel } from '../../../../editor/common/editorCommon.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { URI } from '../../../../base/common/uri.js'; +import { IEditorGroup, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { EditorActivation, ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { Dimension, multibyteAwareBtoa } from '../../../../base/browser/dom.js'; +import { ByteSize, FileOperationError, FileOperationResult, IFileService, TooLargeFileOperationError } from '../../../../platform/files/common/files.js'; +import { IBoundarySashes } from '../../../../base/browser/ui/sash/sash.js'; +import { IPreferencesService } from '../../../services/preferences/common/preferences.js'; +import { StopWatch } from '../../../../base/common/stopwatch.js'; +import { DiffEditorWidget } from '../../../../editor/browser/widget/diffEditor/diffEditorWidget.js'; /** * The text editor that leverages the diff text editor for the editing experience. diff --git a/src/vs/workbench/browser/parts/editor/textEditor.ts b/src/vs/workbench/browser/parts/editor/textEditor.ts index 629d430bb..e0a457555 100644 --- a/src/vs/workbench/browser/parts/editor/textEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textEditor.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { distinct, deepClone } from 'vs/base/common/objects'; -import { Emitter, Event } from 'vs/base/common/event'; -import { isObject, assertIsDefined } from 'vs/base/common/types'; -import { MutableDisposable } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IEditorOpenContext, IEditorPaneSelection, EditorPaneSelectionCompareResult, EditorPaneSelectionChangeReason, IEditorPaneWithSelection, IEditorPaneSelectionChangeEvent, IEditorPaneScrollPosition, IEditorPaneWithScrolling } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { computeEditorAriaLabel } from 'vs/workbench/browser/editor'; -import { AbstractEditorWithViewState } from 'vs/workbench/browser/parts/editor/editorWithViewState'; -import { IEditorViewState } from 'vs/editor/common/editorCommon'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ITextResourceConfigurationChangeEvent, ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IEditorOptions as ICodeEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorOptions, ITextEditorOptions, TextEditorSelectionRevealType, TextEditorSelectionSource } from 'vs/platform/editor/common/editor'; -import { ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { localize } from '../../../../nls.js'; +import { URI } from '../../../../base/common/uri.js'; +import { distinct, deepClone } from '../../../../base/common/objects.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { isObject, assertIsDefined } from '../../../../base/common/types.js'; +import { MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { ICodeEditor } from '../../../../editor/browser/editorBrowser.js'; +import { IEditorOpenContext, IEditorPaneSelection, EditorPaneSelectionCompareResult, EditorPaneSelectionChangeReason, IEditorPaneWithSelection, IEditorPaneSelectionChangeEvent, IEditorPaneScrollPosition, IEditorPaneWithScrolling } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { computeEditorAriaLabel } from '../../editor.js'; +import { AbstractEditorWithViewState } from './editorWithViewState.js'; +import { IEditorViewState } from '../../../../editor/common/editorCommon.js'; +import { Selection } from '../../../../editor/common/core/selection.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { ITextResourceConfigurationChangeEvent, ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IEditorOptions as ICodeEditorOptions } from '../../../../editor/common/config/editorOptions.js'; +import { IEditorGroup, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IEditorOptions, ITextEditorOptions, TextEditorSelectionRevealType, TextEditorSelectionSource } from '../../../../platform/editor/common/editor.js'; +import { ICursorPositionChangedEvent } from '../../../../editor/common/cursorEvents.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; +import { IMarkdownString } from '../../../../base/common/htmlContent.js'; export interface IEditorConfiguration { editor: object; diff --git a/src/vs/workbench/browser/parts/editor/textResourceEditor.ts b/src/vs/workbench/browser/parts/editor/textResourceEditor.ts index 0a3b885e0..f828e5587 100644 --- a/src/vs/workbench/browser/parts/editor/textResourceEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textResourceEditor.ts @@ -3,31 +3,31 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assertIsDefined } from 'vs/base/common/types'; -import { ICodeEditor, IPasteEvent } from 'vs/editor/browser/editorBrowser'; -import { IEditorOpenContext, isTextEditorViewState } from 'vs/workbench/common/editor'; -import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { applyTextEditorOptions } from 'vs/workbench/common/editor/editorOptions'; -import { AbstractTextResourceEditorInput, TextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; -import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel'; -import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput'; -import { AbstractTextCodeEditor } from 'vs/workbench/browser/parts/editor/textCodeEditor'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ScrollType, ICodeEditorViewState } from 'vs/editor/common/editorCommon'; -import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IModelService } from 'vs/editor/common/services/model'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { EditorOption, IEditorOptions as ICodeEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { ModelConstants } from 'vs/editor/common/model'; -import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; -import { IFileService } from 'vs/platform/files/common/files'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { ICodeEditor, IPasteEvent } from '../../../../editor/browser/editorBrowser.js'; +import { IEditorOpenContext, isTextEditorViewState } from '../../../common/editor.js'; +import { EditorInput } from '../../../common/editor/editorInput.js'; +import { applyTextEditorOptions } from '../../../common/editor/editorOptions.js'; +import { AbstractTextResourceEditorInput, TextResourceEditorInput } from '../../../common/editor/textResourceEditorInput.js'; +import { BaseTextEditorModel } from '../../../common/editor/textEditorModel.js'; +import { UntitledTextEditorInput } from '../../../services/untitled/common/untitledTextEditorInput.js'; +import { AbstractTextCodeEditor } from './textCodeEditor.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IStorageService } from '../../../../platform/storage/common/storage.js'; +import { ITextResourceConfigurationService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IThemeService } from '../../../../platform/theme/common/themeService.js'; +import { ScrollType, ICodeEditorViewState } from '../../../../editor/common/editorCommon.js'; +import { IEditorGroup, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IModelService } from '../../../../editor/common/services/model.js'; +import { ILanguageService } from '../../../../editor/common/languages/language.js'; +import { PLAINTEXT_LANGUAGE_ID } from '../../../../editor/common/languages/modesRegistry.js'; +import { EditorOption, IEditorOptions as ICodeEditorOptions } from '../../../../editor/common/config/editorOptions.js'; +import { ModelConstants } from '../../../../editor/common/model.js'; +import { ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; +import { IFileService } from '../../../../platform/files/common/files.js'; /** * An editor implementation that is capable of showing the contents of resource inputs. Uses diff --git a/src/vs/workbench/browser/parts/globalCompositeBar.ts b/src/vs/workbench/browser/parts/globalCompositeBar.ts index 533fbd075..8c96ab3e4 100644 --- a/src/vs/workbench/browser/parts/globalCompositeBar.ts +++ b/src/vs/workbench/browser/parts/globalCompositeBar.ts @@ -3,47 +3,47 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { ActionBar, ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; -import { ACCOUNTS_ACTIVITY_ID, GLOBAL_ACTIVITY_ID } from 'vs/workbench/common/activity'; -import { IActivity, IActivityService, NumberBadge } from 'vs/workbench/services/activity/common/activity'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { DisposableStore, Disposable } from 'vs/base/common/lifecycle'; -import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { CompositeBarActionViewItem, CompositeBarAction, IActivityHoverOptions, ICompositeBarActionViewItemOptions, ICompositeBarColors } from 'vs/workbench/browser/parts/compositeBarActions'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { Action, IAction, Separator, SubmenuAction, toAction } from 'vs/base/common/actions'; -import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { addDisposableListener, EventType, append, clearNode, hide, show, EventHelper, $, runWhenWindowIdle, getWindow } from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch'; -import { AnchorAlignment, AnchorAxisAlignment } from 'vs/base/browser/ui/contextview/contextview'; -import { Lazy } from 'vs/base/common/lazy'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { ISecretStorageService } from 'vs/platform/secrets/common/secrets'; -import { AuthenticationSessionInfo, getCurrentAuthenticationSessionInfo } from 'vs/workbench/services/authentication/browser/authenticationService'; -import { AuthenticationSessionAccount, IAuthenticationService } from 'vs/workbench/services/authentication/common/authentication'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { ILifecycleService, LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; -import { DEFAULT_ICON } from 'vs/workbench/services/userDataProfile/common/userDataProfileIcons'; -import { isString } from 'vs/base/common/types'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND } from 'vs/workbench/common/theme'; -import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { ICommandService } from 'vs/platform/commands/common/commands'; +import { localize } from '../../../nls.js'; +import { ActionBar, ActionsOrientation } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { ACCOUNTS_ACTIVITY_ID, GLOBAL_ACTIVITY_ID } from '../../common/activity.js'; +import { IActivity, IActivityService, NumberBadge } from '../../services/activity/common/activity.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { DisposableStore, Disposable } from '../../../base/common/lifecycle.js'; +import { IColorTheme, IThemeService } from '../../../platform/theme/common/themeService.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../platform/storage/common/storage.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { CompositeBarActionViewItem, CompositeBarAction, IActivityHoverOptions, ICompositeBarActionViewItemOptions, ICompositeBarColors } from './compositeBarActions.js'; +import { Codicon } from '../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { registerIcon } from '../../../platform/theme/common/iconRegistry.js'; +import { Action, IAction, Separator, SubmenuAction, toAction } from '../../../base/common/actions.js'; +import { IMenu, IMenuService, MenuId } from '../../../platform/actions/common/actions.js'; +import { addDisposableListener, EventType, append, clearNode, hide, show, EventHelper, $, runWhenWindowIdle, getWindow } from '../../../base/browser/dom.js'; +import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { EventType as TouchEventType, GestureEvent } from '../../../base/browser/touch.js'; +import { AnchorAlignment, AnchorAxisAlignment } from '../../../base/browser/ui/contextview/contextview.js'; +import { Lazy } from '../../../base/common/lazy.js'; +import { createAndFillInActionBarActions } from '../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { ILogService } from '../../../platform/log/common/log.js'; +import { IProductService } from '../../../platform/product/common/productService.js'; +import { ISecretStorageService } from '../../../platform/secrets/common/secrets.js'; +import { AuthenticationSessionInfo, getCurrentAuthenticationSessionInfo } from '../../services/authentication/browser/authenticationService.js'; +import { AuthenticationSessionAccount, IAuthenticationService } from '../../services/authentication/common/authentication.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { IHoverService } from '../../../platform/hover/browser/hover.js'; +import { ILifecycleService, LifecyclePhase } from '../../services/lifecycle/common/lifecycle.js'; +import { IUserDataProfileService } from '../../services/userDataProfile/common/userDataProfile.js'; +import { DEFAULT_ICON } from '../../services/userDataProfile/common/userDataProfileIcons.js'; +import { isString } from '../../../base/common/types.js'; +import { KeyCode } from '../../../base/common/keyCodes.js'; +import { ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND } from '../../common/theme.js'; +import { IBaseActionViewItemOptions } from '../../../base/browser/ui/actionbar/actionViewItems.js'; +import { ICommandService } from '../../../platform/commands/common/commands.js'; export class GlobalCompositeBar extends Disposable { @@ -602,8 +602,7 @@ export class GlobalActivityActionViewItem extends AbstractGlobalActivityActionVi } show(this.profileBadge); - this.profileBadgeContent.classList.toggle('profile-text-overlay', true); - this.profileBadgeContent.classList.toggle('profile-icon-overlay', false); + this.profileBadgeContent.classList.add('profile-text-overlay'); this.profileBadgeContent.textContent = this.userDataProfileService.currentProfile.name.substring(0, 2).toUpperCase(); } diff --git a/src/vs/workbench/browser/parts/media/paneCompositePart.css b/src/vs/workbench/browser/parts/media/paneCompositePart.css index 52f116455..1f2bd9ee9 100644 --- a/src/vs/workbench/browser/parts/media/paneCompositePart.css +++ b/src/vs/workbench/browser/parts/media/paneCompositePart.css @@ -205,6 +205,10 @@ position: relative; } +.monaco-workbench .pane-composite-part > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .icon-badge .badge-content { + padding: 3px; +} + .monaco-workbench .pane-composite-part > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon .badge.compact, .monaco-workbench .pane-composite-part > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon .badge.compact { position: absolute; diff --git a/src/vs/workbench/browser/parts/notifications/notificationAccessibleView.ts b/src/vs/workbench/browser/parts/notifications/notificationAccessibleView.ts index f36a4ddea..0e206216e 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationAccessibleView.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationAccessibleView.ts @@ -3,19 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAction } from 'vs/base/common/actions'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { localize } from 'vs/nls'; -import { IAccessibleViewService, AccessibleViewProviderId, AccessibleViewType, AccessibleContentProvider } from 'vs/platform/accessibility/browser/accessibleView'; -import { IAccessibleViewImplentation } from 'vs/platform/accessibility/browser/accessibleViewRegistry'; -import { IAccessibilitySignalService, AccessibilitySignal } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IListService, WorkbenchList } from 'vs/platform/list/browser/listService'; -import { getNotificationFromContext } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; -import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys'; -import { INotificationViewItem } from 'vs/workbench/common/notifications'; +import { IAction } from '../../../../base/common/actions.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { localize } from '../../../../nls.js'; +import { IAccessibleViewService, AccessibleViewProviderId, AccessibleViewType, AccessibleContentProvider } from '../../../../platform/accessibility/browser/accessibleView.js'; +import { IAccessibleViewImplentation } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; +import { IAccessibilitySignalService, AccessibilitySignal } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +import { IListService, WorkbenchList } from '../../../../platform/list/browser/listService.js'; +import { getNotificationFromContext } from './notificationsCommands.js'; +import { NotificationFocusedContext } from '../../../common/contextkeys.js'; +import { INotificationViewItem } from '../../../common/notifications.js'; export class NotificationAccessibleView implements IAccessibleViewImplentation { readonly priority = 90; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsActions.ts b/src/vs/workbench/browser/parts/notifications/notificationsActions.ts index a6295ba42..e07546c56 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsActions.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsActions.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/notificationsActions'; -import { INotificationViewItem } from 'vs/workbench/common/notifications'; -import { localize } from 'vs/nls'; -import { Action } from 'vs/base/common/actions'; -import { CLEAR_NOTIFICATION, EXPAND_NOTIFICATION, COLLAPSE_NOTIFICATION, CLEAR_ALL_NOTIFICATIONS, HIDE_NOTIFICATIONS_CENTER, TOGGLE_DO_NOT_DISTURB_MODE, TOGGLE_DO_NOT_DISTURB_MODE_BY_SOURCE } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { Codicon } from 'vs/base/common/codicons'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { ThemeIcon } from 'vs/base/common/themables'; +import './media/notificationsActions.css'; +import { INotificationViewItem } from '../../../common/notifications.js'; +import { localize } from '../../../../nls.js'; +import { Action } from '../../../../base/common/actions.js'; +import { CLEAR_NOTIFICATION, EXPAND_NOTIFICATION, COLLAPSE_NOTIFICATION, CLEAR_ALL_NOTIFICATIONS, HIDE_NOTIFICATIONS_CENTER, TOGGLE_DO_NOT_DISTURB_MODE, TOGGLE_DO_NOT_DISTURB_MODE_BY_SOURCE } from './notificationsCommands.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; const clearIcon = registerIcon('notifications-clear', Codicon.close, localize('clearIcon', 'Icon for the clear action in notifications.')); const clearAllIcon = registerIcon('notifications-clear-all', Codicon.clearAll, localize('clearAllIcon', 'Icon for the clear all action in notifications.')); diff --git a/src/vs/workbench/browser/parts/notifications/notificationsAlerts.ts b/src/vs/workbench/browser/parts/notifications/notificationsAlerts.ts index 0238b6aa0..bd4ff0b1e 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsAlerts.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsAlerts.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { localize } from 'vs/nls'; -import { INotificationViewItem, INotificationsModel, NotificationChangeType, INotificationChangeEvent, NotificationViewItemContentChangeKind } from 'vs/workbench/common/notifications'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { NotificationPriority, Severity } from 'vs/platform/notification/common/notification'; -import { Event } from 'vs/base/common/event'; +import { alert } from '../../../../base/browser/ui/aria/aria.js'; +import { localize } from '../../../../nls.js'; +import { INotificationViewItem, INotificationsModel, NotificationChangeType, INotificationChangeEvent, NotificationViewItemContentChangeKind } from '../../../common/notifications.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { toErrorMessage } from '../../../../base/common/errorMessage.js'; +import { NotificationPriority, Severity } from '../../../../platform/notification/common/notification.js'; +import { Event } from '../../../../base/common/event.js'; export class NotificationsAlerts extends Disposable { diff --git a/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts b/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts index 40bcde5fd..85356ca85 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts @@ -3,32 +3,32 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/notificationsCenter'; -import 'vs/css!./media/notificationsActions'; -import { NOTIFICATIONS_CENTER_HEADER_FOREGROUND, NOTIFICATIONS_CENTER_HEADER_BACKGROUND, NOTIFICATIONS_CENTER_BORDER } from 'vs/workbench/common/theme'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { INotificationsModel, INotificationChangeEvent, NotificationChangeType, NotificationViewItemContentChangeKind } from 'vs/workbench/common/notifications'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { Emitter } from 'vs/base/common/event'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { INotificationsCenterController, NotificationActionRunner } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; -import { NotificationsList } from 'vs/workbench/browser/parts/notifications/notificationsList'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Dimension, isAncestorOfActiveElement } from 'vs/base/browser/dom'; -import { widgetShadow } from 'vs/platform/theme/common/colorRegistry'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { localize } from 'vs/nls'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { ClearAllNotificationsAction, ConfigureDoNotDisturbAction, ToggleDoNotDisturbBySourceAction, HideNotificationsCenterAction, ToggleDoNotDisturbAction } from 'vs/workbench/browser/parts/notifications/notificationsActions'; -import { IAction, Separator, toAction } from 'vs/base/common/actions'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { assertAllDefined, assertIsDefined } from 'vs/base/common/types'; -import { NotificationsCenterVisibleContext } from 'vs/workbench/common/contextkeys'; -import { INotificationService, NotificationsFilter } from 'vs/platform/notification/common/notification'; -import { mainWindow } from 'vs/base/browser/window'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; +import './media/notificationsCenter.css'; +import './media/notificationsActions.css'; +import { NOTIFICATIONS_CENTER_HEADER_FOREGROUND, NOTIFICATIONS_CENTER_HEADER_BACKGROUND, NOTIFICATIONS_CENTER_BORDER } from '../../../common/theme.js'; +import { IThemeService, Themable } from '../../../../platform/theme/common/themeService.js'; +import { INotificationsModel, INotificationChangeEvent, NotificationChangeType, NotificationViewItemContentChangeKind } from '../../../common/notifications.js'; +import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; +import { Emitter } from '../../../../base/common/event.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { INotificationsCenterController, NotificationActionRunner } from './notificationsCommands.js'; +import { NotificationsList } from './notificationsList.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { Dimension, isAncestorOfActiveElement } from '../../../../base/browser/dom.js'; +import { widgetShadow } from '../../../../platform/theme/common/colorRegistry.js'; +import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { localize } from '../../../../nls.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { ClearAllNotificationsAction, ConfigureDoNotDisturbAction, ToggleDoNotDisturbBySourceAction, HideNotificationsCenterAction, ToggleDoNotDisturbAction } from './notificationsActions.js'; +import { IAction, Separator, toAction } from '../../../../base/common/actions.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { assertAllDefined, assertIsDefined } from '../../../../base/common/types.js'; +import { NotificationsCenterVisibleContext } from '../../../common/contextkeys.js'; +import { INotificationService, NotificationsFilter } from '../../../../platform/notification/common/notification.js'; +import { mainWindow } from '../../../../base/browser/window.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { DropdownMenuActionViewItem } from '../../../../base/browser/ui/dropdown/dropdownActionViewItem.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; export class NotificationsCenter extends Themable implements INotificationsCenterController { diff --git a/src/vs/workbench/browser/parts/notifications/notificationsCommands.ts b/src/vs/workbench/browser/parts/notifications/notificationsCommands.ts index 5151fdc18..c80c3561c 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsCommands.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsCommands.ts @@ -3,25 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { INotificationViewItem, isNotificationViewItem, NotificationsModel } from 'vs/workbench/common/notifications'; -import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; -import { localize, localize2 } from 'vs/nls'; -import { IListService, WorkbenchList } from 'vs/platform/list/browser/listService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { NotificationMetrics, NotificationMetricsClassification, notificationToMetrics } from 'vs/workbench/browser/parts/notifications/notificationsTelemetry'; -import { NotificationFocusedContext, NotificationsCenterVisibleContext, NotificationsToastsVisibleContext } from 'vs/workbench/common/contextkeys'; -import { INotificationService, INotificationSourceFilter, NotificationPriority, NotificationsFilter } from 'vs/platform/notification/common/notification'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ActionRunner, IAction, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; -import { hash } from 'vs/base/common/hash'; -import { firstOrDefault } from 'vs/base/common/arrays'; -import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; +import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; +import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; +import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; +import { INotificationViewItem, isNotificationViewItem, NotificationsModel } from '../../../common/notifications.js'; +import { MenuRegistry, MenuId } from '../../../../platform/actions/common/actions.js'; +import { localize, localize2 } from '../../../../nls.js'; +import { IListService, WorkbenchList } from '../../../../platform/list/browser/listService.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { NotificationMetrics, NotificationMetricsClassification, notificationToMetrics } from './notificationsTelemetry.js'; +import { NotificationFocusedContext, NotificationsCenterVisibleContext, NotificationsToastsVisibleContext } from '../../../common/contextkeys.js'; +import { INotificationService, INotificationSourceFilter, NotificationPriority, NotificationsFilter } from '../../../../platform/notification/common/notification.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ActionRunner, IAction, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from '../../../../base/common/actions.js'; +import { hash } from '../../../../base/common/hash.js'; +import { IQuickInputService, IQuickPickItem } from '../../../../platform/quickinput/common/quickInput.js'; +import { DisposableStore } from '../../../../base/common/lifecycle.js'; +import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; // Center export const SHOW_NOTIFICATIONS_CENTER = 'notifications.showList'; @@ -171,11 +170,11 @@ export function registerNotificationCommands(center: INotificationsCenterControl primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyA, handler: (accessor) => { const actionRunner = accessor.get(IInstantiationService).createInstance(NotificationActionRunner); - const notification = getNotificationFromContext(accessor.get(IListService)) || firstOrDefault(model.notifications); + const notification = getNotificationFromContext(accessor.get(IListService)) || model.notifications.at(0); if (!notification) { return; } - const primaryAction = notification.actions?.primary ? firstOrDefault(notification.actions.primary) : undefined; + const primaryAction = notification.actions?.primary ? notification.actions.primary.at(0) : undefined; if (!primaryAction) { return; } diff --git a/src/vs/workbench/browser/parts/notifications/notificationsList.ts b/src/vs/workbench/browser/parts/notifications/notificationsList.ts index 4dad9770b..e39aa5755 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsList.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsList.ts @@ -3,24 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/notificationsList'; -import { localize } from 'vs/nls'; -import { getWindow, isAncestorOfActiveElement, trackFocus } from 'vs/base/browser/dom'; -import { WorkbenchList } from 'vs/platform/list/browser/listService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IListAccessibilityProvider, IListOptions } from 'vs/base/browser/ui/list/listWidget'; -import { NOTIFICATIONS_BACKGROUND } from 'vs/workbench/common/theme'; -import { INotificationViewItem } from 'vs/workbench/common/notifications'; -import { NotificationsListDelegate, NotificationRenderer } from 'vs/workbench/browser/parts/notifications/notificationsViewer'; -import { CopyNotificationMessageAction } from 'vs/workbench/browser/parts/notifications/notificationsActions'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { assertAllDefined } from 'vs/base/common/types'; -import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { AriaRole } from 'vs/base/browser/ui/aria/aria'; -import { NotificationActionRunner } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import './media/notificationsList.css'; +import { localize } from '../../../../nls.js'; +import { getWindow, isAncestorOfActiveElement, trackFocus } from '../../../../base/browser/dom.js'; +import { WorkbenchList } from '../../../../platform/list/browser/listService.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IListAccessibilityProvider, IListOptions } from '../../../../base/browser/ui/list/listWidget.js'; +import { NOTIFICATIONS_BACKGROUND } from '../../../common/theme.js'; +import { INotificationViewItem } from '../../../common/notifications.js'; +import { NotificationsListDelegate, NotificationRenderer } from './notificationsViewer.js'; +import { CopyNotificationMessageAction } from './notificationsActions.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { assertAllDefined } from '../../../../base/common/types.js'; +import { NotificationFocusedContext } from '../../../common/contextkeys.js'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { AriaRole } from '../../../../base/browser/ui/aria/aria.js'; +import { NotificationActionRunner } from './notificationsCommands.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; export interface INotificationsListOptions extends IListOptions { readonly widgetAriaLabel?: string; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsStatus.ts b/src/vs/workbench/browser/parts/notifications/notificationsStatus.ts index 71b8a59aa..3e0ec6238 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsStatus.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsStatus.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { INotificationsModel, INotificationChangeEvent, NotificationChangeType, IStatusMessageChangeEvent, StatusMessageChangeType, IStatusMessageViewItem } from 'vs/workbench/common/notifications'; -import { IStatusbarService, StatusbarAlignment, IStatusbarEntryAccessor, IStatusbarEntry } from 'vs/workbench/services/statusbar/browser/statusbar'; -import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { HIDE_NOTIFICATIONS_CENTER, SHOW_NOTIFICATIONS_CENTER } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; -import { localize } from 'vs/nls'; -import { INotificationService, NotificationsFilter } from 'vs/platform/notification/common/notification'; +import { INotificationsModel, INotificationChangeEvent, NotificationChangeType, IStatusMessageChangeEvent, StatusMessageChangeType, IStatusMessageViewItem } from '../../../common/notifications.js'; +import { IStatusbarService, StatusbarAlignment, IStatusbarEntryAccessor, IStatusbarEntry } from '../../../services/statusbar/browser/statusbar.js'; +import { Disposable, IDisposable, dispose } from '../../../../base/common/lifecycle.js'; +import { HIDE_NOTIFICATIONS_CENTER, SHOW_NOTIFICATIONS_CENTER } from './notificationsCommands.js'; +import { localize } from '../../../../nls.js'; +import { INotificationService, NotificationsFilter } from '../../../../platform/notification/common/notification.js'; export class NotificationsStatus extends Disposable { diff --git a/src/vs/workbench/browser/parts/notifications/notificationsTelemetry.ts b/src/vs/workbench/browser/parts/notifications/notificationsTelemetry.ts index 97d1d6a18..fd7b3f3da 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsTelemetry.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsTelemetry.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; -import { INotificationService, NotificationMessage, NotificationPriority } from 'vs/platform/notification/common/notification'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { hash } from 'vs/base/common/hash'; +import { Disposable } from '../../../../base/common/lifecycle.js'; +import { INotificationService, NotificationMessage, NotificationPriority } from '../../../../platform/notification/common/notification.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { IWorkbenchContribution } from '../../../common/contributions.js'; +import { hash } from '../../../../base/common/hash.js'; export interface NotificationMetrics { readonly id: string; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts b/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts index 943136732..f0dda3b44 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts @@ -3,29 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/notificationsToasts'; -import { localize } from 'vs/nls'; -import { INotificationsModel, NotificationChangeType, INotificationChangeEvent, INotificationViewItem, NotificationViewItemContentChangeKind } from 'vs/workbench/common/notifications'; -import { IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { addDisposableListener, EventType, Dimension, scheduleAtNextAnimationFrame, isAncestorOfActiveElement, getWindow } from 'vs/base/browser/dom'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { NotificationsList } from 'vs/workbench/browser/parts/notifications/notificationsList'; -import { Event, Emitter } from 'vs/base/common/event'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { NOTIFICATIONS_TOAST_BORDER, NOTIFICATIONS_BACKGROUND } from 'vs/workbench/common/theme'; -import { IThemeService, Themable } from 'vs/platform/theme/common/themeService'; -import { widgetShadow } from 'vs/platform/theme/common/colorRegistry'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { INotificationsToastController } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { Severity, NotificationsFilter, NotificationPriority } from 'vs/platform/notification/common/notification'; -import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { ILifecycleService, LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IntervalCounter } from 'vs/base/common/async'; -import { assertIsDefined } from 'vs/base/common/types'; -import { NotificationsToastsVisibleContext } from 'vs/workbench/common/contextkeys'; -import { mainWindow } from 'vs/base/browser/window'; +import './media/notificationsToasts.css'; +import { localize } from '../../../../nls.js'; +import { INotificationsModel, NotificationChangeType, INotificationChangeEvent, INotificationViewItem, NotificationViewItemContentChangeKind } from '../../../common/notifications.js'; +import { IDisposable, dispose, toDisposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { addDisposableListener, EventType, Dimension, scheduleAtNextAnimationFrame, isAncestorOfActiveElement, getWindow } from '../../../../base/browser/dom.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { NotificationsList } from './notificationsList.js'; +import { Event, Emitter } from '../../../../base/common/event.js'; +import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; +import { NOTIFICATIONS_TOAST_BORDER, NOTIFICATIONS_BACKGROUND } from '../../../common/theme.js'; +import { IThemeService, Themable } from '../../../../platform/theme/common/themeService.js'; +import { widgetShadow } from '../../../../platform/theme/common/colorRegistry.js'; +import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { INotificationsToastController } from './notificationsCommands.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { Severity, NotificationsFilter, NotificationPriority } from '../../../../platform/notification/common/notification.js'; +import { ScrollbarVisibility } from '../../../../base/common/scrollable.js'; +import { ILifecycleService, LifecyclePhase } from '../../../services/lifecycle/common/lifecycle.js'; +import { IHostService } from '../../../services/host/browser/host.js'; +import { IntervalCounter } from '../../../../base/common/async.js'; +import { assertIsDefined } from '../../../../base/common/types.js'; +import { NotificationsToastsVisibleContext } from '../../../common/contextkeys.js'; +import { mainWindow } from '../../../../base/browser/window.js'; interface INotificationToast { readonly item: INotificationViewItem; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts b/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts index c1fda2442..c1880ef98 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts @@ -3,35 +3,35 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IListVirtualDelegate, IListRenderer } from 'vs/base/browser/ui/list/list'; -import { clearNode, addDisposableListener, EventType, EventHelper, $, isEventLike } from 'vs/base/browser/dom'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ButtonBar, IButtonOptions } from 'vs/base/browser/ui/button/button'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { ActionRunner, IAction, IActionRunner, Separator, toAction } from 'vs/base/common/actions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { dispose, DisposableStore, Disposable } from 'vs/base/common/lifecycle'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { INotificationViewItem, NotificationViewItem, NotificationViewItemContentChangeKind, INotificationMessage, ChoiceAction } from 'vs/workbench/common/notifications'; -import { ClearNotificationAction, ExpandNotificationAction, CollapseNotificationAction, ConfigureNotificationAction } from 'vs/workbench/browser/parts/notifications/notificationsActions'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; -import { INotificationService, NotificationsFilter, Severity, isNotificationSource } from 'vs/platform/notification/common/notification'; -import { isNonEmptyArray } from 'vs/base/common/arrays'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; -import { DomEmitter } from 'vs/base/browser/event'; -import { Gesture, EventType as GestureEventType } from 'vs/base/browser/touch'; -import { Event } from 'vs/base/common/event'; -import { defaultButtonStyles, defaultProgressBarStyles } from 'vs/platform/theme/browser/defaultStyles'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; -import type { IManagedHover } from 'vs/base/browser/ui/hover/hover'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; +import { IListVirtualDelegate, IListRenderer } from '../../../../base/browser/ui/list/list.js'; +import { clearNode, addDisposableListener, EventType, EventHelper, $, isEventLike } from '../../../../base/browser/dom.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { URI } from '../../../../base/common/uri.js'; +import { localize } from '../../../../nls.js'; +import { ButtonBar, IButtonOptions } from '../../../../base/browser/ui/button/button.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { ActionRunner, IAction, IActionRunner, Separator, toAction } from '../../../../base/common/actions.js'; +import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { dispose, DisposableStore, Disposable } from '../../../../base/common/lifecycle.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { INotificationViewItem, NotificationViewItem, NotificationViewItemContentChangeKind, INotificationMessage, ChoiceAction } from '../../../common/notifications.js'; +import { ClearNotificationAction, ExpandNotificationAction, CollapseNotificationAction, ConfigureNotificationAction } from './notificationsActions.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ProgressBar } from '../../../../base/browser/ui/progressbar/progressbar.js'; +import { INotificationService, NotificationsFilter, Severity, isNotificationSource } from '../../../../platform/notification/common/notification.js'; +import { isNonEmptyArray } from '../../../../base/common/arrays.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { DropdownMenuActionViewItem } from '../../../../base/browser/ui/dropdown/dropdownActionViewItem.js'; +import { DomEmitter } from '../../../../base/browser/event.js'; +import { Gesture, EventType as GestureEventType } from '../../../../base/browser/touch.js'; +import { Event } from '../../../../base/common/event.js'; +import { defaultButtonStyles, defaultProgressBarStyles } from '../../../../platform/theme/browser/defaultStyles.js'; +import { KeyCode } from '../../../../base/common/keyCodes.js'; +import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; +import { getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js'; +import type { IManagedHover } from '../../../../base/browser/ui/hover/hover.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; export class NotificationsListDelegate implements IListVirtualDelegate { diff --git a/src/vs/workbench/browser/parts/paneCompositeBar.ts b/src/vs/workbench/browser/parts/paneCompositeBar.ts index 999ec66db..22cce772c 100644 --- a/src/vs/workbench/browser/parts/paneCompositeBar.ts +++ b/src/vs/workbench/browser/parts/paneCompositeBar.ts @@ -3,32 +3,33 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IActivityService } from 'vs/workbench/services/activity/common/activity'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IDisposable, DisposableStore, Disposable, DisposableMap } from 'vs/base/common/lifecycle'; -import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import { CompositeBar, ICompositeBarItem, CompositeDragAndDrop } from 'vs/workbench/browser/parts/compositeBar'; -import { Dimension, createCSSRule, asCSSUrl, isMouseEvent } from 'vs/base/browser/dom'; -import { IStorageService, StorageScope, StorageTarget, IProfileStorageValueChangeEvent } from 'vs/platform/storage/common/storage'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ToggleCompositePinnedAction, ICompositeBarColors, IActivityHoverOptions, ToggleCompositeBadgeAction, CompositeBarAction, ICompositeBar, ICompositeBarActionItem } from 'vs/workbench/browser/parts/compositeBarActions'; -import { IViewDescriptorService, ViewContainer, IViewContainerModel, ViewContainerLocation } from 'vs/workbench/common/views'; -import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { isString } from 'vs/base/common/types'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { isNative } from 'vs/base/common/platform'; -import { Before2D, ICompositeDragAndDrop } from 'vs/workbench/browser/dnd'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { IAction, toAction } from 'vs/base/common/actions'; -import { StringSHA1 } from 'vs/base/common/hash'; -import { GestureEvent } from 'vs/base/browser/touch'; -import { IPaneCompositePart } from 'vs/workbench/browser/parts/paneCompositePart'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { localize } from '../../../nls.js'; +import { ActionsOrientation } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { IActivityService } from '../../services/activity/common/activity.js'; +import { IWorkbenchLayoutService, Parts } from '../../services/layout/browser/layoutService.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { IDisposable, DisposableStore, Disposable, DisposableMap } from '../../../base/common/lifecycle.js'; +import { IColorTheme } from '../../../platform/theme/common/themeService.js'; +import { CompositeBar, ICompositeBarItem, CompositeDragAndDrop } from './compositeBar.js'; +import { Dimension, createCSSRule, asCSSUrl, isMouseEvent } from '../../../base/browser/dom.js'; +import { IStorageService, StorageScope, StorageTarget, IProfileStorageValueChangeEvent } from '../../../platform/storage/common/storage.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { URI, UriComponents } from '../../../base/common/uri.js'; +import { ToggleCompositePinnedAction, ICompositeBarColors, IActivityHoverOptions, ToggleCompositeBadgeAction, CompositeBarAction, ICompositeBar, ICompositeBarActionItem } from './compositeBarActions.js'; +import { IViewDescriptorService, ViewContainer, IViewContainerModel, ViewContainerLocation } from '../../common/views.js'; +import { IContextKeyService, ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { isString } from '../../../base/common/types.js'; +import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js'; +import { isNative } from '../../../base/common/platform.js'; +import { Before2D, ICompositeDragAndDrop } from '../dnd.js'; +import { ThemeIcon } from '../../../base/common/themables.js'; +import { IAction, toAction } from '../../../base/common/actions.js'; +import { StringSHA1 } from '../../../base/common/hash.js'; +import { GestureEvent } from '../../../base/browser/touch.js'; +import { IPaneCompositePart } from './paneCompositePart.js'; +import { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js'; +import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; +import { IViewsService } from '../../services/views/common/viewsService.js'; interface IPlaceholderViewContainer { readonly id: string; @@ -102,6 +103,7 @@ export class PaneCompositeBar extends Disposable { @IStorageService private readonly storageService: IStorageService, @IExtensionService private readonly extensionService: IExtensionService, @IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService, + @IViewsService private readonly viewService: IViewsService, @IContextKeyService protected readonly contextKeyService: IContextKeyService, @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, @IWorkbenchLayoutService protected readonly layoutService: IWorkbenchLayoutService, @@ -383,7 +385,7 @@ export class PaneCompositeBar extends Disposable { if (viewContainer) { if (viewContainer.hideIfEmpty) { - if (this.viewDescriptorService.getViewContainerModel(viewContainer).activeViewDescriptors.length > 0) { + if (this.viewService.isViewContainerActive(viewContainerId)) { return false; } } else { diff --git a/src/vs/workbench/browser/parts/paneCompositePart.ts b/src/vs/workbench/browser/parts/paneCompositePart.ts index cf29cbed9..9ec755c35 100644 --- a/src/vs/workbench/browser/parts/paneCompositePart.ts +++ b/src/vs/workbench/browser/parts/paneCompositePart.ts @@ -3,43 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/paneCompositePart'; -import { Event } from 'vs/base/common/event'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IProgressIndicator } from 'vs/platform/progress/common/progress'; -import { Extensions, PaneComposite, PaneCompositeDescriptor, PaneCompositeRegistry } from 'vs/workbench/browser/panecomposite'; -import { IPaneComposite } from 'vs/workbench/common/panecomposite'; -import { IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views'; -import { DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IView } from 'vs/base/browser/ui/grid/grid'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { CompositePart, ICompositeTitleLabel } from 'vs/workbench/browser/parts/compositePart'; -import { IPaneCompositeBarOptions, PaneCompositeBar } from 'vs/workbench/browser/parts/paneCompositeBar'; -import { Dimension, EventHelper, trackFocus, $, addDisposableListener, EventType, prepend, getWindow } from 'vs/base/browser/dom'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IComposite } from 'vs/workbench/common/composite'; -import { localize } from 'vs/nls'; -import { CompositeDragAndDropObserver, toggleDropEffect } from 'vs/workbench/browser/dnd'; -import { EDITOR_DRAG_AND_DROP_BACKGROUND } from 'vs/workbench/common/theme'; -import { IPartOptions } from 'vs/workbench/browser/part'; -import { CompositeMenuActions } from 'vs/workbench/browser/actions'; -import { IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { ActionsOrientation, prepareActions } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Gesture, EventType as GestureEventType } from 'vs/base/browser/touch'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { IAction, SubmenuAction } from 'vs/base/common/actions'; -import { Composite } from 'vs/workbench/browser/composite'; -import { ViewsSubMenu } from 'vs/workbench/browser/parts/views/viewPaneContainer'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IHoverService } from 'vs/platform/hover/browser/hover'; -import { HiddenItemStrategy, WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; +import './media/paneCompositePart.css'; +import { Event } from '../../../base/common/event.js'; +import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; +import { IProgressIndicator } from '../../../platform/progress/common/progress.js'; +import { Extensions, PaneComposite, PaneCompositeDescriptor, PaneCompositeRegistry } from '../panecomposite.js'; +import { IPaneComposite } from '../../common/panecomposite.js'; +import { IViewDescriptorService, ViewContainerLocation } from '../../common/views.js'; +import { DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js'; +import { IView } from '../../../base/browser/ui/grid/grid.js'; +import { IWorkbenchLayoutService, Parts } from '../../services/layout/browser/layoutService.js'; +import { CompositePart, ICompositeTitleLabel } from './compositePart.js'; +import { IPaneCompositeBarOptions, PaneCompositeBar } from './paneCompositeBar.js'; +import { Dimension, EventHelper, trackFocus, $, addDisposableListener, EventType, prepend, getWindow } from '../../../base/browser/dom.js'; +import { Registry } from '../../../platform/registry/common/platform.js'; +import { INotificationService } from '../../../platform/notification/common/notification.js'; +import { IStorageService } from '../../../platform/storage/common/storage.js'; +import { IContextMenuService } from '../../../platform/contextview/browser/contextView.js'; +import { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js'; +import { IThemeService } from '../../../platform/theme/common/themeService.js'; +import { IContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js'; +import { IExtensionService } from '../../services/extensions/common/extensions.js'; +import { IComposite } from '../../common/composite.js'; +import { localize } from '../../../nls.js'; +import { CompositeDragAndDropObserver, toggleDropEffect } from '../dnd.js'; +import { EDITOR_DRAG_AND_DROP_BACKGROUND } from '../../common/theme.js'; +import { IPartOptions } from '../part.js'; +import { CompositeMenuActions } from '../actions.js'; +import { IMenuService, MenuId } from '../../../platform/actions/common/actions.js'; +import { ActionsOrientation, prepareActions } from '../../../base/browser/ui/actionbar/actionbar.js'; +import { Gesture, EventType as GestureEventType } from '../../../base/browser/touch.js'; +import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js'; +import { IAction, SubmenuAction } from '../../../base/common/actions.js'; +import { Composite } from '../composite.js'; +import { ViewsSubMenu } from './views/viewPaneContainer.js'; +import { createAndFillInActionBarActions } from '../../../platform/actions/browser/menuEntryActionViewItem.js'; +import { IHoverService } from '../../../platform/hover/browser/hover.js'; +import { HiddenItemStrategy, WorkbenchToolBar } from '../../../platform/actions/browser/toolbar.js'; export enum CompositeBarPosition { TOP, @@ -268,7 +268,7 @@ export abstract class AbstractPaneCompositePart extends CompositePart { EventHelper.stop(e.eventData, true); if (this.paneCompositeBar.value) { @@ -296,6 +296,28 @@ export abstract class AbstractPaneCompositePart extends CompositePart